k94314517
2024-02-18 79243a38ffb959be94e1a81f922675d093850454
ERP接口
已修改22个文件
606 ■■■■■ 文件已修改
server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/MemberQuery.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/system/SystemDictDataService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_web/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/openapi/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -109,7 +109,7 @@
    }
    @ApiOperation("批量拉黑/冻结")
    @ApiOperation("批量拉黑")
    @GetMapping("/batchBlock")
    @RequiresPermissions("business:member:delete")
    public ApiResponse batchBlock(@RequestParam String ids) {
@@ -118,10 +118,24 @@
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        memberService.batchBlock(idList);
        memberService.batchBlock(idList,2);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量冻结")
    @GetMapping("/batchFreeze")
    @RequiresPermissions("business:member:delete")
    public ApiResponse batchFreeze(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        memberService.batchBlock(idList,1);
        return ApiResponse.success(null);
    }
    @ApiOperation("是否可拜访状态修改")
    @PostMapping("/updateCanVisitById")
server/dmvisit_admin/src/main/java/com/doumee/api/system/SystemDictDataController.java
@@ -142,18 +142,18 @@
     */
    @ApiOperation(value = "劳务来访配置" )
    @GetMapping("/getLaborConfigDTO")
    public ApiResponse<LaborConfigDTO> getLaborConfigDTO(){
    public ApiResponse<VisitConfigDTO> getLaborConfigDTO(){
        return ApiResponse.success(systemDictDataService.getLaborConfigDTO());
    };
    /**
     * 修改劳务来访配置
     * @param miniProgrammeDTO
     * @param visitConfigDTO
     */
    @ApiOperation(value = "修改劳务来访配置" )
    @PostMapping("/updateLaborConfigDTO")
    public ApiResponse updateLaborConfigDTO(@RequestBody LaborConfigDTO miniProgrammeDTO){
        systemDictDataService.updateLaborConfigDTO(miniProgrammeDTO);
    public ApiResponse updateLaborConfigDTO(@RequestBody VisitConfigDTO visitConfigDTO){
        systemDictDataService.updateLaborConfigDTO(visitConfigDTO);
        return ApiResponse.success(null);
    };
}
server/dmvisit_admin/src/main/resources/application.yml
@@ -67,7 +67,7 @@
  compression:
    enabled: true
    mime-types: application/json
  port: 10013
  port: 10028
  tomcat:
    max-swallow-size: -1
  servlet:
server/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java
@@ -14,7 +14,7 @@
@ApiModel("访客申请审批结果通知请求信息")
public class ApproveNoticeRequest extends BaseRequst {
    @ApiModelProperty(value = "审批记录唯一标识(ERP端ID)" ,example = "1")
    private Integer id;
    private String id;
    @ApiModelProperty(value = "审批结果 0-不通过 1-通过,默认 0" ,example = "1")
    private Integer status;
    @ApiModelProperty(value = "审核时间 yyyy-MM-dd HH:mm:ss" )
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -34,6 +34,8 @@
    //被拜访人信息校验方式(0手机号单独校验 1手机号和姓名组合校验)
    public static final String BEVISITED_USER_VALID = "BEVISITED_USER_VALID";
    public static final String LW_BEVISITED_USER_VALID = "LW_BEVISITED_USER_VALID";
    public static final String SELECT_DOORS_VISIT_REQUIRED = "SELECT_DOORS_VISIT_REQUIRED";
    public static final String SELECT_DOORS_LW_REQUIRED = "SELECT_DOORS_LW_REQUIRED";
    public static final String PROBLEM_LW_REQUIRED = "PROBLEM_LW_REQUIRED";
@@ -46,6 +48,16 @@
    // 访客来访配置
    public static final String VISIT_CONFIG = "VISIT_CONFIG";
    public static final String MEMBER_IMG = "MEMBER_IMG";
    //健康证配置
    public static final String LW_HEALTH_CARD = "LW_HEALTH_CARD";
    public static final String HEALTH_CARD = "HEALTH_CARD";
    //答题说明
    public static final String LW_DESCRIPTION = "LW_DESCRIPTION";
    public static final String DESCRIPTION = "DESCRIPTION";
    //答题主题
    public static final String LW_THEME = "LW_THEME";
    public static final String THEME = "THEME";
    // 劳务来访配置
    public static final String LABOR_CONFIG = "LABOR_CONFIG";
    public static final String VISIT_EVENT_IMG = "VISIT_EVENT_IMG";
server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -45,6 +45,10 @@
            thing1 = "审核通过";
        }else if(visits.getStatus()==3){
            thing1 = "审核不通过";
        }else if(visits.getStatus()==5){
            thing1 = "设备授权成功";
        }else if(visits.getStatus()==6){
            thing1 = "设备授权未成功";
        }
        // 添加模板数据
        templateMessage.addData(new WxMpTemplateData("thing1", thing1))
server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/MemberQuery.java
@@ -16,7 +16,7 @@
public class MemberQuery implements Serializable {
    @ApiModelProperty(value = "姓名/手机号/工号")
    private String keyWords;
    private String keyword;
    @ApiModelProperty(value = "是否有人脸 0 否 1 是")
    private Integer hasFace;
@@ -52,4 +52,9 @@
    @ApiModelProperty(value = "操作人员 ")
    private Integer createrId;
    @ApiModelProperty(value = "erp机构主键 ")
    private String erpOrgId;
}
server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java
@@ -18,35 +18,22 @@
@ApiModel("劳务来访配置")
public class VisitConfigDTO {
    @ApiModelProperty(value = "来访预约方式 0否,1是")
    private Integer reservationWay;
    @ApiModelProperty(value = "参数对象")
    private VisitConfigParam visitConfigParam;
    @ApiModelProperty(value = "被访人校验方式 0手机号单独校验 1手机号和姓名组合校验")
    private Integer checkVisit;
    @ApiModelProperty(value = "劳务答题主题")
    private String theme = "";
    @ApiModelProperty(value = "健康证是否必填 0=否;1=是")
    private Integer healthCard;
    @ApiModelProperty(value = "劳务答题说明")
    private String description = "";
    @ApiModelProperty(value = "是否答题 0不需要,1需要" )
    private Integer isAnswer;
//    /**
//     * 对象驼峰属性转下划线
//     * @param object
//     * @return
//     * @throws JsonProcessingException
//     */
//    public static String toUnderlineJSONString(Object object) throws JsonProcessingException {
//        ObjectMapper mapper = new ObjectMapper();
//        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
//        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//        String reqJson = mapper.writeValueAsString(object);
//        return reqJson;
//    }
//
//
//    public static <T> T toSnakeObject(String json, Class<T> clazz) throws IOException {
//        ObjectMapper mapper = new ObjectMapper();
//        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
//        T reqJson =  mapper.readValue(json, clazz);
//        return reqJson;
//    }
    @ApiModelProperty(value = "答题主题")
    private String theme;
    @ApiModelProperty(value = "答题说明")
    private String description;
}
server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
@@ -9,6 +9,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @author T14
@@ -112,11 +113,16 @@
    @TableField(exist = false)
    private Date visitsLastDate;
    @ApiModelProperty(value = "最后冻结时间")
    @ApiModelProperty(value = "最后冻结/拉黑时间")
    @TableField(exist = false)
    private Date userActionType1;
    private Date optTime;
    @ApiModelProperty(value = "证件类型 0身份证 1港澳证件 2护照", example = "1")
    private Integer idcardType;
    @ApiModelProperty(value = "访客公司名称")
    private String visitCompanyName;
    @ApiModelProperty(value = "门禁组名称")
    private List<String> roleNames;
}
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -201,6 +201,10 @@
    @ExcelColumn(name="ERP组织编码")
    private String erpOrgId;
    @ApiModelProperty(value = "访客公司名称")
    @ExcelColumn(name="访客公司名称")
    private String visitCompanyName;
    @ApiModelProperty(value = "组织名称")
    @TableField(exist = false)
    private String companyName;
server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -35,7 +35,7 @@
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
@@ -262,10 +262,10 @@
    @TableField(exist = false)
    private String receptMemberDepartment;
    @ApiModelProperty(value = "门禁集合", example = "1")
    @ExcelColumn(name="门禁集合")
    @ApiModelProperty(value = "门禁组集合", example = "1")
    @ExcelColumn(name="门禁组集合")
    @TableField(exist = false)
    private List<Device> deviceList;
    private List<DeviceRole> deviceRoleList;
    @ApiModelProperty(value = "随访人员列表", example = "1")
    @ExcelColumn(name="随访人员列表")
server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -61,7 +61,7 @@
     */
    void deleteByIdInBatch(List<Integer> ids);
    void batchBlock(List<Integer> ids);
    void batchBlock(List<Integer> ids,Integer type);
    /**
     * 主键更新
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
@@ -289,11 +289,11 @@
        queryWrapper.orderByDesc(MemberCard::getCreateDate);
        //是否是数字
        boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
        boolean number = Validator.isNumber(pageWrap.getModel().getKeyword());
        //是否包含中文
        boolean b = Validator.hasChinese(pageWrap.getModel().getKeyWords());
        boolean b = Validator.hasChinese(pageWrap.getModel().getKeyword());
        //是否包含英文
        boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords());
        boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyword());
        queryWrapper.leftJoin(Member.class,Member::getId,MemberCard::getMemberId)
                    .leftJoin(Company.class,Company::getId,Member::getCompanyId);
@@ -305,8 +305,8 @@
        queryWrapper.like(Objects.nonNull(pageWrap.getModel().getCode()),MemberCard::getCode,pageWrap.getModel().getCode())
                    .eq(Objects.nonNull(pageWrap.getModel().getStatus()),MemberCard::getStatus,pageWrap.getModel().getStatus())
                    .eq(Objects.nonNull(pageWrap.getModel().getStatus()),MemberCard::getStatus,pageWrap.getModel().getStatus())
                    .like(number,Member::getPhone,pageWrap.getModel().getKeyWords())
                    .like((b||hasWord),Member::getName,pageWrap.getModel().getKeyWords());
                    .like(number,Member::getPhone,pageWrap.getModel().getKeyword())
                    .like((b||hasWord),Member::getName,pageWrap.getModel().getKeyword());
        IPage<MemberCard> memberCardIPage = memberCardJoinMapper.selectJoinPage(page, MemberCard.class,queryWrapper);
        if(null != memberCardIPage && memberCardIPage.getRecords().size() > 0) {
            memberCardIPage.setRecords(getDataPackage(memberCardIPage));
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -197,7 +197,7 @@
    }
    @Override
    public void batchBlock(List<Integer> ids) {
    public void batchBlock(List<Integer> ids,Integer type) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
@@ -206,10 +206,28 @@
        for (Integer id:ids) {
            member = memberMapper.selectById(id);
            if(!Objects.isNull(member)&&member.getStatus()==Constants.ZERO){
                UserAction userAction=new UserAction();
                userAction.setBeforeStatus(member.getStatus());
                member.setStatus(Constants.TWO);
                member.setEditor(loginUserInfo.getId());
                member.setEditDate(new Date());
                memberMapper.updateById(member);
                userAction.setIsdeleted(Constants.ZERO);
                userAction.setCreateDate(new Date());
                userAction.setCreator(loginUserInfo.getId());
                if(Constants.equalsInteger(type,Constants.ONE)){
                    userAction.setType(Constants.ONE);
                    userAction.setRemark("由【"+loginUserInfo.getUsername()+"】于【操作时间"+new Date()+"】,进行【冻结】");
                }
                if(Constants.equalsInteger(type,Constants.TWO)){
                    userAction.setType(Constants.TWO);
                    userAction.setRemark("由【"+loginUserInfo.getUsername()+"】于【操作时间"+new Date()+"】,进行【拉黑】");
                }
                userAction.setMemberId(id+"");
                userActionJoinMapper.insert(userAction);
            }
        }
        /*  memberMapper.deleteBatchIds(ids);*/
@@ -559,43 +577,6 @@
    @Override
    public PageData<MemberInfoDTO> findMemberInfoPage(PageWrap<MemberQuery> pageWrap) {
  /*      //是否是数字
        boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
        //是否包含中文
        boolean b = Validator.hasChinese(pageWrap.getModel().getKeyWords());
        //是否包含英文
        boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords());*/
      /*  IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
        MemberQuery model = pageWrap.getModel();
        Utils.MP.blankToNull(model);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId)
                .leftJoin(DeviceRole.class,DeviceRole::getId,Member::getRoleId);
              *//*  .leftJoin(MemberCard.class,MemberCard::getMemberId,Member::getId);*//*
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
                .selectAs(DeviceRole::getName,MemberInfoDTO::getRoleName)
             *//*   .select("count(t3.id) as memberCardCount ");*//*
                .select("");
        queryWrapper.in(Objects.nonNull(model.getCompanyIds()),Member::getCompanyId,model.getCompanyIds())
              *//*      .like(number,Member::getPhone,model.getKeyWords())
                    .like((b||hasWord),Member::getPhone,model.getKeyWords())*//*
                     .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),ms->ms.like(Member::getPhone,model.getKeyWords())
                     .or().like(Member::getName,model.getKeyWords())
                     .or().like(Member::getCode,model.getKeyWords()))
                    .isNull(Constants.equalsInteger(model.getHasFace(),Constants.ZERO),Member::getFaceId)
                    .isNotNull(Constants.equalsInteger(model.getHasFace(),Constants.ONE),Member::getFaceId)
                    .eq(Objects.nonNull(model.getCanVisit()),Member::getCanVisit,model.getCanVisit())
                    .eq(Objects.nonNull(model.getStatus()),Member::getStatus,model.getStatus());
        IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
        if (!CollectionUtils.isEmpty(memberIPage.getRecords())){
            memberIPage.getRecords().forEach(s->s.setSex(IdcardUtil.getGenderByIdCard(s.getIdcardDecode())));
        }*/
        IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
@@ -603,22 +584,60 @@
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,
                        Member::getCompanyId,pageWrap.getModel().getCompanyIds())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),ms->ms.like(Member::getPhone,pageWrap.getModel().getKeyWords())
                        .or().like(Member::getName,pageWrap.getModel().getKeyWords())
                        .or().like(Member::getCode,pageWrap.getModel().getKeyWords()))
                .isNull(Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ZERO),Member::getFaceId)
                .isNotNull(Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ONE),Member::getFaceId)
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyword()),ms->ms
                        .like(Member::getPhone,pageWrap.getModel().getKeyword())
                        .or().like(Member::getName,pageWrap.getModel().getKeyword())
                        .or().like(Member::getCode,pageWrap.getModel().getKeyword()))
                .isNull(!Objects.isNull(pageWrap.getModel().getHasFace())&&Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ZERO),Member::getFaceId)
                .isNotNull(!Objects.isNull(pageWrap.getModel().getHasFace())&&Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ONE),Member::getFaceId)
                .eq(Objects.nonNull(pageWrap.getModel().getCanVisit()),Member::getCanVisit,pageWrap.getModel().getCanVisit())
                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Member::getCanVisit,pageWrap.getModel().getStatus())
                .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Member::getStatus,pageWrap.getModel().getStatus())
                .eq(StringUtils.isNotBlank(pageWrap.getModel().getErpOrgId()),Member::getErpOrgId,pageWrap.getModel().getErpOrgId())
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getStatus,Constants.Status.ENABLE.getValue())
//                .eq(Member::getStatus,Constants.Status.ENABLE.getValue())
                .eq(Member::getType,Constants.memberType.internal)
                .orderByDesc(Member::getCreateDate);
        IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
        if(CollectionUtils.isNotEmpty(memberIPage.getRecords())){
            //FTP文件访问前缀
            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
            //门禁组信息
            List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                            .select(DeviceRole::getId,DeviceRole::getName)
                    .eq(DeviceRole::getIsdeleted,Constants.ZERO));
            for (MemberInfoDTO memberInfoDTO:memberIPage.getRecords()) {
                //获得门禁组名称数组
                memberInfoDTO.setRoleNames(this.dealRoleDatas(memberInfoDTO.getRoleId(),deviceRoleList));
                //拼接前缀
                if(StringUtils.isNotBlank(memberInfoDTO.getFaceImg())){
                    memberInfoDTO.setFaceImg(prefixUrl + memberInfoDTO.getFaceImg());
                }
                if(StringUtils.isNotBlank(memberInfoDTO.getImgurl())){
                    memberInfoDTO.setImgurl(prefixUrl + memberInfoDTO.getImgurl());
                }
            }
        }
        return PageData.from(memberIPage);
    }
    public List<String>  dealRoleDatas(String roleIds,List<DeviceRole> deviceRoleList){
        List<String> stringList = new ArrayList<>();
        if(StringUtils.isNotBlank(roleIds)){
            roleIds = roleIds.replace("[","").replace("]","");
            List<String> ids = Arrays.asList(roleIds.split(","));
            ids.forEach(i->{
                DeviceRole deviceRole = deviceRoleList.stream().filter(m->m.getId().toString().equals(i)).findFirst().get();
                if(!Objects.isNull(deviceRole)){
                    stringList.add(deviceRole.getName());
                }
            });
        }
        return stringList;
    }
    @Override
    public PageData<MemberInfoDTO> findVisitPage(PageWrap<MemberQuery> pageWrap) {
@@ -627,19 +646,20 @@
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
                .select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0) as visitsCount")
                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 order by CREATE_DATE limit 1) as visitsLastDate");
                .select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 and v.status = 2  ) as visitsCount")
                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0  and v.status = 2  order by CREATE_DATE limit 1) as visitsLastDate");
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Member::getName,pageWrap.getModel().getName())
                .like(StringUtils.isNotBlank(pageWrap.getModel().getPhone()),Member::getPhone,pageWrap.getModel().getPhone())
                .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()), ms->ms.like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName())
                        .or().like(Company::getName,pageWrap.getModel().getCompanyName()))
                .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
                .eq(StringUtils.isNotBlank(pageWrap.getModel().getErpOrgId()),Member::getErpOrgId,pageWrap.getModel().getErpOrgId())
                .eq(Objects.isNull(pageWrap.getModel().getStatus()),Member::getStatus,Constants.Status.ENABLE.getValue())
                .eq(!Objects.isNull(pageWrap.getModel().getStatus()),Member::getStatus,pageWrap.getModel().getStatus())
                .eq(Member::getType,Constants.memberType.visitor)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .orderByDesc(Member::getCreateDate);
        IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
        return PageData.from(memberIPage);
