k94314517
2023-12-27 ae288609394ba4ad2164f0dfb972227de27c5a29
ERP接口
已添加3个文件
已修改16个文件
439 ■■■■ 文件已修改
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | 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 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/pom.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -213,6 +213,8 @@
    public static final String WX_PLATFORM_ACCESS_TOKEN = "WX_PLATFORM_ACCESS_TOKEN";
    public static final String WX_PLATFORM_APPID = "WX_PLATFORM_APPID";
    public static final String WX_PLATFORM_SECRET = "WX_PLATFORM_SECRET";
    public static final String WX_PLATFORM_AUDIT_VISIT = "WX_PLATFORM_AUDIT_VISIT";
    public static final String WX_PLATFORM_PREFIX = "WX_PLATFORM_PREFIX";
server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniConfig.java
@@ -1,59 +1,59 @@
package com.doumee.core.wx;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.doumee.config.mybatis.SpringUtils;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
//import cn.binarywang.wx.miniapp.api.WxMaService;
//import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
//import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
//import com.doumee.config.mybatis.SpringUtils;
//import com.github.binarywang.wxpay.config.WxPayConfig;
//import com.github.binarywang.wxpay.constant.WxPayConstants;
//import com.github.binarywang.wxpay.service.WxPayService;
//import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//
//import javax.annotation.PostConstruct;
/**
 * å¾®ä¿¡å°ç¨‹åºç»„ä»¶
 */
@Configuration
//@Configuration
public class WxMiniConfig {
    /********微信小程序服务**********/
    public static WxMaService wxMaService;
    /********微信小程序支付**********/
    public static WxPayService wxPayService;
    /********微信APP支付**********/
    public static WxPayService wxAppPayService;
    @Autowired
    private WxPayProperties wxPayProperties;
    public static WxMiniConfig me() {
        return SpringUtils.get().getBean(WxMiniConfig.class);
    }
    @PostConstruct
    void init() {
        this.load_WxMaService();
//        this.load_wxPayService();
//        this.load_wxAppPayService();
    }
    /**
     * åˆå§‹åŒ–微信小程序
     */
    public void load_WxMaService() {
        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
        config.setAppid(StringUtils.trimToNull(wxPayProperties.getAppId()));
        config.setSecret(StringUtils.trimToNull(wxPayProperties.getAppSecret()));
        config.setMsgDataFormat("JSON");
        //config.setToken("");
        //config.setAesKey("");
        WxMaService wxMaService = new WxMaServiceImpl();
        wxMaService.setWxMaConfig(config);
        this.wxMaService = wxMaService;
    }
//    /********微信小程序服务**********/
//    public static WxMaService wxMaService;
//    /********微信小程序支付**********/
//    public static WxPayService wxPayService;
//    /********微信APP支付**********/
//    public static WxPayService wxAppPayService;
//
//
//    @Autowired
//    private WxPayProperties wxPayProperties;
//
//    public static WxMiniConfig me() {
//        return SpringUtils.get().getBean(WxMiniConfig.class);
//    }
//
//    @PostConstruct
//    void init() {
//        this.load_WxMaService();
////        this.load_wxPayService();
////        this.load_wxAppPayService();
//    }
//    /**
//     * åˆå§‹åŒ–微信小程序
//     */
//    public void load_WxMaService() {
//        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
//        config.setAppid(StringUtils.trimToNull(wxPayProperties.getAppId()));
//        config.setSecret(StringUtils.trimToNull(wxPayProperties.getAppSecret()));
//        config.setMsgDataFormat("JSON");
//        //config.setToken("");
//        //config.setAesKey("");
//        WxMaService wxMaService = new WxMaServiceImpl();
//        wxMaService.setWxMaConfig(config);
//        this.wxMaService = wxMaService;
//    }
    /**
     * åˆå§‹åŒ–微信小程序支付
server/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -3,10 +3,10 @@
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.ID;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
import com.github.binarywang.wxpay.exception.WxPayException;
//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
//import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
//import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
//import com.github.binarywang.wxpay.exception.WxPayException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -20,34 +20,34 @@
@Slf4j
public class WxMiniUtilService {
    /**
     * è®¢å•微信退款
     * orderNo:商户订单号
     * totalPrice:订单总金额
     * refundPrice;退款金额
     */
    @Transactional(rollbackFor = Exception.class)
    public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) {
        try {
            // å‘送退款请求
            String refNum = ID.nextGUID();
            WxPayRefundRequest request = new WxPayRefundRequest();
            request.setOutTradeNo(orderNo);
            request.setOutRefundNo(refNum);
           // request.setTotalFee(2);
          //  request.setRefundFee(1);
            request.setTotalFee(BaseWxPayRequest.yuanToFen(totalPrice.toString()));
            request.setRefundFee(BaseWxPayRequest.yuanToFen(refundPrice.toString()));
            WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request);
            if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) {
                return refNum;
            } else {
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes());
            }
        } catch (WxPayException e) {
            e.printStackTrace();
        }
        throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"退款发生异常请联系管理员");
    }
