From 39969f50f23ae92c5fc25005d8d367eea0570c31 Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期一, 18 十二月 2023 18:21:31 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java | 316 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 286 insertions(+), 30 deletions(-) diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java index 7886100..8dd1de3 100644 --- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java +++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java @@ -2,54 +2,54 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.Jwt.JwtPayLoad; import com.doumee.config.Jwt.JwtTokenUtil; import com.doumee.core.constants.ResponseStatus; +import com.doumee.core.erp.ErpConstants; +import com.doumee.core.erp.ErpTool; +import com.doumee.core.erp.model.openapi.request.erp.*; +import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse; +import com.doumee.core.erp.model.openapi.response.erp.ERPApiResponse; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; -import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest; -import com.doumee.core.haikang.model.param.request.DoorsListRequest; -import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest; -import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest; -import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest; -import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest; +import com.doumee.core.haikang.model.param.BaseResponse; +import com.doumee.core.haikang.model.param.request.OrgAddRequest; +import com.doumee.core.haikang.model.param.request.OrgDelRequest; +import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; -import com.doumee.core.model.openapi.request.*; -import com.doumee.core.model.openapi.request.erp.OrgListRequest; -import com.doumee.core.model.openapi.request.erp.UserInfoRequest; -import com.doumee.core.model.openapi.request.erp.UserListRequest; -import com.doumee.core.model.openapi.response.*; -import com.doumee.core.model.openapi.response.erp.OrgListRespone; +import com.doumee.core.erp.model.openapi.request.*; +import com.doumee.core.erp.model.openapi.response.*; +import com.doumee.core.erp.model.openapi.response.erp.OrgListRespone; +import com.doumee.core.erp.model.openapi.response.erp.UserListRespone; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DESUtil; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.core.utils.redis.RedisUtil; -import com.doumee.dao.admin.response.MemberInfoDTO; import com.doumee.dao.business.*; import com.doumee.dao.business.join.CarEventJoinMapper; import com.doumee.dao.business.join.DeviceEventJoinMapper; import com.doumee.dao.business.join.VisitEventJoinMapper; import com.doumee.dao.business.model.*; -import com.doumee.dao.web.reqeust.CheckVisitedDTO; -import com.doumee.dao.web.response.MemberVO; -import com.doumee.service.business.*; +import com.doumee.service.business.ERPSyncService; +import com.doumee.service.business.InterfaceLogService; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import io.swagger.models.auth.In; +import com.hikvision.artemis.sdk.config.ArtemisConfig; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.checkerframework.checker.units.qual.A; +import org.checkerframework.checker.units.qual.C; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import javax.servlet.http.HttpServletResponse; +import javax.annotation.PostConstruct; import java.util.*; import java.util.stream.Collectors; @@ -94,7 +94,7 @@ @Autowired private MemberMapper memberMapper; - + @Autowired private MemberRoleMapper memberRoleMapper; @@ -107,17 +107,152 @@ @Autowired private InterfaceLogService interfaceLogService; + + @Override + @PostConstruct + public int initHkConfig(){ + ErpConstants.approveUrl=systemDictDataBiz.queryByCode(Constants.ERP,Constants.ERP_APPROVE_URL).getCode(); + ErpConstants.orgListUrl=systemDictDataBiz.queryByCode(Constants.ERP,Constants.ERP_ORGLIST_URL).getCode(); + ErpConstants.userListUrl=systemDictDataBiz.queryByCode(Constants.ERP,Constants.ERP_USERSTATUS_RL).getCode(); + ErpConstants.userStatusUrl=systemDictDataBiz.queryByCode(Constants.ERP,Constants.ERP_USERSTATUS_RL).getCode(); + return 0; + } /** * 鍚屾ERP缁勭粐淇℃伅 * @param param * @return */ @Override + @Transactional public String syncCompany(OrgListRequest param){ - List<OrgListRespone> allList = new ArrayList<>(); + //鑾峰彇ERP缁勭粐淇℃伅锛堝叏閲忓悓姝ワ級 + List<OrgListRespone> list = ErpTool.getErpOrgList(ErpConstants.orgListUrl,param); + if(list !=null && list.size()>0){ + List<Company> addList = new ArrayList<>(); + List<Company> updateList = new ArrayList<>(); + List<Integer> delIds = new ArrayList<>(); + List<Company> allList = companyMapper.selectList(new QueryWrapper<Company>().lambda().eq(Company::getType,Constants.ONE)); + dealCompanyChangeList(list,addList,updateList,delIds,allList); + if(addList.size()>0){ + companyMapper.insertBatchSomeColumn(addList); + } + if(updateList.size()>0){ + for(Company c : updateList){ + companyMapper.updateById(c); + } + } + if(delIds.size()>0){ + //鍒犻櫎鎵�鏈夐渶瑕佸垹闄ょ殑缁勭粐淇℃伅(閫昏緫鍒犻櫎锛� + companyMapper.update(null,new UpdateWrapper<Company>().lambda() + .set(Company::getIsdeleted, Constants.ONE) + .set(Company::getHkStatus, Constants.ZERO) + .in(Company::getId,delIds)); + } + return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+updateList.size()+"銆戞潯锛屽垹闄ゃ��"+delIds.size()+"銆戞潯"; + }else{ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾ERP鏁版嵁涓虹┖锛�"); + } + } + /** + * 鏍规嵁鍚屾erp鐨勭粍缁囦俊鎭皝瑁� 缁勭粐鏂板銆佷慨鏀瑰拰鍒犻櫎鐨勯泦鍚堜俊鎭� + * @param list + * @param addList + * @param updateList + * @param delIds + * @param allList + */ + private void dealCompanyChangeList(List<OrgListRespone> list, List<Company> addList, List<Company> updateList, List<Integer> delIds, List<Company> allList) { + Date date = new Date(); + for(OrgListRespone respone : list){ + //鏍规嵁erpid鏌ヨ浼佷笟淇℃伅锛屽垽鏂槸鏂板杩樻槸鏇存柊 + Company company = findCompanyByERPId(allList,respone.getId()); + if(company == null){ + //濡傛灉鏄柊澧� + if(Constants.formatIntegerNum(respone.getIsdeleted()) == Constants.ONE){ + continue; + } + //灏佽鏂板缁勭粐瀵硅薄鏁版嵁 + addList.add(getAddCompanyModel(respone,date)); + }else{ + //濡傛灉鏄洿鏂� + if(Constants.formatIntegerNum(respone.getIsdeleted()) == Constants.ONE){ + //濡傛灉宸插垹闄わ紝鍔犲叆鍒犻櫎闆嗗悎涓� + delIds.add(company.getId()); + continue; + } + updateList.add(addUpdateCompanyModel(respone,company,date)); + } + } + if(allList!=null && allList.size()>0){ + for(Company c : allList){ + if(isCompanyDeleted(c,list)){ + delIds.add(c.getId()); + } + } + } + + } + + /** + * 鏂板缁勭粐瀵硅薄 + * @param respone + * @param company + * @param date + * @return + */ + private Company addUpdateCompanyModel(OrgListRespone respone,Company company,Date date) { + company.setName(respone.getName()); + company.setErpId(respone.getId()); + company.setEditDate(date); + company.setStatus(respone.getStatus()); + company.setCode(respone.getCode()); + company.setErpParentId(respone.getParentOrgId()); + company.setErpDate(date); + company.setHkStatus(Constants.ZERO); + return company; + } + /** + * 鏇存柊缁勭粐瀵硅薄 + * @param respone + * @param date + * @return + */ + private Company getAddCompanyModel(OrgListRespone respone, Date date) { + Company company = new Company(); + company.setIsdeleted(Constants.ZERO); + company.setName(respone.getName()); + company.setErpId(respone.getId()); + company.setCreateDate(date); + company.setCode(respone.getCode()); + company.setErpParentId(respone.getParentOrgId()); + company.setErpDate(date); + company.setHkStatus(Constants.ZERO); + return company; + } + + private boolean isCompanyDeleted(Company c, List<OrgListRespone> list) { + for(OrgListRespone m : list){ + if(StringUtils.equals(c.getErpId(),m.getId())){ + return true; + } + } + return false; + } + + private Company findCompanyByERPId(List<Company> allList, String id) { + if(allList!=null){ + for(Company com :allList){ + if(StringUtils.equals(com.getErpId(),id)){ + return com; + } + } + } return null; } + + + /** * 鍚屾ERP浜哄憳淇℃伅 @@ -125,20 +260,133 @@ * @return */ @Override - public String syncUsers(UserListRequest param){ + public String syncUsers(UserListRequest param){ + List<UserListRespone> list = ErpTool.getErpUserList(ErpConstants.userListUrl,param); + if(list !=null && list.size()>0) { + List<Member> addList = new ArrayList<>(); + List<Member> updateList = new ArrayList<>(); + List<Integer> delIds = new ArrayList<>(); + List<Member> allList = memberMapper.selectList(new QueryWrapper<Member>().lambda() + .eq(Member::getIsdeleted,Constants.ZERO) + .eq(Member::getType, Constants.memberType.internal)); + dealUserChangeList(list,addList,updateList,delIds,allList); + + if(addList.size()>0){ + memberMapper.insertBatchSomeColumn(addList); + } + if(updateList.size()>0){ + for(Member c : updateList){ + memberMapper.updateById(c); + } + } + if(delIds.size()>0){ + //鍒犻櫎鎵�鏈夐渶瑕佸垹闄ょ殑缁勭粐淇℃伅(閫昏緫鍒犻櫎锛� + memberMapper.update(null,new UpdateWrapper<Member>().lambda().set(Member::getHkStatus,Constants.ZERO) + .set(Member::getIsdeleted, Constants.ONE).in(Member::getId,delIds)); + } + + }else{ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍚屾ERP鏁版嵁涓虹┖锛�"); + } return null; } + private void dealUserChangeList(List<UserListRespone> list, List<Member> addList, List<Member> updateList, List<Integer> delIds, List<Member> allList) { + Date date = new Date(); + for(UserListRespone response : list){ + //鏍规嵁 erpId 鏌ヨ鐢ㄦ埛淇℃伅锛屽垽鏂槸鏂板杩樻槸鏇存柊 + Member member = findUserByERPId(allList,response.getId()); + if(member == null){ + //濡傛灉鏄柊澧� + if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){ + continue; + } + //灏佽鏂板缁勭粐瀵硅薄鏁版嵁 + addList.add(getAddMemberModel(response,date)); + }else{ + //濡傛灉鏄洿鏂� + if(Constants.formatIntegerNum(response.getIsdeleted()) == Constants.ONE){ + //濡傛灉宸插垹闄わ紝鍔犲叆鍒犻櫎闆嗗悎涓� + delIds.add(member.getId()); + continue; + } + updateList.add(addUpdateMemberModel(response,member,date)); + } + } + if(allList!=null && allList.size()>0){ + for(Member c : allList){ + if(isUserDeleted(c,list)){ + delIds.add(c.getId()); + } + } + } + } + + private Member getAddMemberModel(UserListRespone param, Date date) { + Member member = new Member(); + BeanUtils.copyProperties(param,member); + member.setCreateDate(new Date()); + member.setHkStatus(Constants.ZERO); + member.setErpStatus(Constants.ONE); + member.setErpDate(new Date()); + member.setErpId(param.getId()); + member.setFsStatus(Constants.ZERO); + member.setType(Constants.memberType.internal); + String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo()); + member.setIdcardNo(encryptIdNo); + member.setIdcardDecode(Constants.getTuominStr(param.getIdNo())); + member.setCompanyId(param.getOrgId()); + member.setHkStatus(Constants.ZERO); + return member; + } + + private Member addUpdateMemberModel(UserListRespone param,Member member,Date date) { + BeanUtils.copyProperties(param,member); + String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo()); + member.setIdcardNo(encryptIdNo); + member.setIdcardDecode(Constants.getTuominStr(param.getIdNo())); + member.setCompanyId(param.getOrgId()); + member.setEditDate(new Date()); + member.setErpDate(new Date()); + member.setHkStatus(Constants.ZERO); + return member; + } + + private boolean isUserDeleted(Member c, List<UserListRespone> list) { + for(UserListRespone m : list){ + if(StringUtils.equals(c.getErpId(),m.getId().toString())){ + return true; + } + } + return false; + } + + private Member findUserByERPId(List<Member> allList, String id) { + if(allList!=null){ + for(Member com :allList){ + if(StringUtils.equals(com.getErpId(),id)){ + return com; + } + } + } + return null; + } + + + /** - * 鑾峰彇ERP浜哄憳淇℃伅 + * 鎻愪氦鐢ㄦ埛鍚屾澶辫触璁板綍 * @param param * @return */ @Override - public String syncUserInfo(UserInfoRequest param){ - return null; + public boolean noticeUserFail(UserFailRequest param){ + ERPApiResponse r = ErpTool.noticeUserStatus(ErpConstants.userStatusUrl,param); + if(r!=null && r.isSuccess()){ + return true; + } + return false; } - @Override public AccessTokenResponse createERPToken(String accessKey, String accessSecret){ @@ -434,21 +682,29 @@ Company company = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,param.getId()).last("limit 1")); if(Objects.isNull(company)){ company = new Company(); - BeanUtils.copyProperties(param,company); +// BeanUtils.copyProperties(param,company); company.setId(null); company.setCreateDate(new Date()); company.setHkStatus(Constants.ZERO); company.setErpStatus(Constants.ONE); company.setErpDate(new Date()); company.setErpId(param.getId()); + company.setErpParentId(param.getParentId()); company.setFsStatus(Constants.ZERO); company.setType(Constants.ONE); + company.setLinkName(param.getLinkName()); + company.setLinkPhone(param.getLinkPhone()); companyMapper.insert(company); //TODO 娴峰悍鏁版嵁鍒涘缓 }else{ - BeanUtils.copyProperties(param,company); +// BeanUtils.copyProperties(param,company); company.setEditDate(new Date()); + company.setErpId(param.getId()); + company.setHkStatus(Constants.ZERO); company.setErpDate(new Date()); + company.setErpParentId(param.getParentId()); + company.setLinkName(param.getLinkName()); + company.setLinkPhone(param.getLinkPhone()); companyMapper.updateById(company); //TODO 娴峰悍鏁版嵁鏇存柊 } @@ -494,7 +750,6 @@ member.setIdcardDecode(Constants.getTuominStr(param.getIdNo())); member.setCompanyId(param.getOrgId()); memberMapper.insert(member); - //TODO 娴峰悍鏁版嵁鍒涘缓 }else{ BeanUtils.copyProperties(param,member); @@ -573,6 +828,7 @@ visitsList.forEach(i->{ i.setStatus(param.getStatus().equals(Constants.ZERO)?Constants.VisitStatus.pass:Constants.VisitStatus.noPass); i.setEndCheckDate(DateUtil.StringToDate(param.getApproveDate(),"yyyy-MM-dd HH:mm:ss")); + i.setHkStatus(Constants.ZERO); visitsMapper.updateById(i); }); } -- Gitblit v1.9.3