@@ -654,17 +674,18 @@
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.selectAll(Member.class)
                .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
                .select(" (select ua.CREATE_DATE from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0 and ua.type=1 order by ua.CREATE_DATE limit 1) as userActionType1")
                .select(" (select uac.remark from user_action uac  where uac.MEMBER_ID=t.id and uac.ISDELETED=0 and uac.type=1 order by uac.CREATE_DATE limit 1) as creatorName")
             /*   .select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0) as visitsCount")*/
                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 order by CREATE_DATE limit 1) as visitsLastDate");
                .select(" (select ua.CREATE_DATE from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0  order by ua.CREATE_DATE desc  limit 1) as optTime")
                .select(" (select s.REALNAME from user_action uac left join system_user s on uac.CREATOR = s.ID    where uac.MEMBER_ID=t.id and uac.ISDELETED=0 order by uac.CREATE_DATE desc  limit 1) as creatorName")
                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 order by CREATE_DATE desc  limit 1) as visitsLastDate");
                queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Member::getName,pageWrap.getModel().getName())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),ms->ms.like(Member::getPhone,pageWrap.getModel().getName())
        queryWrapper
                .and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Member::getPhone,pageWrap.getModel().getName())
                        .or().like(Member::getName,pageWrap.getModel().getName()))
                .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName())
                .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
                        ms->ms.like(Company::getName,pageWrap.getModel().getCompanyName())
                        .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
                .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
                .eq(Member::getStatus,Constants.Status.FREEZE.getValue())
                .eq(Objects.nonNull(pageWrap.getModel().getCode()),Member::getCode,pageWrap.getModel().getCode())