//
//    /**
//     * è®¢å•微信退款
//     * orderNo:商户订单号
//     * totalPrice:订单总金额
//     * refundPrice;退款金额
//     */
//    @Transactional(rollbackFor = Exception.class)
//    public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) {
//        try {
//            // å‘送退款请求
//            String refNum = ID.nextGUID();
//            WxPayRefundRequest request = new WxPayRefundRequest();
//            request.setOutTradeNo(orderNo);
//            request.setOutRefundNo(refNum);
//           // request.setTotalFee(2);
//          //  request.setRefundFee(1);
//            request.setTotalFee(BaseWxPayRequest.yuanToFen(totalPrice.toString()));
//            request.setRefundFee(BaseWxPayRequest.yuanToFen(refundPrice.toString()));
//            WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request);
//            if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) {
//                return refNum;
//            } else {
//                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes());
//            }
//        } catch (WxPayException e) {
//            e.printStackTrace();
//        }
//        throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"退款发生异常请联系管理员");
//    }
}
server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.doumee.core.wx.wxPlat;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.utils.Constants;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/12/27 9:30
 */
@Configuration
public class WxPlatConfig {
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Bean
    public WxMpConfigStorage wxMpConfigStorage() {
        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
        // å…¬ä¼—号appId
        configStorage.setAppId(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode());
        // å…¬ä¼—号appSecret
        configStorage.setSecret(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode());
        // å…¬ä¼—号Token
        configStorage.setToken(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode());
        // å…¬ä¼—号EncodingAESKey
//        configStorage.setAesKey();
        return configStorage;
    }
    /**
     * å£°æ˜Žå®žä¾‹
     *
     * @return
     */
    @Bean
    public WxMpService wxMpService() {
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
        return wxMpService;
    }
}
server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.doumee.core.wx.wxPlat;
import com.doumee.dao.business.model.Visits;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
/**
 * å¾®ä¿¡å…¬ä¼—号通知
 *
 * @Author : Rk
 * @create 2023/12/27 9:19
 */
@Slf4j
@Component
public class WxPlatNotice {
    /**
     * å¾®ä¿¡å…¬ä¼—号API的Service
     */
    private final WxMpService wxMpService;
    public WxPlatNotice(WxMpService wxMpService) {
        this.wxMpService = wxMpService;
    }
    /**
     * è®¿å®¢è®°å½•审批业务通知
     */
    public Boolean  sendVisitAuditTemplateNotice(Visits visits,String prefix,String tempId){
        if(StringUtils.isBlank(visits.getOpenid())){
            return false;
        }
        WxMpTemplateMessage templateMessage =  WxMpTemplateMessage.builder()
                .toUser(visits.getOpenid())
                .templateId(tempId)
                .url(prefix + "pages/appointmentDetails/appointmentDetails?id="+visits.getId())
                .build();
        String thing1 = "待审批";
        if(visits.getStatus()==2){
            thing1 = "审核通过";
        }else if(visits.getStatus()==3){
            thing1 = "审核不通过";
        }
        // æ·»åŠ æ¨¡æ¿æ•°æ®
        templateMessage.addData(new WxMpTemplateData("thing1", thing1))
                .addData(new WxMpTemplateData("thing2", visits.getName()))
                .addData(new WxMpTemplateData("phone_number6", visits.getPhone()));
        String msgId = null;
        try {
            // å‘送模板消息
            msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
        } catch (WxErrorException e) {
            e.printStackTrace();
        }
        log.warn("·==++--·推送微信模板信息:{}·--++==·", msgId != null ? "成功" : "失败");
        return msgId != null;
    }
}
server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.doumee.dao.web.response;
import com.doumee.dao.business.model.Visits;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/12/7 11:19
 */
