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 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 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"; }