@@ -813,7 +834,7 @@
                .ne(Member::getType,Constants.memberType.visitor)
        );
        //非访客用户 进行判断是否存在用户
        if(Objects.isNull(member)&&!member.getType().equals(Constants.memberType.visitor)){
        if(!Objects.isNull(member)&&!member.getType().equals(Constants.memberType.visitor)){
            if(member.getIsdeleted() == Constants.ONE){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已删除,请联系管理员");
            }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
@@ -179,6 +179,7 @@
        problemLog.setCreateDate(new Date());
        problemLog.setIsdeleted(Constants.ZERO);
        problemLog.setStatus(Constants.ZERO);
        problemLog.setOpenid(finishAnswerDTO.getOpenId());
        if(finishAnswerDTO.getUseType().equals(Constants.ZERO)&&StringUtils.isNotBlank(finishAnswerDTO.getUserId())){
            Member member = memberMapper.selectById(finishAnswerDTO.getUserId());
            if(Objects.isNull(member)){
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -134,6 +134,7 @@
        String erpId = startSendErpCheck(visits,visitMember);
        if(StringUtils.isNotBlank(erpId)){
            visits.setErpId(erpId);
            visits.setStatus(Constants.VisitStatus.submitCheck);
            visitsMapper.updateById(visits);
        }else{
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!");
@@ -484,9 +485,9 @@
                || visits.getReceptMemberId() == null){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,信息填写不正确!");
        }
        if(visits.getStarttime().getTime() < System.currentTimeMillis()){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,预约开始时间必须大于当前时间!");//
        }
//        if(visits.getStarttime().getTime() < System.currentTimeMillis()){
//            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,预约开始时间必须大于当前时间!");//
//        }
        if(visits.getEndtime().getTime() <= visits.getStarttime().getTime()){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,预约结束时间必须大于开始时间!");//
        }
@@ -532,6 +533,7 @@
    private void initWithVisitInfo(Visits visits) {
        if(CollectionUtils.isNotEmpty(visits.getWithUserList())){
            for(Visits v :visits.getWithUserList()){
                v.setBirthday(Constants.getBirthdyByCardNo(v.getIdcardNo()));
                v.setParentId(visits.getId());
                v.setStarttime(visits.getStarttime());
                v.setEndtime(visits.getEndtime());
@@ -542,7 +544,7 @@
                v.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, v.getIdcardNo()));//身份证号加密
                v.setErpId(visits.getErpId());
                v.setHkStatus(Constants.ZERO);
                v.setStatus(Constants.ZERO);
                v.setStatus(Constants.VisitStatus.submitCheck);
            }
            //批量插入数据
            visitsMapper.insertBatchSomeColumn(visits.getWithUserList());
@@ -652,6 +654,7 @@
        //随访人员信息处理
        if(visits.getWithUserList()!= null && visits.getWithUserList().size()>0){
            for(Visits model:visits.getWithUserList()){
                model.setBirthday(Constants.getBirthdyByCardNo(model.getIdcardNo()));
                model.setStarttime(visits.getStarttime());
                model.setEndtime(visits.getEndtime());
                //校验随访人员填报数据合法性
@@ -678,6 +681,11 @@
        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
            //&&!IdcardUtil.isValidCard(cardno)
        ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,身份证号码有误,请核实后重试!");
        }
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                .eq(Member::getType,Constants.memberType.visitor)
                .eq(Member::getIdcardType,visits.getIdcardType())
@@ -689,6 +697,7 @@
            member.setCreateDate(visits.getCreateDate());
            member.setIsdeleted(Constants.ZERO);
            member.setIdcardNo(visits.getIdcardNo());
            member.setBirthday(Constants.getBirthdyByCardNo(cardno));
            member.setIdcardDecode(visits.getIdcardDecode());
            member.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, cardno));//身份证号加密
            member.setIdcardDecode(Constants.getTuominStr(cardno));//脱敏手机号
@@ -704,6 +713,7 @@
            member.setSex(Constants.getSexByCardNo(cardno));
            member.setHkStatus(Constants.ZERO);
            member.setErpStatus(Constants.ZERO);
            member.setVisitCompanyName(visits.getCompanyName());
            // 新增访客记录
            addList.add(member);
        }else{
@@ -726,6 +736,7 @@
            member.setSex(Constants.getSexByCardNo(cardno));
            member.setHkStatus(Constants.ZERO);
            member.setErpStatus(Constants.ZERO);
            member.setVisitCompanyName(visits.getCompanyName());
            // 更新访客信息,
            editList.add(member);
        }
@@ -909,7 +920,7 @@
        queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName);
        queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment);
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.leftJoin(Company.class,Company::getErpId,Member::getErpOrgId);
        queryWrapper.eq(Visits::getId,id);
        Visits result = visitsJoinMapper.selectJoinOne(Visits.class,queryWrapper);