@Data
public class VisitDetailVO {
    @ApiModelProperty(value = "审批状态")
    private Integer status;
    @ApiModelProperty(value = "被访人名称")
    private String visitUserName;
    @ApiModelProperty(value = "拜访事由")
    private String visitReason;
    @ApiModelProperty(value = "车辆信息")
    private String carNos;
    @ApiModelProperty(value = "门禁组名称")
    private List<String> doorGroupName;
    @ApiModelProperty(value = "拜访时间")
    private String visitTime;
    @ApiModelProperty(value = "随访人员信息")
    private List<Visits> withVisitsList;
}
server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -3,6 +3,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Visits;
import com.doumee.dao.web.response.VisitDetailVO;
import java.util.List;
/**
@@ -98,4 +100,11 @@
     * @return long
     */
    long count(Visits visits);
    /**
     * è®¿å®¢è®°å½•详情 - å¾®ä¿¡å…¬ä¼—号
     * @param id
     * @return
     */
    VisitDetailVO getVisitDetail(Integer id);
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -36,7 +36,6 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
@@ -27,7 +27,6 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
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;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -45,7 +45,6 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
@@ -24,7 +24,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -22,6 +22,7 @@
import com.doumee.core.utils.DESUtil;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.core.wx.wxPlat.WxPlatNotice;
import com.doumee.dao.admin.response.MemberInfoDTO;
import com.doumee.dao.business.DeviceRoleMapper;
import com.doumee.dao.business.MemberMapper;
@@ -30,6 +31,7 @@
import com.doumee.dao.business.join.DeviceJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.web.response.VisitDetailVO;
import com.doumee.service.business.VisitsService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -72,6 +74,8 @@
    @Autowired
    private DeviceJoinMapper deviceJoinMapper;
    @Autowired
    private WxPlatNotice wxPlatNotice;
    @Override
    public Integer create(Visits visits) {
@@ -94,7 +98,9 @@
        getHkDeviceRoles(visits);
        //检验拜访人是否合法
        Member visitMember = isValideVisitedUser(visits.getReceptMemberId());
        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType()) &&!IdcardUtil.isValidCard(visits.getIdcardNo())){
        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&visits.getIdcardNo().length()!=18
            //&&!IdcardUtil.isValidCard(visits.getIdcardNo())
        ){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,身份证号码有误,请核实后重试!");
        }
        Date date = new Date();
@@ -114,11 +120,15 @@
        if(StringUtils.isNotBlank(erpId)){
            visits.setErpId(erpId);
        }else{
            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!");
//            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,发起拜访审批申请失败!");
        }
        visitsMapper.insert(visits);
        initWithVisitInfo(visits);
        updateProblemLog(visits,problemLog,member);
        //发送微信公众号通知
        wxPlatNotice.sendVisitAuditTemplateNotice(visits,
                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
                systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
        return visits.getId();
    }
