server/dmvisit_admin/src/main/java/com/doumee/api/business/StagingController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ package com.doumee.api.business; import com.doumee.api.BaseController; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.dao.admin.response.StagingDataVO; import com.doumee.dao.business.model.Visits; import com.doumee.service.business.MemberService; import com.doumee.service.business.VisitsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2024/2/26 11:00 */ @Api(tags = "å·¥ä½å°æ°æ®") @RestController @RequestMapping("/business/staging") public class StagingController extends BaseController { @Autowired private MemberService memberService; @Autowired private VisitsService visitsService; @ApiOperation("头鍿°æ®") @GetMapping("/head") public ApiResponse<StagingDataVO> head() { return ApiResponse.success("æ¥è¯¢æå",memberService.stagingHead(new StagingDataVO())); } @ApiOperation("䏻使°æ®") @GetMapping("/body") public ApiResponse<StagingDataVO> body() { return ApiResponse.success("æ¥è¯¢æå",memberService.stagingBody(new StagingDataVO())); } @ApiOperation("è¶ æ¶é¢è¦äººå") @PostMapping("/timeoutPage") public ApiResponse<PageData<Visits>> timeoutPage (@RequestBody PageWrap<Visits> pageWrap) { pageWrap.getModel().setLevelStatus(Constants.ZERO); return ApiResponse.success(visitsService.retentionPage(pageWrap)); } @ApiOperation("è¶ æ¶é¢è¦äººå离åº") @GetMapping("/level") public ApiResponse level (@RequestParam Integer visitId) { visitsService.visitLevel(visitId); return ApiResponse.success("æä½æå"); } } server/dmvisit_admin/src/main/java/com/doumee/task/ScheduleTool.java
@@ -25,7 +25,7 @@ * @date 2021-10-10 14:40:35 * https://www.bejson.com/othertools/cron/ cron 表达å¼çæå°å */ @Component //@Component @EnableScheduling public class ScheduleTool { server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -133,7 +133,7 @@ * 夿æ¯å¦ä¸ºææè½¦çå· */ public static boolean checkCarNo(String str) { String patt="^[京津沪åæè¾½åé»èæµçé½èµ£é²è±«éæ¹ç²¤æ¡ç¼å·é»äºæ¸èééé宿°é½ç²¤æç¼ä½¿é¢A_Z]{1}[A_Z]{1}[A-Z0-9]{4}[A-Z0-9æå¦è¦æ¸¯æ¾³]{1}$"; String patt="^[京津沪æ¸å豫äºè¾½é»æ¹ç鲿°èæµèµ£éæ¡çæèéåé½è´µå·éèç¼å®ç§¦å·]\\\\d{5}[A-Z]$"; Pattern r = Pattern.compile(patt); Matcher matcher = r.matcher(str); return matcher.find(); @@ -328,8 +328,8 @@ public static void main(String[] args) { String t = URLDecoder.decode("https://lsqw.gtja.com/qwcos/v-index.html#/loginforProperty?corpId=ww4b7aefafeb430e4b&corpId=ww4b7aefafeb430e4b&agentId=1000005&agentId=1000005&fromRoute=&userCode=013561&userCode=&userId=zz&userId=&encryptUserCode=&custQwId=wmIUuSDgAAR8MhtVY8w90EyKltvoK5fA&custCode=&openId=op1wZwD1dKuBQywmWWS5957zUOJI&name=%E8%B9%84%E8%B9%84&headUrl=http%3A%2F%2Fwx.qlogo.cn%2Fmmhead%2FQ3auHgzwzM4QlibSOAvYcvRMdsoyF3Ua7duLOYSJfB3dsGsYxIYonBw%2F0&dbHeadUrl=https%3A%2F%2Ftgf.gtja.com%2Ff%2F%2Fqwoms%2F2022512%2Fqwoms_1652332606613_8.jpg"); System.out.println(t); System.out.println(Constants.checkCarNo("æ¹B40D17")); System.out.println(Constants.checkCarNo("çAP0637")); } server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ package com.doumee.dao.admin.response; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; import java.util.Map; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2024/2/26 11:02 */ @Data @ApiModel("å·¥ä½å°æ°æ®") public class StagingDataVO { @ApiModelProperty(value = "å é¨åå·¥") private Long workerCount; @ApiModelProperty(value = "访客人å") private Long visitorCount; @ApiModelProperty(value = "å³å¡äººå") private Long lwCount; @ApiModelProperty(value = "å¨åºè½¦è¾") private Long presenceCarCount; @ApiModelProperty(value = "访客车è¾") private Long visitorCarCount; @ApiModelProperty(value = "å³å¡è½¦è¾") private Long lwCarCount; @ApiModelProperty(value = "ä¾åºåæ°é") private Integer supplierCount; @ApiModelProperty(value = "å³å¡å ¬å¸äººåæ°") private List<Map<String,Object>> companyUsers; @ApiModelProperty(value = "æ»çäººåæ°æ®") private List<Map<String,Object>> retentionUsers; } server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -276,4 +276,7 @@ @TableField(exist = false) private Integer outStatus; @ApiModelProperty(value = "离åºç¶æï¼0=æªç¦»åº", example = "1",hidden = true) @TableField(exist = false) private Integer levelStatus; } server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -1,13 +1,12 @@ package com.doumee.service.business; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.erp.model.openapi.response.AccessTokenResponse; import com.doumee.dao.admin.request.LaborEmpowerDTO; import com.doumee.dao.admin.request.LaborMemberDTO; import com.doumee.dao.admin.request.MemberQuery; import com.doumee.dao.admin.response.MemberInfoDTO; import com.doumee.dao.admin.response.StagingDataVO; import com.doumee.dao.business.model.Member; import com.doumee.dao.web.reqeust.AccountLoginDTO; import com.doumee.dao.web.reqeust.CheckVisitedDTO; @@ -194,4 +193,11 @@ * @return */ PageData<MemberVO> getVisitedMemberList(PageWrap<VisitMemberDTO> param); /** * è¡¥å æ°æ® */ StagingDataVO stagingHead(StagingDataVO stagingHeadVO); StagingDataVO stagingBody(StagingDataVO stagingHeadVO); } server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -124,4 +124,6 @@ * @param auditApproveDTO */ void auditApprove(AuditApproveDTO auditApproveDTO); void visitLevel(Integer visitId); } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,11 +2,8 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.PatternPool; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.PhoneUtil; import cn.hutool.core.util.ReUtil; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.config.DataSyncConfig; @@ -15,7 +12,6 @@ import com.doumee.core.annotation.excel.ExcelImporter; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; @@ -29,18 +25,17 @@ import com.doumee.dao.admin.request.LaborMemberDTO; import com.doumee.dao.admin.request.MemberQuery; import com.doumee.dao.admin.response.MemberInfoDTO; import com.doumee.dao.admin.response.StagingDataVO; import com.doumee.dao.business.*; import com.doumee.dao.business.join.MemberJoinMapper; import com.doumee.dao.business.join.RetentionJoinMapper; import com.doumee.dao.business.join.UserActionJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.system.model.SystemDictData; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.web.reqeust.AccountLoginDTO; import com.doumee.dao.web.reqeust.CheckVisitedDTO; import com.doumee.dao.web.reqeust.VisitMemberDTO; import com.doumee.dao.web.reqeust.VisitRecordDTO; import com.doumee.dao.web.response.MemberVO; import com.doumee.dao.web.response.VisitRecordVO; import com.doumee.dao.web.response.WxAuthorizeVO; import com.doumee.service.business.MemberService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -50,7 +45,6 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -96,9 +90,18 @@ private UserActionJoinMapper userActionJoinMapper; @Autowired private CompanyMapper companyMapper; @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private DataSyncConfig dataSyncConfig; @Autowired private RetentionJoinMapper retentionJoinMapper; @Autowired private VisitsMapper visitsMapper; @Override @@ -982,6 +985,39 @@ @Override public StagingDataVO stagingHead(StagingDataVO stagingHeadVO){ //人åä¿¡æ¯ List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO)); if(CollectionUtils.isNotEmpty(memberList)){ stagingHeadVO.setWorkerCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.internal)).count()); stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.lw_visitor)).count()); stagingHeadVO.setVisitorCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.visitor)).count()); } //TODO stagingHeadVO.setSupplierCount(companyMapper.selectCount(new QueryWrapper<Company>().lambda().eq(Company::getIsdeleted,Constants.ZERO))); return stagingHeadVO; } @Override public StagingDataVO stagingBody(StagingDataVO stagingHeadVO){ List<Map<String,Object>> companyMaps = memberJoinMapper.selectJoinMaps( new MPJLambdaWrapper<Member>() .select("count(1) as memberCount, t1.name as companyName") .leftJoin(Company.class,Company::getId,Member::getCompanyId) .eq(Member::getType,Constants.memberType.lw_visitor) .groupBy(Company::getId,Company::getName) ); List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>() .select(" count(1) as memberCount, type as memberType ") .groupBy(Retention::getType) ); stagingHeadVO.setCompanyUsers(companyMaps); stagingHeadVO.setRetentionUsers(retentionMaps); return stagingHeadVO; } server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -123,7 +123,7 @@ //æ®é访客 visits.setType(Constants.ONE); //éè¡äººåæ°é visits.setMemberNum(CollectionUtils.isNotEmpty(visits.getWithUserList())?visits.getWithUserList().size():0); visits.setMemberNum(CollectionUtils.isNotEmpty(visits.getWithUserList())?visits.getWithUserList().size()+1:1); //访客信æ¯(使ç¨èº«ä»½è¯å·æ¥è¯¢æ¯å¦å·²å卿¹æ®éè®¿å®¢ï¼æ²¡æåæ°å¢ï¼åå¨åæ´æ°openidçä¿¡æ¯),å æ¬éè®¿äººåæ ¡éªåå¤ç Member member =dealMemberAndVisits(visits); visits.setMemberId(member.getId()); @@ -476,7 +476,7 @@ private void isValidBaseParam(Visits visits) { if(visits.getEndtime() == null || visits.getStarttime() == null || StringUtils.isBlank(visits.getReason()) // || StringUtils.isBlank(visits.getReason()) || StringUtils.isBlank( visits.getName()) || StringUtils.isBlank( visits.getPhone()) || visits.getIdcardType() == null @@ -543,7 +543,11 @@ v.setIdcardDecode(Constants.getTuominStr(v.getIdcardNo()));//è±æèº«ä»½è¯å· v.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, v.getIdcardNo()));//身份è¯å·å å¯ v.setErpId(visits.getErpId()); v.setReceptMemberId(visits.getReceptMemberId()); v.setMemberNum(Constants.ZERO); v.setHkStatus(Constants.ZERO); v.setReason(visits.getReason()); v.setDoors(visits.getDoors()); v.setStatus(Constants.VisitStatus.submitCheck); } //æ¹éæå ¥æ°æ® @@ -660,25 +664,28 @@ //æ ¡éªé访人åå¡«æ¥æ°æ®åæ³æ§ isValidWithVisitParam(model,addList,editList); model.setCreateDate(visits.getCreateDate()); getMemberListParam(model.getIdcardNo(),model,addList,editList); Member visitsMember = getMemberListParam(model.getIdcardNo(),model,addList,editList); model.setMemberId(visitsMember.getId()); } } if(CollectionUtils.isNotEmpty(addList)){ memberMapper.insertBatchSomeColumn(addList); } if(CollectionUtils.isNotEmpty(editList)){ editList.forEach(i->{ memberMapper.updateById(i); }); } // if(CollectionUtils.isNotEmpty(addList)){ // memberMapper.insertBatchSomeColumn(addList); // } // if(CollectionUtils.isNotEmpty(editList)){ // editList.forEach(i->{ // memberMapper.updateById(i); // }); // // } return m; } private Member getMemberListParam(String cardno, Visits visits, List<Member> addList, List<Member> editList) { if(StringUtils.isNotBlank(visits.getCarNos())&&!Constants.checkCarNo(visits.getCarNos())){ if(!StringUtils.isNotBlank(visits.getCarNos()) // &&!Constants.checkCarNo(visits.getCarNos()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对ä¸èµ·ï¼è½¦çå·ã"+visits.getCarNos()+"ãä¸åæ³ï¼è¯·æ ¸å®åéè¯~"); } if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&cardno.length()!=18 @@ -714,8 +721,9 @@ member.setHkStatus(Constants.ZERO); member.setErpStatus(Constants.ZERO); member.setVisitCompanyName(visits.getCompanyName()); // æ°å¢è®¿å®¢è®°å½ addList.add(member); memberMapper.insert(member); // æ°å¢è®¿å®¢ // addList.add(member); }else{ if(!Constants.equalsInteger(Constants.ZERO,member.getStatus() )){ //å¦æç¨æ·ç¶æå¼å¸¸ï¼åæç¤º @@ -737,11 +745,13 @@ member.setHkStatus(Constants.ZERO); member.setErpStatus(Constants.ZERO); member.setVisitCompanyName(visits.getCompanyName()); memberMapper.updateById(member); // æ´æ°è®¿å®¢ä¿¡æ¯, editList.add(member); // editList.add(member); } //æ ¹æ®ææºå·å身份è¯å·ç æ¥è¯¢ å½åé¢çº¦çæ¶é´æ¯å¦ä¸å ¶ä»é¢çº¦è®°å½æå²çª if (visitsMapper.selectCount(new QueryWrapper<Visits>().lambda() .notIn(Visits::getStatus,Constants.VisitStatus.cancel,Constants.VisitStatus.cancel,Constants.VisitStatus.noPass,Constants.VisitStatus.xfFail) .and(ms -> ms.eq(Visits::getPhone, visits.getPhone()) .or().eq(Visits::getIdcardDecode, Constants.getTuominStr(cardno))) .and(ms -> ms.apply(" visits.STARTTIME <= '" + DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss") + "' and visits.ENDTIME >= '" + DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm:ss") + "' ") @@ -1007,6 +1017,7 @@ queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId); queryWrapper.leftJoin(" member m on m.id=t.MEMBER_ID"); queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getLevelStatus()),Visits::getStatus,Constants.VisitStatus.signin); queryWrapper.ne("m.type ",Constants.TWO); queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO); queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Visits::getType,pageWrap.getModel().getType()); @@ -1121,4 +1132,18 @@ @Override public void visitLevel(Integer visitId){ Visits visits = visitsMapper.selectById(visitId); if(Objects.isNull(visits)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(!visits.getStatus().equals(Constants.VisitStatus.signin)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"访客记å½ç¶æé误ï¼è¯·å·æ°éè¯"); } visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.VisitStatus.signout) .eq(Visits::getId,visitId)); } }