shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
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
package com.iplatform.base.service;
 
import com.iplatform.base.Constants;
import com.iplatform.base.DeptCacheProvider;
import com.iplatform.base.UserCacheProvider;
import com.iplatform.base.service_api.UserAndDeptServiceApi;
import com.iplatform.core.BeanContextAware;
import com.iplatform.model.po.S_dept;
import com.iplatform.model.po.S_user_core;
import com.iplatform.model.to.UserAndDeptTo;
import com.iplatform.model.to.UserAndDeptToResult;
import com.walker.infrastructure.utils.DateUtils;
import com.walker.infrastructure.utils.NumberGenerator;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import com.walker.web.OrgType;
import com.walker.web.ResponseValue;
import com.walker.web.UserType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class UserDeptApiServiceImpl extends BaseServiceImpl implements UserAndDeptServiceApi {
 
    private final transient Logger logger = LoggerFactory.getLogger(this.getClass());
 
    public Object execInsertMobileUserRegister(String phone){
 
        return null;
    }
 
    @Override
    public ResponseValue execInsertTopOrgAndAdmin(UserAndDeptTo userAndDeptTo){
        if(userAndDeptTo == null
                || StringUtils.isEmpty(userAndDeptTo.getDeptName())
                || StringUtils.isEmpty(userAndDeptTo.getUserName())){
            throw new IllegalArgumentException(Constants.ERROR_ARGUMENT);
        }
 
        UserAndDeptToResult result = new UserAndDeptToResult();
 
        S_dept existDept = this.existSameNameOrg(userAndDeptTo.getDeptName());
        if(existDept != null){
//            result.setMessage("顶级机构名称已经存在,无法重复添加");
            // 如果之前已经调用过写入数据,这里会直接返回,因为可能存在网络调用后第三方系统调用业务失败情况!
            S_user_core existUser = this.existSameNameUser(userAndDeptTo.getUserName());
            if(existUser != null){
                logger.warn("已经存在用户和机构,直接返回:deptId={}, userId={}", existDept.getId(), existUser.getId());
                result.setDeptId(existDept.getId());
                result.setUserId(existUser.getId());
                return ResponseValue.success(result);
            }
            return ResponseValue.error("顶级机构名称已经存在,无法重复添加");
        }
 
        long nextOrgId = this.queryNextDeptId();
 
        S_dept dept = new S_dept();
        dept.setId(nextOrgId);
        dept.setOrg_id(nextOrgId);
        dept.setOrg_type(OrgType.TYPE_ORG);
        dept.setParent_id(0L);
        dept.setAncestors("0");
        dept.setDept_name(userAndDeptTo.getDeptName());
        dept.setCreate_by(userAndDeptTo.getCreateId());
        dept.setOrder_num((int)nextOrgId);
        dept.setCreate_time(DateUtils.getDateTimeNumber());
        dept.setMenu_type(userAndDeptTo.getMenuType());
        dept.setPhone(userAndDeptTo.getPhone());
        dept.setEmail(userAndDeptTo.getMail());
        this.insert(dept);
 
        S_user_core user = new S_user_core();
        user.setId(NumberGenerator.getLongSequenceNumber());
        user.setCreate_time(dept.getCreate_time());
        user.setCreate_by(userAndDeptTo.getCreateId());
        user.setUpdate_time(dept.getCreate_time());
        user.setDept_id(nextOrgId);
        user.setOrg_id(nextOrgId);
        user.setUser_name(userAndDeptTo.getUserName());
        user.setNick_name(userAndDeptTo.getNickName());
        user.setUser_type(UserType.TYPE_MERCHANT_ADMIN);
        user.setPassword(userAndDeptTo.getPassword());  // 加密过的密码
        if(StringUtils.isNotEmpty(userAndDeptTo.getPhone())){
            user.setPhonenumber(userAndDeptTo.getPhone());
        }
        if(StringUtils.isNotEmpty(userAndDeptTo.getMail())){
            user.setEmail(userAndDeptTo.getMail());
        }
        user.setType(UserType.TYPE_MERCHANT_ADMIN);
        user.setMer_id(nextOrgId);
        this.insert(user);
 
        // 添加系统缓存
        BeanContextAware.getBeanByType(DeptCacheProvider.class).putDept(dept);
        BeanContextAware.getBeanByType(UserCacheProvider.class).putUser(user);
 
        result.setDeptId(nextOrgId);
        result.setUserId(user.getId());
        return ResponseValue.success(result);
    }
 
    @Override
    public ResponseValue execUpdateTopOrgAndAdmin(UserAndDeptTo userAndDeptTo) {
        // 机构只能修改这些不重要属性,用户不修改。
        S_dept dept = new S_dept(userAndDeptTo.getOrgId());
        dept.setDept_name(userAndDeptTo.getDeptName());
        dept.setEmail(userAndDeptTo.getMail());
        dept.setPhone(userAndDeptTo.getPhone());
        this.save(dept);
        dept = this.get(new S_dept(userAndDeptTo.getOrgId()));
        // 添加系统缓存
        BeanContextAware.getBeanByType(DeptCacheProvider.class).updateDept(dept);
        return ResponseValue.success();
    }
 
    private S_user_core existSameNameUser(String loginId){
        S_user_core user = new S_user_core();
        user.setUser_name(loginId);
        List<S_user_core> list = this.select(user);
        if(StringUtils.isEmptyList(list)){
            return null;
        }
        return list.get(0);
    }
 
    private S_dept existSameNameOrg(String name){
        S_dept dept = new S_dept();
        dept.setDept_name(name);
        dept.setOrg_type(OrgType.TYPE_ORG);
        List<S_dept> list = this.select(dept);
        if(StringUtils.isEmptyList(list)){
            return null;
        }
        return list.get(0);
    }
 
    /**
     * 获得下一个可用的最大ID。
     * @return
     * @date 2023-05-17
     */
    public int queryNextDeptId(){
        int maxId = this.queryForInt(SQL_MAX_DEPT_ID, new Object[]{});
        return maxId+1;
    }
 
    private static final String SQL_MAX_DEPT_ID = "select count(id) from s_dept";
}