@@ -664,4 +674,43 @@
        return PageData.from(result);
    }
    @Override
    public VisitDetailVO getVisitDetail(Integer id){
        Visits visits = visitsMapper.selectById(id);
        if(Objects.isNull(visits)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        Member member = memberMapper.selectById(visits.getReceptMemberId());
        if(Objects.isNull(member)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到被访员工信息");
        }
        VisitDetailVO visitDetailVO = new VisitDetailVO();
        visitDetailVO.setStatus(visits.getStatus());
        visitDetailVO.setCarNos(visits.getCarNos());
        visitDetailVO.setVisitUserName(member.getName());
        visitDetailVO.setVisitReason(visits.getReason());
        visitDetailVO.setVisitTime(DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm") + " è‡³ " + DateUtil.DateToStr(visits.getEndtime(),"yyyy-MM-dd HH:mm") );
        if(StringUtils.isNotBlank(visits.getDoors())){
            List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                            .select(DeviceRole::getName)
                            .eq(DeviceRole::getIsdeleted,Constants.ZERO)
                    .in(DeviceRole::getId,visits.getDoors().split(",")));
            if(CollectionUtils.isNotEmpty(deviceRoleList)){
                visitDetailVO.setDoorGroupName(
                        deviceRoleList.stream().map(m->m.getName()).collect(Collectors.toList())
                );
            }
        }
        visitDetailVO.setWithVisitsList(visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
                .select(Visits::getName,Visits::getPhone)
                .eq(Visits::getParentId,id)));
        return visitDetailVO;
    }
}
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncOrgUserServiceImpl.java
@@ -26,7 +26,6 @@
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -28,7 +28,6 @@
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -1,6 +1,5 @@
package com.doumee.service.system.impl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
server/dmvisit_web/src/main/java/com/doumee/api/web/ProblemController.java
@@ -2,6 +2,7 @@
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.wx.wxPlat.WxPlatNotice;
import com.doumee.dao.web.reqeust.FinishAnswerDTO;
import com.doumee.dao.web.response.ProblemsVO;
import com.doumee.service.business.ProblemLogService;
@@ -36,6 +37,9 @@
    @Autowired
    private ProblemLogService problemLogService;
    @Autowired
    private WxPlatNotice wxPlatNotice;
    @ApiOperation(value = "获取题目数据", notes = "H5")
    @GetMapping("/getProblemsVO")
@@ -54,4 +58,6 @@
    }
}
server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java
@@ -16,7 +16,6 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -6,6 +6,7 @@
import com.doumee.dao.business.model.Visits;
import com.doumee.dao.web.reqeust.CheckVisitedDTO;
import com.doumee.dao.web.response.MemberVO;
import com.doumee.dao.web.response.VisitDetailVO;
import com.doumee.dao.web.response.WxAuthorizeVO;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.VisitsService;
@@ -14,7 +15,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -66,4 +67,9 @@
    }
    @ApiOperation(value = "访客记录详情", notes = "访客记录详情")
    @GetMapping("/detail")
    public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id) {
        return ApiResponse.success("查询成功", visitsService.getVisitDetail(id));
    }
}
server/pom.xml
@@ -216,18 +216,18 @@
      <artifactId>pinyin4j</artifactId>
      <version>2.5.1</version>
    </dependency>
    <!-- WeChat å°ç¨‹åº -->
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-miniapp</artifactId>
      <version>${weixin-java-miniapp.version}</version>
    </dependency>
    <!-- WeChat æ”¯ä»˜ -->
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-pay</artifactId>
      <version>${weixin-java-pay.version}</version>
    </dependency>
<!--    &lt;!&ndash; WeChat å°ç¨‹åº &ndash;&gt;-->
<!--    <dependency>-->
<!--      <groupId>com.github.binarywang</groupId>-->
<!--      <artifactId>weixin-java-miniapp</artifactId>-->
<!--      <version>${weixin-java-miniapp.version}</version>-->
<!--    </dependency>-->
<!--    &lt;!&ndash; WeChat æ”¯ä»˜ &ndash;&gt;-->
<!--    <dependency>-->
<!--      <groupId>com.github.binarywang</groupId>-->
<!--      <artifactId>weixin-java-pay</artifactId>-->
<!--      <version>${weixin-java-pay.version}</version>-->
<!--    </dependency>-->
    <!--  é˜¿é‡Œäº‘OSS-->
    <dependency>
@@ -281,6 +281,12 @@
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- WxJava公众号 -->
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-mp</artifactId>
      <version>3.6.0</version>
    </dependency>
  </dependencies>
  <build>