feiyu02
2024-11-08 d2727f231319a48019bc3b87439136ab49b97b9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package cn.flightfeather.supervision.lightshare.service.impl
 
import cn.flightfeather.supervision.common.utils.Constant
import cn.flightfeather.supervision.common.utils.PinYin
import cn.flightfeather.supervision.common.utils.UUIDGenerator
import cn.flightfeather.supervision.domain.ds1.entity.Scense
import cn.flightfeather.supervision.domain.ds1.entity.Userinfo
import cn.flightfeather.supervision.domain.ds1.mapper.ScenseMapper
import cn.flightfeather.supervision.domain.ds1.mapper.UserinfoMapper
import cn.flightfeather.supervision.domain.ds1.repository.SceneRep
import cn.flightfeather.supervision.domain.ds1.repository.TaskRep
import cn.flightfeather.supervision.domain.ds1.repository.UserInfoSVRep
import cn.flightfeather.supervision.domain.ds2.entity.UserinfoTZ
import cn.flightfeather.supervision.domain.ds2.repository.UserInfoTZRep
import cn.flightfeather.supervision.lightshare.service.UserinfoService
import cn.flightfeather.supervision.lightshare.vo.AreaVo
import cn.flightfeather.supervision.lightshare.vo.DataHead
import com.github.pagehelper.PageHelper
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service
import tk.mybatis.mapper.entity.Example
import kotlin.random.Random
import kotlin.random.nextInt
 
@Service
class UserinfoServiceImpl(
    val userinfoMapper: UserinfoMapper,
    private val scenseMapper: ScenseMapper,
    private val userInfoSVRep: UserInfoSVRep,
    private val userInfoTZRep: UserInfoTZRep,
) : UserinfoService {
 
    //根据userinfo条件查询
    override fun findOneByName(userinfo: Userinfo): Userinfo? {
        val example = Example(Userinfo::class.java)
        val criteria = example.createCriteria()
        criteria.andEqualTo("acountname", userinfo.acountname)
            .andEqualTo("password", userinfo.password)
        val result = userinfoMapper.selectByExample(example)
        return if (result.isNotEmpty()) {
            result[0]
        } else {
            userinfo.apply {
                guid = "null"
                usertypeid = -1
            }
        }
    }
 
    override fun findByType(typeId: Byte, enable: Boolean?): List<Userinfo> {
        val result = userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
            createCriteria().andEqualTo("usertypeid", typeId)
                .apply {
                    enable?.let { andEqualTo("isenable", it) }
                }
        })
 
        return result
    }
 
    override fun findOne(id: String): Userinfo? = userinfoMapper.selectByPrimaryKey(id)
 
    override fun findAll(): MutableList<Userinfo> = userinfoMapper.selectAll()
 
    override fun save(userinfo: Userinfo): Int = userinfoMapper.insert(userinfo)
 
    override fun update(userinfo: Userinfo): Int {
        return if (userinfo.guid.isNullOrBlank() || userinfo.acountname.isNullOrBlank() || userinfo.password.isNullOrBlank()) {
            0
        } else {
            userinfoMapper.updateByPrimaryKeySelective(userinfo)
        }
    }
 
    override fun delete(id: String): Int = userinfoMapper.deleteByPrimaryKey(id)
 
    override fun search(areaVo: AreaVo, keyword: String, userType: Int?, page: Int?, perPage: Int?)
            : Pair<DataHead, List<Userinfo?>> {
        val p = PageHelper.startPage<Userinfo>(page ?: 1, perPage ?: 30)
        val result = userInfoSVRep.searchUser(areaVo, keyword.trim(), Constant.UserType.fromValue(userType))
        result.forEach { it?.password = null }
        return DataHead(p.pageNum, p.pages, p.total) to result
    }
 
    override fun createAccount(sceneId: String): Userinfo {
        findByScene(sceneId)?.let { return it }
 
        scenseMapper.selectByPrimaryKey(sceneId)?.let {
            createAccount(it)
        }
        return Userinfo()
    }
 
    override fun findByScene(sceneId: String): Userinfo? {
        userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
            createCriteria().andEqualTo("dGuid", sceneId)
        })?.takeIf { it.isNotEmpty() }?.let { return it[0] }
        return null
    }
 
    override fun getUName(sceneName: String): String {
        var uName = PinYin.getPinYinHeader(sceneName)
        var suffix = ""
        var repeated: Boolean
        var i = 1
        do {
            userinfoMapper.selectByExample(Example(Userinfo::class.java).apply {
                createCriteria().andEqualTo("acountname", uName + suffix)
            }).let {
                repeated = it.isNotEmpty()
                if (repeated) {
                    suffix = Random.nextInt(100..999).toString()
                }
            }
            i++
        } while (repeated && i < 20)
        if (repeated) uName = UUIDGenerator.generateShortUUID()
        return uName + suffix
    }
 
    override fun autoCreateAccount() {
        val sceneList = scenseMapper.selectNoAccountScene()
        sceneList.forEach {
            createAccount(it)
        }
    }
 
    override fun createAccount(scence: Scense):Userinfo {
        scence.let {
            // 判断该场景是否已有对应账户
            val user = userInfoSVRep.findUser(it.guid)
            if (user != null) return user
 
            val sceneName = it.name ?: return Userinfo()
            val uName = getUName(sceneName)
            val userInfo = Userinfo().apply {
                guid = UUIDGenerator.generate16ShortUUID()
                acountname = uName
                realname = sceneName
                password = "123456"
                usertypeid = 3
                usertype = "企业"
                dGuid = it.guid
                departmentname = sceneName
                isenable = true
                remark = it.districtname
            }
 
            val r = userinfoMapper.insert(userInfo)
            if (r == 1) {
                return userInfo
            } else {
                return Userinfo()
            }
        }
    }
 
    override fun createAccountTZ(userinfo: Userinfo, scence: Scense): UserinfoTZ {
        val userinfoTZ = UserinfoTZ()
        BeanUtils.copyProperties(userinfo, userinfoTZ)
        // 使用新的id
        userinfoTZ.guid = UUIDGenerator.generate16ShortUUID()
        // 添加区县描述
        // FIXME: 2024/4/23 目前在BaseInfo基础信息中已存储完整的行政区划,后续应将此处记录去除
        userinfoTZ.extension1 = userinfoTZ.remark
        userinfoTZ.remark = null
        // 场景类型转换
        userinfoTZ.extension2 = Constant.SceneType.typeMap(scence.typeid)?.toString()
        // 根据acountname和realname进行重复判断
        userInfoTZRep.findOne(UserinfoTZ().apply {
            acountname = userinfoTZ.acountname
            realname = userinfoTZ.realname
        }).takeIf { it == null }.run {
            // 当没有查询结果时,插入新账户信息
            userInfoTZRep.insert(userinfoTZ)
        }
        return userinfoTZ
    }
}