SiteUserImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. package com.hz.employmentsite.services.impl.baseSettings;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.hz.employmentsite.filter.exception.BaseException;
  5. import com.hz.employmentsite.mapper.*;
  6. import com.hz.employmentsite.mapper.cquery.UserInfoCQuery;
  7. import com.hz.employmentsite.model.*;
  8. import com.hz.employmentsite.services.service.baseSettings.SiteUserService;
  9. import com.hz.employmentsite.services.service.system.DictionaryService;
  10. import com.hz.employmentsite.util.StringUtils;
  11. import com.hz.employmentsite.vo.baseSettings.SiteUserVo;
  12. import net.sourceforge.pinyin4j.PinyinHelper;
  13. import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  14. import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  15. import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  16. import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.util.DigestUtils;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.List;
  23. import java.util.UUID;
  24. import java.util.regex.Pattern;
  25. import java.util.stream.Collectors;
  26. @Service("SiteUserService")
  27. public class SiteUserImpl implements SiteUserService {
  28. @Autowired
  29. private UserInfoCQuery userInfoCQuery;
  30. @Autowired
  31. private StringUtils stringUtils;
  32. @Autowired
  33. private PcSiteUserMapper pcSiteUserMapper;
  34. @Autowired
  35. private SysUserMapper sysUserMapper;
  36. @Autowired
  37. private SysRoleMapper sysRoleMapper;
  38. @Autowired
  39. private SysUserSysRoleMapper sysUserSysRoleMapper;
  40. @Autowired
  41. private PcSiteMapper siteMapper;
  42. @Autowired
  43. private DictionaryService dictionaryService;
  44. private final String MOBILE_REGEX = "0?(13|14|15|18|17)[0-9]{9}";
  45. private final String ID_CARD_REGEX = "\\d{17}[\\d|x]|\\d{15}";
  46. @Override
  47. public PageInfo<SiteUserVo> getList(int pageIndex, int pageSize, List<String> siteUserIDList, String siteUserName, String siteID, String roleName, String regionCode, String userNo) {
  48. PageHelper.startPage(pageIndex, pageSize);
  49. List<SiteUserVo> dataList = userInfoCQuery.getList(stringUtils.ListToInSql(siteUserIDList), siteUserName, siteID, roleName, regionCode, userNo);
  50. PageInfo<SiteUserVo> result = new PageInfo(dataList);
  51. return result;
  52. }
  53. @Override
  54. public PageInfo<SiteUserVo> getListBySiteID(int pageIndex, int pageSize, String siteID) {
  55. PageHelper.startPage(pageIndex, pageSize);
  56. List<SiteUserVo> dataList = userInfoCQuery.getListBySiteID(siteID);
  57. PageInfo<SiteUserVo> result = new PageInfo(dataList);
  58. return result;
  59. }
  60. @Override
  61. public SiteUserVo get(String siteUserID) {
  62. List<String> ids = new ArrayList<>();
  63. if (stringUtils.IsNullOrEmpty(siteUserID)) {
  64. return null;
  65. }else{
  66. ids.add(siteUserID);
  67. }
  68. SiteUserVo model = userInfoCQuery.getList(stringUtils.ListToInSql(ids), null, null, null, null, null).stream().findFirst().orElse(null);
  69. return model;
  70. }
  71. @Override
  72. public List<SelectProps> getDataList() {
  73. var dataList = getList(1, 99999, null, null, null, null, null, null).getList();
  74. List<SelectProps> dataResult = new ArrayList<>();
  75. for (var item: dataList) {
  76. SelectProps itemResult = new SelectProps();
  77. itemResult.setText(item.siteUserName);
  78. itemResult.setValue(item.userID);
  79. dataResult.add(itemResult);
  80. }
  81. return dataResult;
  82. }
  83. @Override
  84. public Integer save(SiteUserVo data, String userId) {
  85. int result = 0;
  86. // 手机号查重
  87. List<String> byMobileSiteId = pcSiteUserMapper.selectByMobile(data.mobile);
  88. List<String> byUserNoSiteId = pcSiteUserMapper.selectByUserNo(data.userNo);
  89. List<String> byIdCardSiteId = pcSiteUserMapper.selectByIdCard(data.idCard);
  90. SiteUserVo record = get(data.siteUserID);
  91. PcSiteUser dbData = record == null ? null : pcSiteUserMapper.selectByPrimaryKey(record.siteUserID);
  92. Boolean isExist = dbData != null;
  93. SysUser curSysUserData = data.userID != null ? sysUserMapper.selectByPrimaryKey(data.userID) : null;
  94. Boolean isLinkUser = curSysUserData != null;
  95. SysRoleExample roleExp = null;
  96. /*注意:这里的data.roleID为用户类型ID*/
  97. if (!isExist) {
  98. // 添加时有重复数据立即报错
  99. if (!byMobileSiteId.isEmpty()) {
  100. throw new BaseException("500", "该手机号已绑定其他驿站人员");
  101. }
  102. if (!byUserNoSiteId.isEmpty()) {
  103. throw new BaseException("500", "该工号已绑定其他驿站人员");
  104. }
  105. if (!byIdCardSiteId.isEmpty()) {
  106. throw new BaseException("500", "该身份证已绑定其他驿站人员");
  107. }
  108. //添加
  109. //处理用户表
  110. curSysUserData = new SysUser();
  111. curSysUserData.setUserID(UUID.randomUUID().toString());
  112. curSysUserData.setName(data.getSiteUserName());
  113. curSysUserData.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()).toUpperCase());
  114. curSysUserData.setLoginID(StrToPinYin(data.getSiteUserName()));
  115. curSysUserData.setUserTypeID(data.getRoleID());
  116. curSysUserData.setCreateTime(new Date());
  117. curSysUserData.setCreateBy(userId);
  118. curSysUserData.setRecordStatus(1);
  119. result += sysUserMapper.insert(curSysUserData);
  120. //处理站点人员表
  121. dbData = new PcSiteUser();
  122. dbData.setUserID(curSysUserData.getUserID());
  123. dbData.setSiteUserID(data.getSiteUserID());
  124. dbData.setSiteID(data.getSiteID());
  125. dbData.setGender(data.getGender());
  126. dbData.setSiteUserName(data.getSiteUserName());
  127. dbData.setGender(data.getGender());
  128. dbData.setRoleID(data.getRoleID());
  129. dbData.setMobile(data.getMobile());
  130. dbData.setUserNo(data.getUserNo());
  131. dbData.setIDCard(data.getIdCard());
  132. dbData.setCreateUserID(userId);
  133. dbData.setCreateTime(new Date());
  134. result += pcSiteUserMapper.insert(dbData);
  135. } else {
  136. // 修改时,ID列表中没有参数中的ID才报错
  137. if (!byMobileSiteId.isEmpty() && !byMobileSiteId.contains(data.siteUserID)) {
  138. throw new BaseException("500", "该手机号已绑定其他驿站人员");
  139. }
  140. if (!byUserNoSiteId.isEmpty() && !byUserNoSiteId.contains(data.siteUserID)) {
  141. throw new BaseException("500", "该工号已绑定其他驿站人员");
  142. }
  143. if (!byIdCardSiteId.isEmpty() && !byIdCardSiteId.contains(data.siteUserID)) {
  144. throw new BaseException("500", "该身份证已绑定其他驿站人员");
  145. }
  146. //修改
  147. //处理用户表
  148. if (isLinkUser) {
  149. curSysUserData.setName(data.siteUserName);
  150. curSysUserData.setUserTypeID(data.roleID);
  151. curSysUserData.setLoginID(StrToPinYin(data.siteUserName));
  152. curSysUserData.setUpdateTime(new Date());
  153. curSysUserData.setUpdateBy(userId);
  154. result += sysUserMapper.updateByPrimaryKey(curSysUserData);
  155. }
  156. //处理站点人员表
  157. dbData.setUserID(data.userID);
  158. dbData.setSiteUserID(data.siteUserID);
  159. dbData.setSiteID(data.getSiteID());
  160. dbData.setGender(data.gender);
  161. dbData.setSiteUserName(data.siteUserName);
  162. dbData.setGender(data.gender);
  163. dbData.setRoleID(data.roleID);
  164. dbData.setMobile(data.mobile);
  165. dbData.setUserNo(data.userNo);
  166. dbData.setIDCard(data.idCard);
  167. dbData.setUpdateBy(userId);
  168. dbData.setUpdateTime(new Date());
  169. result += pcSiteUserMapper.updateByPrimaryKey(dbData);
  170. }
  171. return result;
  172. }
  173. @Override
  174. public Integer delete(List<String> idList){
  175. int result = 0;
  176. PcSiteUserExample siteUserExp = new PcSiteUserExample();
  177. siteUserExp.or().andSiteUserIDIn(idList);
  178. var curSiteUserList = pcSiteUserMapper.selectByExample(siteUserExp).stream().toList();
  179. result += pcSiteUserMapper.deleteByExample(siteUserExp);
  180. if (curSiteUserList != null && curSiteUserList.size() > 0){
  181. for(PcSiteUser curSiteUser : curSiteUserList) {
  182. SysUserSysRoleExample userRoleExp = new SysUserSysRoleExample();
  183. userRoleExp.or().andUserIDEqualTo(curSiteUser.getUserID());
  184. result += sysUserSysRoleMapper.deleteByExample(userRoleExp);
  185. SysUserExample userExp = new SysUserExample();
  186. userExp.or().andUserIDEqualTo(curSiteUser.getUserID());
  187. result += sysUserMapper.deleteByExample(userExp);
  188. }
  189. }
  190. return result;
  191. }
  192. /**
  193. * 数据导入
  194. *
  195. * @param dataList excel数据
  196. * @param loginUserId 当前登录用户ID
  197. * @return 导入结果
  198. */
  199. @Override
  200. public List<SiteUserVo> importSiteUser(List<SiteUserVo> dataList, String loginUserId) {
  201. if (dataList.size() <= 0)
  202. throw new BaseException("", "请添加导入数据!");
  203. // 所属驿站
  204. List<PcSite> siteList = siteMapper.selectByExample(null);
  205. // 已存在的驿站工作人员
  206. List<PcSiteUser> pcSiteUsers = pcSiteUserMapper.selectByExample(null);
  207. // 用户类型字典数据
  208. List<SysDictionaryItem> userTypeList = dictionaryService.getDictionaryItemList("UserType");
  209. // 性别字典数据
  210. List<SysDictionaryItem> genderList = dictionaryService.getDictionaryItemList("Gender");
  211. // 最终结果
  212. List<SiteUserVo> resultList = new ArrayList<>();
  213. dataList.forEach(item -> {
  214. String errorInfo = "";
  215. // 数据内容为空判断
  216. if (stringUtils.IsNullOrEmpty(item.siteUserName)) {
  217. errorInfo += "请填写姓名!";
  218. }
  219. if (stringUtils.IsNullOrEmpty(item.userNo)) {
  220. errorInfo += "请填写工号!";
  221. } else {
  222. String siteUserID = pcSiteUsers.stream()
  223. .filter(it -> it.getUserNo() != null && it.getUserNo().equals(item.getUserNo().trim()))
  224. .findFirst()
  225. .orElse(new PcSiteUser())
  226. .getSiteUserID();
  227. if (!stringUtils.IsNullOrEmpty(siteUserID)) {
  228. errorInfo += "工号已绑定其他驿站人员!";
  229. }
  230. }
  231. if (stringUtils.IsNullOrEmpty(item.genderName)) {
  232. errorInfo += "请填写性别!";
  233. } else {
  234. item.gender = genderList.stream().filter(it -> it.getName().equals(item.getGenderName().trim()))
  235. .findFirst().orElse(new SysDictionaryItem()).getValue();
  236. if (item.gender == null) {
  237. errorInfo += "性别不存在!";
  238. }
  239. }
  240. if (stringUtils.IsNullOrEmpty(item.mobile)) {
  241. errorInfo += "请填写联系电话!";
  242. } else {
  243. if (Pattern.matches(MOBILE_REGEX, item.mobile)) {
  244. String siteUserID = pcSiteUsers.stream()
  245. .filter(it -> it.getMobile() != null && it.getMobile().equals(item.getMobile().trim()))
  246. .findFirst()
  247. .orElse(new PcSiteUser())
  248. .getSiteUserID();
  249. if (!stringUtils.IsNullOrEmpty(siteUserID)) {
  250. errorInfo += "联系电话已绑定其他驿站人员!";
  251. }
  252. } else {
  253. errorInfo += "联系电话格式错误!";
  254. }
  255. }
  256. if (stringUtils.IsNullOrEmpty(item.idCard)) {
  257. errorInfo += "请填写身份证号码!";
  258. } else {
  259. if (Pattern.matches(ID_CARD_REGEX, item.idCard)) {
  260. String siteUserID = pcSiteUsers.stream()
  261. .filter(it -> it.getIDCard() != null && it.getIDCard().equals(item.getIdCard().trim()))
  262. .findFirst()
  263. .orElse(new PcSiteUser())
  264. .getSiteUserID();
  265. if (!stringUtils.IsNullOrEmpty(siteUserID)) {
  266. errorInfo += "身份证已绑定其他驿站人员!";
  267. }
  268. } else {
  269. errorInfo += "身份证格式错误!";
  270. }
  271. }
  272. if (stringUtils.IsNullOrEmpty(item.roleName)) {
  273. errorInfo += "请填写用户类型!";
  274. } else {
  275. item.roleID = userTypeList.stream()
  276. .filter(it -> it.getName().equals(item.getRoleName().trim()))
  277. .findFirst()
  278. .orElse(new SysDictionaryItem())
  279. .getValue();
  280. if (item.roleID == null) {
  281. errorInfo += "用户类型不存在!";
  282. }
  283. }
  284. if (stringUtils.IsNullOrEmpty(item.siteName)) {
  285. errorInfo += "请填写所属驿站!";
  286. } else {
  287. item.siteID = siteList.stream()
  288. .filter(it -> it.getSiteName().equals(item.getSiteName().trim()))
  289. .findFirst()
  290. .orElse(new PcSite())
  291. .getSiteID();
  292. if (stringUtils.IsNullOrEmpty(item.siteID)) {
  293. errorInfo += "驿站不存在!";
  294. }
  295. }
  296. // 检查结果填充
  297. if (stringUtils.IsNullOrEmpty(errorInfo)) {
  298. item.setSiteUserID(UUID.randomUUID().toString());
  299. resultList.add(item);
  300. } else {
  301. item.setErrorMessage(errorInfo);
  302. }
  303. });
  304. // 返回结果
  305. if (dataList.stream().filter(it -> !stringUtils.IsNullOrEmpty(it.errorMessage)).collect(Collectors.toList()).size() > 0)
  306. return dataList;
  307. // 保存到数据
  308. resultList.forEach(item -> {
  309. save(item, loginUserId);
  310. });
  311. return null;
  312. }
  313. public String StrToPinYin(String chinese) {
  314. String pinyinStr = "";
  315. char[] newChar = chinese.toCharArray();
  316. HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  317. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  318. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  319. for (int i = 0; i < newChar.length; i++) {
  320. if (newChar[i] > 128) {
  321. try {
  322. pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0];
  323. } catch (BadHanyuPinyinOutputFormatCombination e) {
  324. e.printStackTrace();
  325. }
  326. }else{
  327. pinyinStr += newChar[i];
  328. }
  329. }
  330. return pinyinStr;
  331. }
  332. }