UserActivitiServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. package cn.com.lzt.useractiviti.service.impl;
  2. import cn.com.lzt.arrangedutyoperate.entity.ArrangeDutyOperateEntity;
  3. import cn.com.lzt.cost.pettycashaccount.service.TBCostPettyCashAccountServiceI;
  4. import cn.com.lzt.dingding.service.DingdingService;
  5. import cn.com.lzt.duties.entity.DutiesEntity;
  6. import cn.com.lzt.leave.dto.LeaveDto;
  7. import cn.com.lzt.personnelbasearchivesmanage.entity.PersonnelBaseArchivesManageEntity;
  8. import cn.com.lzt.personnelbasearchivesmanage.service.PersonnelBaseArchivesManageServiceI;
  9. import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity;
  10. import cn.com.lzt.socialsecuritystrategy.entity.SocialSecurityStrategyEntity;
  11. import cn.com.lzt.useractiviti.data.service.UseractivitiDataServiceI;
  12. import cn.com.lzt.useractiviti.entity.TBusActivitiUserPersonnelEntity;
  13. import cn.com.lzt.useractiviti.entity.TBusUserBlackListEntity;
  14. import cn.com.lzt.useractiviti.leave.entity.TBusActivitiLeaveEntity;
  15. import cn.com.lzt.useractiviti.sameleveltransfer.entity.TBusActivitiSamelevelTransferEntity;
  16. import cn.com.lzt.useractiviti.service.UserActivitiServiceI;
  17. import cn.com.lzt.userarrangedetail.entity.UserArrangeDetailEntity;
  18. import cn.com.lzt.userchangeslog.entity.UserChangesLogEntity;
  19. import cn.com.lzt.userwagestrategy.entity.UserWagestrategyEntity;
  20. import com.dingtalk.open.client.api.model.corp.CorpUserDetail;
  21. import org.activiti.engine.IdentityService;
  22. import org.activiti.engine.identity.User;
  23. import org.activiti.engine.identity.UserQuery;
  24. import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
  25. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  26. import org.jeecgframework.core.constant.Globals;
  27. import org.jeecgframework.core.util.*;
  28. import org.jeecgframework.web.system.pojo.base.*;
  29. import org.jeecgframework.web.system.service.SystemService;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.text.ParseException;
  35. import java.text.SimpleDateFormat;
  36. import java.util.*;
  37. import java.io.Serializable;
  38. import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
  39. import org.springframework.util.StringUtils;
  40. import javax.servlet.http.HttpServletRequest;
  41. @Service
  42. @Transactional
  43. public class UserActivitiServiceImpl extends CommonServiceImpl implements UserActivitiServiceI {
  44. @Autowired
  45. private SystemService systemService;
  46. @Autowired
  47. private PersonnelBaseArchivesManageServiceI personnelBaseArchivesManageService;
  48. @Autowired
  49. private IdentityService identityService;
  50. @Autowired
  51. private UseractivitiDataServiceI useractivitiDataService;
  52. @Autowired
  53. private DingdingService dingdingService;
  54. public void delete(TBusActivitiUserPersonnelEntity entity) throws Exception{
  55. super.delete(entity);
  56. //执行删除操作增强业务
  57. this.doDelBus(entity);
  58. }
  59. public Serializable save(TBusActivitiUserPersonnelEntity entity) throws Exception{
  60. Serializable t = super.save(entity);
  61. //执行新增操作增强业务
  62. this.doAddBus(entity);
  63. return t;
  64. }
  65. public void saveOrUpdate(TBusActivitiUserPersonnelEntity entity) throws Exception{
  66. super.saveOrUpdate(entity);
  67. //执行更新操作增强业务
  68. this.doUpdateBus(entity);
  69. }
  70. /**
  71. * 新增操作增强业务
  72. * @param t
  73. * @return
  74. */
  75. private void doAddBus(TBusActivitiUserPersonnelEntity t) throws Exception{
  76. //-----------------sql增强 start----------------------------
  77. //-----------------sql增强 end------------------------------
  78. //-----------------java增强 start---------------------------
  79. //-----------------java增强 end-----------------------------
  80. }
  81. /**
  82. * 更新操作增强业务
  83. * @param t
  84. * @return
  85. */
  86. private void doUpdateBus(TBusActivitiUserPersonnelEntity t) throws Exception{
  87. //-----------------sql增强 start----------------------------
  88. //-----------------sql增强 end------------------------------
  89. //-----------------java增强 start---------------------------
  90. //-----------------java增强 end-----------------------------
  91. }
  92. /**
  93. * 删除操作增强业务
  94. * @return
  95. */
  96. private void doDelBus(TBusActivitiUserPersonnelEntity t) throws Exception{
  97. //-----------------sql增强 start----------------------------
  98. //-----------------sql增强 end------------------------------
  99. //-----------------java增强 start---------------------------
  100. //-----------------java增强 end-----------------------------
  101. }
  102. /**
  103. * 替换sql中的变量
  104. * @param sql
  105. * @param t
  106. * @return
  107. */
  108. public String replaceVal(String sql,TBusActivitiUserPersonnelEntity t){
  109. sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
  110. return sql;
  111. }
  112. /**
  113. * 执行JAVA增强
  114. */
  115. private void executeJavaExtend(String cgJavaType,String cgJavaValue,Map<String,Object> data) throws Exception {
  116. if(StringUtil.isNotEmpty(cgJavaValue)){
  117. Object obj = null;
  118. try {
  119. if("class".equals(cgJavaType)){
  120. //因新增时已经校验了实例化是否可以成功,所以这块就不需要再做一次判断
  121. obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
  122. }else if("spring".equals(cgJavaType)){
  123. obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
  124. }
  125. if(obj instanceof CgformEnhanceJavaInter){
  126. CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
  127. javaInter.execute("t_bus_activiti_user_personnel",data);
  128. }
  129. } catch (Exception e) {
  130. e.printStackTrace();
  131. throw new Exception("执行JAVA增强出现异常!");
  132. }
  133. }
  134. }
  135. @Override
  136. public void saveActivitiUser(String activitiUserId) {
  137. TBusActivitiUserPersonnelEntity au = findUniqueByProperty(TBusActivitiUserPersonnelEntity.class,"id" , activitiUserId);
  138. String idcard = au.getIdcard();
  139. TSUser existUser = findUniqueByProperty(TSUser.class,"idcard" , idcard);
  140. if(existUser!=null){//用户存在 离职后重新入职
  141. updateActivitiUser(existUser,au);
  142. return;
  143. }
  144. TSUser user = new TSUser();
  145. BeanUtils.copyProperties(au, user);
  146. //saveUser
  147. user.setId(null);
  148. user.setStatus(Globals.User_Normal);
  149. user.setDeleteFlag(Globals.Delete_Normal);
  150. user.setActivitiSync(Globals.activitiSync_YES);
  151. user.setDevFlag("0");
  152. user.setDepartid(au.getDepartId());
  153. user.setCreateDate(new Date());
  154. user.setUpdateBy(null);
  155. user.setUpdateDate(null);
  156. user.setUpdateName(null);
  157. String yxyg_roleid = null;// 一线员工的角色ID
  158. List<TSRole> yxyg_roleList = systemService.findByProperty(TSRole.class, "roleCode", Globals.roleCode_yxyg);
  159. if(yxyg_roleList != null && yxyg_roleList.size() > 0){
  160. yxyg_roleid = yxyg_roleList.get(0).getId();// 一线员工的角色ID
  161. }
  162. String roleid = null;
  163. if(Globals.userType_1.equals(user.getUserType())){
  164. roleid = yxyg_roleid;
  165. }
  166. // 得到默认密码
  167. String password = ResourceUtil.getConfigByName("defaultPassword");
  168. if(user.getRealName() != null) {
  169. String trim = user.getRealName().replaceAll(" ", "");
  170. user.setRealName(trim);
  171. }
  172. if(user.getIdcard() != null) {
  173. String up = user.getIdcard().toUpperCase();
  174. user.setIdcard(up);
  175. }
  176. user.setPassword(PasswordEncodeUtil.getMD5(password));
  177. user.setDingIsSynchronization(Globals.DingIsSynchronization_NO.toString());
  178. save(user);
  179. //saveUser
  180. try {
  181. //处理附件追加用户默认固定附件类型
  182. personnelBaseArchivesManageService.dealAccessoryIsFixedDefault(user.getId());
  183. } catch (Exception e) {
  184. // TODO Auto-generated catch block
  185. e.printStackTrace();
  186. }
  187. if (StringUtil.isNotEmpty(roleid)) {
  188. saveRoleUser(user, roleid);
  189. }
  190. TSDepart tsDepart = saveUserOrgList(user);
  191. if(StringUtil.isNotEmpty(tsDepart.getDingdepartid())) {
  192. List<Long> departIdList = new ArrayList<Long>();
  193. departIdList.add(Long.valueOf(tsDepart.getDingdepartid()));
  194. CorpUserDetail corpUserDetail = dingdingService.getUser(user.getId());
  195. boolean dingFlg = false;
  196. if(StringUtil.isNotEmpty(corpUserDetail.getUserid())) {
  197. dingFlg = dingdingService.updateUser(user.getId(), user.getRealName(), departIdList,user.getMobilePhone(), user.getUserName());
  198. } else {
  199. dingFlg = dingdingService.createUser(user.getId(), user.getRealName(), departIdList,user.getMobilePhone(), user.getUserName());
  200. }
  201. if(dingFlg) {
  202. user.setDingIsSynchronization(Globals.DingIsSynchronization_YES.toString());
  203. systemService.updateEntitie(user);
  204. }else{
  205. user.setDingIsSynchronization(Globals.DingIsSynchronization_NO.toString());
  206. }
  207. }
  208. // 员工类型:0管理员工;1普通员工
  209. String userType = oConvertUtils.getString(user.getUserType());
  210. //保证员工类型非空 如果为空 给定默认值为 普通员工
  211. if (oConvertUtils.isEmpty(userType)) {
  212. userType = Globals.userType_1;
  213. user.setUserType(userType);
  214. }
  215. //根据员工类型 设定是否 同步工作流引擎
  216. user.setActivitiSync(userType.equals(Globals.userType_1)?Globals.activitiSync_NO:Globals.activitiSync_YES);
  217. if (Globals.userType_0.equals(userType)) {
  218. try {
  219. UserQuery userQuery = identityService.createUserQuery();
  220. List<User> activitiUsers = userQuery.userId(user.getUserName()).list();
  221. //根据用户名称去工作流表中查询,如果列表中没有此人, 新建, 如果列表中有, 则更新
  222. if (ListUtils.isNullOrEmpty(activitiUsers)) {
  223. saveActivitiUser(user);
  224. } else if (activitiUsers.size() == 1) {
  225. cloneAndSaveActivitiUser(user, activitiUsers.get(0));
  226. }
  227. } catch (Exception e) {
  228. e.printStackTrace();
  229. }
  230. }
  231. updateEntitie(user);
  232. PersonnelBaseArchivesManageEntity personel = new PersonnelBaseArchivesManageEntity();
  233. BeanUtils.copyProperties(au,personel);
  234. personel.setUserid(user.getId());
  235. //计算合同结束时间
  236. Date csTime = au.getContractStime();
  237. Calendar c = Calendar.getInstance();
  238. c.setTime(csTime);
  239. c.add(Calendar.YEAR,au.getContractLong());
  240. Date ceTime = c.getTime();
  241. personel.setContractEtime(ceTime);
  242. DutiesEntity dutiesEntity = getEntity(DutiesEntity.class, au.getDuty());
  243. personel.setBelongDutiesid(au.getDuty());
  244. personel.setManagerType(dutiesEntity.getManageType());
  245. personel.setInPostid(dutiesEntity.getPost());
  246. personel.setManagerType(dutiesEntity.getManageType());
  247. personel.setIfremind(Globals.SHIFOU_01_1);
  248. personel.setAutoCorrection(Globals.SHIFOU_01_1);
  249. personel.setPositionStatus(Globals.JOBSTATUS_1);
  250. this.saveUserChangesLog(user.getId(), "0", personel.getPositionStatus());
  251. // 试用期为【无】时,转正日期=合同开始日期
  252. if(Globals.SHIYONGQI_0.equals(personel.getTrialPeriod().toString())) {
  253. personel.setCorrectionDate(personel.getContractStime());
  254. }
  255. personel.setCreateDate(new Date());
  256. personel.setUpdateBy(null);
  257. personel.setUpdateDate(null);
  258. personel.setUpdateName(null);
  259. personel.setId(null);
  260. save(personel);
  261. au.setUserId(user.getId());
  262. updateEntitie(au);
  263. }
  264. private void updateActivitiUser(TSUser existUser, TBusActivitiUserPersonnelEntity au) {
  265. PersonnelBaseArchivesManageEntity pe = systemService.findUniqueByProperty(PersonnelBaseArchivesManageEntity.class, "userid", existUser.getId());
  266. if(pe.getLeaveDate() !=null){//确认离职后操作
  267. String oldPeId = pe.getId();
  268. BeanUtils.copyProperties(au,pe);
  269. pe.setId(oldPeId);
  270. pe.setLeaveDate(null);
  271. Date csTime = au.getContractStime();
  272. Calendar c = Calendar.getInstance();
  273. c.setTime(csTime);
  274. c.add(Calendar.YEAR,au.getContractLong());
  275. Date ceTime = c.getTime();
  276. pe.setContractEtime(ceTime);
  277. DutiesEntity dutiesEntity = getEntity(DutiesEntity.class, au.getDuty());
  278. pe.setBelongDutiesid(au.getDuty());
  279. pe.setManagerType(dutiesEntity.getManageType());
  280. pe.setInPostid(dutiesEntity.getPost());
  281. pe.setManagerType(dutiesEntity.getManageType());
  282. pe.setIfremind(Globals.SHIFOU_01_1);
  283. pe.setAutoCorrection(Globals.SHIFOU_01_1);
  284. pe.setPositionStatus(Globals.JOBSTATUS_1);
  285. this.saveUserChangesLog(existUser.getId(), "0", pe.getPositionStatus());
  286. // 试用期为【无】时,转正日期=合同开始日期
  287. if(Globals.SHIYONGQI_0.equals(pe.getTrialPeriod().toString())) {
  288. pe.setCorrectionDate(pe.getContractStime());
  289. }
  290. pe.setUpdateDate(new Date());
  291. updateEntitie(pe);
  292. au.setUserId(pe.getUserid());
  293. updateEntitie(au);
  294. }
  295. }
  296. protected void saveActivitiUser(TSUser user) {
  297. String userId = oConvertUtils.getString(user.getUserName());
  298. User activitiUser = identityService.newUser(userId);
  299. cloneAndSaveActivitiUser(user, activitiUser);
  300. }
  301. protected void cloneAndSaveActivitiUser(TSUser user, User activitiUser) {
  302. activitiUser.setFirstName(user.getRealName());
  303. activitiUser.setLastName(user.getRealName());
  304. activitiUser.setPassword(user.getPassword());
  305. activitiUser.setEmail(user.getEmail());
  306. identityService.saveUser(activitiUser);
  307. }
  308. private TSDepart saveUserOrgList(TSUser user) {
  309. String orgIds = user.getDepartid();//组织机构ID数组
  310. //-------------------------设置该用户的组织机构关系-------------------------
  311. List<String> orgIdList = extractIdListByComma(orgIds);
  312. String orgId = orgIdList.get(0);//目前规定一个人只能有一个组织机构
  313. //查询该用户所有的组织机构
  314. TSDepart depart = systemService.getEntity(TSDepart.class,orgId);
  315. TSUserOrg userOrg = new TSUserOrg();
  316. userOrg.setTsUser(user);
  317. userOrg.setTsDepart(depart);
  318. userOrg.setIfpluralism(Globals.PLURALISM_NO.toString());
  319. userOrg.setStatus(Globals.BELONG_STATUS_NORMAL.toString());
  320. userOrg.setIntime(new Date());
  321. systemService.save(userOrg);
  322. return depart;
  323. }
  324. protected List<String> extractIdListByComma(String ids) {
  325. List<String> result = new ArrayList<String>();
  326. if (StringUtils.hasText(ids)) {
  327. for (String id : ids.split(",")) {
  328. if (StringUtils.hasLength(id)) {
  329. result.add(id.trim());
  330. }
  331. }
  332. }
  333. return result;
  334. }
  335. protected void saveRoleUser(TSUser user, String roleidStr) {
  336. String[] roleids = roleidStr.split(",");
  337. for (int i = 0; i < roleids.length; i++) {
  338. TSRoleUser rUser = new TSRoleUser();
  339. TSRole role = systemService.getEntity(TSRole.class, roleids[i]);
  340. rUser.setTSRole(role);
  341. rUser.setTSUser(user);
  342. systemService.save(rUser);
  343. }
  344. }
  345. private void saveUserChangesLog(String userId, String ifpayment, String positionStatus) {
  346. // 查询用户信息
  347. TSBaseUser userInfo = systemService.get(TSBaseUser.class, userId);
  348. // 查询主组织
  349. StringBuilder mainOrgSql = new StringBuilder();
  350. mainOrgSql.append(" SELECT ");
  351. mainOrgSql.append(" org_id orgId");
  352. mainOrgSql.append(" FROM t_s_user_org ");
  353. mainOrgSql.append(" WHERE ");
  354. mainOrgSql.append(" user_id = '" + userId + "'");
  355. mainOrgSql.append(" AND status = '0' ");
  356. mainOrgSql.append(" AND ifpluralism <> '1' ");
  357. List<Map<String, Object>> mainOrgMapList = systemService.findForJdbc(mainOrgSql.toString());
  358. String mainOrgId = "";
  359. if(mainOrgMapList.size() > 0) {
  360. mainOrgId = (String)mainOrgMapList.get(0).get("orgId");
  361. }
  362. // 缴金人员,入职,显示人员变动信息,缴金状态"待缴金"
  363. // 协议人员,入职,显示人员变动信息,缴金状态为空,状态栏为空
  364. // 缴金单位,关联到员工工资策略中的社保单位
  365. // 查询登录人名字
  366. String loginUserName = ResourceUtil.getSessionUser().getRealName();
  367. UserChangesLogEntity userChangesLogEntity = new UserChangesLogEntity();
  368. userChangesLogEntity.setChangeTime(new Date());
  369. userChangesLogEntity.setUserCode(userInfo.getUserName());
  370. userChangesLogEntity.setUserName(userInfo.getRealName());
  371. userChangesLogEntity.setBelongUnitid(mainOrgId);
  372. userChangesLogEntity.setInUnitid("");
  373. if(Globals.JOBSTATUS_1.equals(positionStatus)) {
  374. userChangesLogEntity.setChangeType(Globals.CHANGE_TYPE_RUZHI);
  375. }
  376. if(Globals.JOBSTATUS_2.equals(positionStatus)) {
  377. userChangesLogEntity.setChangeType(Globals.CHANGE_TYPE_ZHUANZHENG);
  378. }
  379. userChangesLogEntity.setApplicant(loginUserName);
  380. if(Globals.SHIFOU_01_1.equals(ifpayment)) {
  381. String payUnit = "";
  382. String userWagestrategyHql = "from UserWagestrategyEntity where userid = ?";
  383. List<UserWagestrategyEntity> UserWagestrategyEntityList = systemService.findHql(userWagestrategyHql,userId);
  384. if(UserWagestrategyEntityList.size() > 0) {
  385. String socialSecurityStrategyid = UserWagestrategyEntityList.get(0).getSocialSecurityStrategyid();
  386. // 查询用户信息
  387. SocialSecurityStrategyEntity socialSecurityStrategyEntity = systemService.get(SocialSecurityStrategyEntity.class, socialSecurityStrategyid);
  388. if(null != socialSecurityStrategyEntity) {
  389. payUnit = socialSecurityStrategyEntity.getSocialSecurityUnit();
  390. }
  391. }
  392. userChangesLogEntity.setPayUnit(payUnit);
  393. userChangesLogEntity.setPayRemindStatus(Globals.PAY_REMIND_STATUS_0);
  394. } else {
  395. userChangesLogEntity.setPayUnit("");
  396. userChangesLogEntity.setPayRemindStatus("");
  397. }
  398. systemService.save(userChangesLogEntity);
  399. }
  400. @Override
  401. public void samelevelTransfer(String busid) {
  402. TBusActivitiSamelevelTransferEntity entity = systemService.getEntity(TBusActivitiSamelevelTransferEntity.class,busid);
  403. useractivitiDataService.userLevelTransfer(entity.getUserid(),entity.getInUnitid(),entity.getNewDutiesid(),entity.getCreateName(),Globals.SAMELEVEL_TRANSFER_TYPE);
  404. }
  405. @Override
  406. public void userLeave(String busid) {
  407. TBusActivitiLeaveEntity entity = systemService.getEntity(TBusActivitiLeaveEntity.class, busid);
  408. Date leaveDate = entity.getLeaveDate();
  409. if(leaveDate.getTime()>System.currentTimeMillis()){
  410. return;
  411. }
  412. boolean isDismiss = "citui".equals(entity.getLeaveType());
  413. useractivitiDataService.userLeave(entity.getUserid(),isDismiss,entity.getLeaveDate(),entity.getCreateName());
  414. entity.setIsHandle(Globals.SHIFOU_01_1);
  415. save(entity);
  416. }
  417. @Override
  418. public void userLeaveForDate() {
  419. List<TBusActivitiLeaveEntity> list = findHql("from TBusActivitiLeaveEntity where bpmStatus=? and leaveDate<? and isHandle=? "
  420. ,Globals.BPM_STATUS_FINISHED.toString(),new Date(),Globals.SHIFOU_01_0);
  421. for(TBusActivitiLeaveEntity entity :list){
  422. userLeave(entity.getId());
  423. }
  424. }
  425. }