@@ -917,10 +928,10 @@
        if(result!=null){
            if(StringUtils.isNotBlank(result.getDoors())){
                String[] doorList=result.getDoors().split(",");
                MPJLambdaWrapper<Device> deviceQuery = new MPJLambdaWrapper<>();
                deviceQuery.in(Device::getId,doorList);
                List<Device> deviceList= deviceJoinMapper.selectList(deviceQuery);
                result.setDeviceList(deviceList);
                MPJLambdaWrapper<DeviceRole> deviceQuery = new MPJLambdaWrapper<>();
                deviceQuery.in(DeviceRole::getId,doorList);
                List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(deviceQuery);
                result.setDeviceRoleList(deviceRoleList);
            }
        }
@@ -1067,7 +1078,7 @@
        }
        visitDetailVO.setWithVisitsList(
                visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
                .select(Visits::getName,Visits::getPhone,Visits::getFaceImg,Visits::getImgurl,Visits::getIdcardDecode)
                .select(Visits::getName,Visits::getPhone,Visits::getFaceImg,Visits::getImgurl,Visits::getIdcardDecode,Visits::getStatus)
                .eq(Visits::getParentId,id)));
        return visitDetailVO;
    }
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -26,6 +26,7 @@
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.core.utils.redis.RedisUtil;
import com.doumee.core.wx.wxPlat.WxPlatNotice;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.CarEventJoinMapper;
import com.doumee.dao.business.join.DeviceEventJoinMapper;
@@ -108,6 +109,9 @@
    @Autowired
    private ErpTool erpTool;
    @Autowired
    private WxPlatNotice wxPlatNotice;
    @Override
    @PostConstruct
@@ -1053,11 +1057,16 @@
            List<Visits> visitsList = visitsMapper.selectList(new QueryWrapper<Visits>().lambda().eq(Visits::getErpId,param.getId()));
            if(CollectionUtils.isNotEmpty(visitsList)){
                visitsList.forEach(i->{
                    i.setStatus(param.getStatus().equals(Constants.ZERO)?Constants.VisitStatus.pass:Constants.VisitStatus.noPass);
                    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);
                    i.setRemark("待同步安防平台");
                    visitsMapper.updateById(i);
                    if(Objects.isNull(i.getParentId())){
                        wxPlatNotice.sendVisitAuditTemplateNotice(i,
                                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
                                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
                    }
                });
            }
        }catch (BusinessException e){
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -13,6 +13,7 @@
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.ImageBase64Util;
import com.doumee.core.wx.wxPlat.WxPlatNotice;
import com.doumee.dao.business.CompanyMapper;
import com.doumee.dao.business.DeviceRoleMapper;
import com.doumee.dao.business.MemberMapper;
@@ -29,10 +30,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.*;
/**
 * 海康访客业务Service实现
@@ -48,7 +46,8 @@
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private DeviceRoleMapper deviceRoleMapper;
    @Autowired
    private WxPlatNotice wxPlatNotice;
    /**
     * 同步海康组织信息,根据erp同步组织结果,定时检查需要下发到海康的组织信息
     */
@@ -79,6 +78,11 @@
                String type = Constants.equalsInteger(c.getType(),Constants.ONE)?applyType:applyLwType;
                getUpdateModelByResponse(c,date,type,roleList,path);
                visitsMapper.updateById(c);
                if(Objects.isNull(c.getParentId())){
                    wxPlatNotice.sendVisitAuditTemplateNotice(c,
                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
                }
            }
        }catch (Exception e){
            e.printStackTrace();
server/dmvisit_service/src/main/java/com/doumee/service/system/SystemDictDataService.java
@@ -115,11 +115,11 @@
     * 劳务来访配置
     * @return
     */
    LaborConfigDTO getLaborConfigDTO();
    VisitConfigDTO getLaborConfigDTO();
    /**
     * 修改劳务来访配置
     * @param miniProgrammeDTO
     */
    void updateLaborConfigDTO(LaborConfigDTO miniProgrammeDTO);
    void updateLaborConfigDTO(VisitConfigDTO visitConfigDTO);
}
server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
@@ -27,6 +27,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
@@ -130,62 +131,111 @@
    @Override
    public VisitConfigDTO getVisitConfigDTO() {
        try {
            QueryWrapper<SystemDict> systemDictQuery = new QueryWrapper<>();
            systemDictQuery.lambda()
                            .eq(SystemDict::getDeleted,Boolean.FALSE)
                            .eq(SystemDict::getCode,Constants.VISIT_CONFIG);
            SystemDict systemDict = systemDictMapper.selectOne(systemDictQuery);
        VisitConfigDTO visitConfigDTO = new VisitConfigDTO();
        SystemDict systemDict = systemDictMapper.selectOne(new QueryWrapper<SystemDict>().lambda().eq(SystemDict::getCode,Constants.SYSTEM));
            if (Objects.isNull(systemDict)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典类不存在");
        }
        List<SystemDictData> systemDictList = systemDictDataMapper.selectList(
                new QueryWrapper<SystemDictData>().lambda().eq(SystemDictData::getDictId,systemDict.getId()));
        if(!com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemDictList)){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典不存在");
            }
            QueryWrapper<SystemDictData> wrapper = new QueryWrapper<>();
            wrapper.lambda()
                    .eq(SystemDictData::getDictId,systemDict.getId());
            List<SystemDictData> systemDictDatas = systemDictDataMapper.selectList(wrapper);
            if (CollectionUtils.isEmpty(systemDictDatas)){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典值不存在");
        SystemDictData reservationWay = systemDictList.stream().filter(m->m.getLabel().equals(Constants.MDJ_VISIT_REQUIRED)).findFirst().get();
        if(Objects.isNull(reservationWay)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客来访预约方式 字典不存在");
            }
            VisitConfigDTO visitConfigDTO = null;
            for (SystemDictData obj:systemDictDatas) {
                visitConfigDTO = new VisitConfigDTO();
                visitConfigDTO.setVisitConfigParam(JSONObject.parseObject(obj.getCode(),VisitConfigParam.class));
                visitConfigDTO.setDescription(obj.getRemark());
                visitConfigDTO.setTheme(obj.getLabel());
        visitConfigDTO.setReservationWay(Integer.valueOf(reservationWay.getCode()));
        SystemDictData checkVisit = systemDictList.stream().filter(m->m.getLabel().equals(Constants.BEVISITED_USER_VALID)).findFirst().get();
        if(Objects.isNull(checkVisit)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客被访人校验方式 字典不存在");
            }
        visitConfigDTO.setCheckVisit(Integer.valueOf(checkVisit.getCode()));
        SystemDictData healthCard = systemDictList.stream().filter(m->m.getLabel().equals(Constants.HEALTH_CARD)).findFirst().get();
        if(Objects.isNull(healthCard)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客健康证是否必填 字典不存在");
        }
        visitConfigDTO.setHealthCard(Integer.valueOf(healthCard.getCode()));
        SystemDictData isAnswer = systemDictList.stream().filter(m->m.getLabel().equals(Constants.PROBLEM_VISIT_REQUIRED)).findFirst().get();
        if(Objects.isNull(isAnswer)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客是否需要答题 字典不存在");
        }
        visitConfigDTO.setIsAnswer(Integer.valueOf(isAnswer.getCode()));
        SystemDictData theme = systemDictList.stream().filter(m->m.getLabel().equals(Constants.THEME)).findFirst().get();
        if(Objects.isNull(theme)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客答题主题 字典不存在");
        }
        visitConfigDTO.setTheme(theme.getCode());
        SystemDictData description = systemDictList.stream().filter(m->m.getLabel().equals(Constants.DESCRIPTION)).findFirst().get();
        if(Objects.isNull(description)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客答题说明 字典不存在");
        }
        visitConfigDTO.setDescription(description.getCode());
            return visitConfigDTO;
        } catch (Exception e) {
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"字典值解析有误");
        }
    }
    @Override
    public void updateVisitConfig(VisitConfigDTO miniProgrammeDTO) {
            QueryWrapper<SystemDict> systemDictQuery = new QueryWrapper<>();
            systemDictQuery.lambda()
                    .eq(SystemDict::getDeleted,Boolean.FALSE)
                    .eq(SystemDict::getCode,Constants.VISIT_CONFIG);
            SystemDict systemDict = systemDictMapper.selectOne(systemDictQuery);
    public void updateVisitConfig(VisitConfigDTO visitConfigDTO) {
        if(Objects.isNull(visitConfigDTO)
                ||Objects.isNull(visitConfigDTO.getReservationWay())
                ||Objects.isNull(visitConfigDTO.getCheckVisit())
                ||Objects.isNull(visitConfigDTO.getHealthCard())
                ||Objects.isNull(visitConfigDTO.getIsAnswer())
                || StringUtils.isEmpty(visitConfigDTO.getTheme())
                || StringUtils.isEmpty(visitConfigDTO.getDescription())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        SystemDict systemDict = systemDictMapper.selectOne(new QueryWrapper<SystemDict>().lambda().eq(SystemDict::getCode,Constants.SYSTEM));
            if (Objects.isNull(systemDict)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典类不存在");
        }
        List<SystemDictData> systemDictList = systemDictDataMapper.selectList(
                new QueryWrapper<SystemDictData>().lambda().eq(SystemDictData::getDictId,systemDict.getId()));
        if(!com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemDictList)){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典不存在");
            }
            QuerySystemDictDataDTO dictData = new QuerySystemDictDataDTO();
            dictData.setDictId((systemDict.getId()));
            List<SystemDictDataListVO> systemDictDataListVOS = systemDictDataMapper.selectManageList(dictData);
            SystemDictData systemDictData = getSystemDictDataListVO(systemDict);
            systemDictData.setCode(JSON.toJSONString(miniProgrammeDTO.getVisitConfigParam()));
            systemDictData.setLabel(miniProgrammeDTO.getTheme());
            systemDictData.setRemark(miniProgrammeDTO.getDescription());
            if(null != systemDictDataListVOS && systemDictDataListVOS.size() > 0) {
                systemDictData.setId(systemDictDataListVOS.get(0).getId());
                systemDictDataMapper.updateById(systemDictData);
            }else {
                systemDictDataMapper.insert(systemDictData);
        SystemDictData reservationWay = systemDictList.stream().filter(m->m.getLabel().equals(Constants.MDJ_VISIT_REQUIRED)).findFirst().get();
        if(Objects.isNull(reservationWay)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客来访预约方式 字典不存在");
            }
        reservationWay.setCode(visitConfigDTO.getReservationWay().toString());
        SystemDictData checkVisit = systemDictList.stream().filter(m->m.getLabel().equals(Constants.BEVISITED_USER_VALID)).findFirst().get();
        if(Objects.isNull(checkVisit)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客被访人校验方式 字典不存在");
        }
        checkVisit.setCode(visitConfigDTO.getCheckVisit().toString());
        SystemDictData healthCard = systemDictList.stream().filter(m->m.getLabel().equals(Constants.HEALTH_CARD)).findFirst().get();
        if(Objects.isNull(healthCard)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客健康证是否必填 字典不存在");
        }
        healthCard.setCode(visitConfigDTO.getHealthCard().toString());
        SystemDictData isAnswer = systemDictList.stream().filter(m->m.getLabel().equals(Constants.PROBLEM_VISIT_REQUIRED)).findFirst().get();
        if(Objects.isNull(isAnswer)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客是否需要答题 字典不存在");
        }
        isAnswer.setCode(visitConfigDTO.getIsAnswer().toString());
        SystemDictData theme = systemDictList.stream().filter(m->m.getLabel().equals(Constants.THEME)).findFirst().get();
        if(Objects.isNull(theme)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客答题主题 字典不存在");
        }
        theme.setCode(visitConfigDTO.getTheme());
        SystemDictData description = systemDictList.stream().filter(m->m.getLabel().equals(Constants.DESCRIPTION)).findFirst().get();
        if(Objects.isNull(description)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"访客答题说明 字典不存在");
        }
        description.setCode(visitConfigDTO.getDescription());
        systemDictDataMapper.updateById(reservationWay);
        systemDictDataMapper.updateById(checkVisit);
        systemDictDataMapper.updateById(healthCard);
        systemDictDataMapper.updateById(isAnswer);
        systemDictDataMapper.updateById(theme);
        systemDictDataMapper.updateById(description);
    }
    private SystemDictData getSystemDictDataListVO(SystemDict systemDict) {
@@ -203,62 +253,114 @@
    }
    @Override
    public LaborConfigDTO getLaborConfigDTO() {
        try {
            String jasonStr = Constants.toUnderlineJSONString(new LaborConfigDTO());
            JSONObject parse = (JSONObject) JSONObject.parse(jasonStr);
            List<String> collect = parse.entrySet().stream().map(s -> s.getKey().toUpperCase()).collect(Collectors.toList());
            QueryWrapper<SystemDict> systemDictQuery = new QueryWrapper<>();
            systemDictQuery.lambda()
                    .eq(SystemDict::getDeleted,Boolean.FALSE)
                    .eq(SystemDict::getCode,Constants.LABOR_CONFIG);
            SystemDict systemDict = systemDictMapper.selectOne(systemDictQuery);
    public VisitConfigDTO getLaborConfigDTO() {
        VisitConfigDTO visitConfigDTO = new VisitConfigDTO();
        SystemDict systemDict = systemDictMapper.selectOne(new QueryWrapper<SystemDict>().lambda().eq(SystemDict::getCode,Constants.SYSTEM));
            if (Objects.isNull(systemDict)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典类不存在");
        }
        List<SystemDictData> systemDictList = systemDictDataMapper.selectList(
                new QueryWrapper<SystemDictData>().lambda().eq(SystemDictData::getDictId,systemDict.getId()));
        if(!com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemDictList)){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典不存在");
            }
            QueryWrapper<SystemDictData> wrapper = new QueryWrapper<>();
            wrapper.lambda()
                    .eq(SystemDictData::getDictId,systemDict.getId());
            List<SystemDictData> systemDictDatas = systemDictDataMapper.selectList(wrapper);
            LaborConfigDTO laborConfigDTO = null;
            for (SystemDictData obj:systemDictDatas) {
                laborConfigDTO = new LaborConfigDTO();
                laborConfigDTO.setLaborConfigParam(JSONObject.parseObject(obj.getCode(), LaborConfigParam.class));
                laborConfigDTO.setDescription(obj.getRemark());
                laborConfigDTO.setTheme(obj.getLabel());
        SystemDictData reservationWay = systemDictList.stream().filter(m->m.getLabel().equals(Constants.MDJ_LW_REQUIRED)).findFirst().get();
        if(Objects.isNull(reservationWay)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客来访预约方式 字典不存在");
            }
            return laborConfigDTO;
        } catch (Exception e) {
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"字典值解析有误");
        visitConfigDTO.setReservationWay(Integer.valueOf(reservationWay.getCode()));
        SystemDictData checkVisit = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_BEVISITED_USER_VALID)).findFirst().get();
        if(Objects.isNull(checkVisit)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客被访人校验方式 字典不存在");
        }
        visitConfigDTO.setCheckVisit(Integer.valueOf(checkVisit.getCode()));
        SystemDictData healthCard = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_HEALTH_CARD)).findFirst().get();
        if(Objects.isNull(healthCard)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客健康证是否必填 字典不存在");
        }
        visitConfigDTO.setHealthCard(Integer.valueOf(healthCard.getCode()));
        SystemDictData isAnswer = systemDictList.stream().filter(m->m.getLabel().equals(Constants.PROBLEM_LW_REQUIRED)).findFirst().get();
        if(Objects.isNull(isAnswer)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客是否需要答题 字典不存在");
        }
        visitConfigDTO.setIsAnswer(Integer.valueOf(isAnswer.getCode()));
        SystemDictData theme = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_THEME)).findFirst().get();
        if(Objects.isNull(theme)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客答题主题 字典不存在");
        }
        visitConfigDTO.setTheme(theme.getCode());
        SystemDictData description = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_DESCRIPTION)).findFirst().get();
        if(Objects.isNull(description)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客答题说明 字典不存在");
        }
        visitConfigDTO.setDescription(description.getCode());
        return visitConfigDTO;
    }
    @Override
    public void updateLaborConfigDTO(LaborConfigDTO miniProgrammeDTO) {
            QueryWrapper<SystemDict> systemDictQuery = new QueryWrapper<>();
            systemDictQuery.lambda()
                    .eq(SystemDict::getDeleted,Boolean.FALSE)
                    .eq(SystemDict::getCode,Constants.LABOR_CONFIG);
            SystemDict systemDict = systemDictMapper.selectOne(systemDictQuery);
    public void updateLaborConfigDTO(VisitConfigDTO visitConfigDTO) {
        if(Objects.isNull(visitConfigDTO)
                ||Objects.isNull(visitConfigDTO.getReservationWay())
                ||Objects.isNull(visitConfigDTO.getCheckVisit())
                ||Objects.isNull(visitConfigDTO.getHealthCard())
                ||Objects.isNull(visitConfigDTO.getIsAnswer())
                || StringUtils.isEmpty(visitConfigDTO.getTheme())
                || StringUtils.isEmpty(visitConfigDTO.getDescription())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        SystemDict systemDict = systemDictMapper.selectOne(new QueryWrapper<SystemDict>().lambda().eq(SystemDict::getCode,Constants.SYSTEM));
            if (Objects.isNull(systemDict)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典类不存在");
        }
        List<SystemDictData> systemDictList = systemDictDataMapper.selectList(
                new QueryWrapper<SystemDictData>().lambda().eq(SystemDictData::getDictId,systemDict.getId()));
        if(!com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemDictList)){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"字典不存在");
            }
            QuerySystemDictDataDTO dictData = new QuerySystemDictDataDTO();
            dictData.setDictId((systemDict.getId()));
            List<SystemDictDataListVO> systemDictDataListVOS = systemDictDataMapper.selectManageList(dictData);
            SystemDictData systemDictData = getSystemDictDataListVO(systemDict);
            systemDictData.setCode(JSON.toJSONString(miniProgrammeDTO.getLaborConfigParam()));
            systemDictData.setLabel(miniProgrammeDTO.getTheme());
            systemDictData.setRemark(miniProgrammeDTO.getDescription());
            if(null != systemDictDataListVOS && systemDictDataListVOS.size() > 0) {
                systemDictData.setId(systemDictDataListVOS.get(0).getId());
                systemDictDataMapper.updateById(systemDictData);
            }else {
                systemDictDataMapper.insert(systemDictData);
        SystemDictData reservationWay = systemDictList.stream().filter(m->m.getLabel().equals(Constants.MDJ_LW_REQUIRED)).findFirst().get();
        if(Objects.isNull(reservationWay)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客来访预约方式 字典不存在");
            }
        reservationWay.setCode(visitConfigDTO.getReservationWay().toString());
        SystemDictData checkVisit = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_BEVISITED_USER_VALID)).findFirst().get();
        if(Objects.isNull(checkVisit)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客被访人校验方式 字典不存在");
        }
        checkVisit.setCode(visitConfigDTO.getCheckVisit().toString());
        SystemDictData healthCard = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_HEALTH_CARD)).findFirst().get();
        if(Objects.isNull(healthCard)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客健康证是否必填 字典不存在");
        }
        healthCard.setCode(visitConfigDTO.getHealthCard().toString());
        SystemDictData isAnswer = systemDictList.stream().filter(m->m.getLabel().equals(Constants.PROBLEM_LW_REQUIRED)).findFirst().get();
        if(Objects.isNull(isAnswer)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客是否需要答题 字典不存在");
        }
        isAnswer.setCode(visitConfigDTO.getIsAnswer().toString());
        SystemDictData theme = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_THEME)).findFirst().get();
        if(Objects.isNull(theme)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客答题主题 字典不存在");
        }
        theme.setCode(visitConfigDTO.getTheme());
        SystemDictData description = systemDictList.stream().filter(m->m.getLabel().equals(Constants.LW_DESCRIPTION)).findFirst().get();
        if(Objects.isNull(description)){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"劳务访客答题说明 字典不存在");
        }
        description.setCode(visitConfigDTO.getDescription());
        systemDictDataMapper.updateById(reservationWay);
        systemDictDataMapper.updateById(checkVisit);
        systemDictDataMapper.updateById(healthCard);
        systemDictDataMapper.updateById(isAnswer);
        systemDictDataMapper.updateById(theme);
        systemDictDataMapper.updateById(description);
    }
}
server/dmvisit_web/src/main/resources/application.yml
@@ -70,7 +70,7 @@
    enabled: true
    mime-types: application/json
  port: 10016
  port: 10027
  tomcat:
    max-swallow-size: -1
  servlet:
server/openapi/src/main/resources/application.yml
@@ -70,7 +70,7 @@
    enabled: true
    mime-types: application/json
  port: 10018
  port: 10029
  tomcat:
    max-swallow-size: -1
  servlet: