fe29cab3d9bf8ddfeb1bc93a25a79c20276d8171..d352184d3364e379da38e56d6aa53c1f53f517ca
2 天以前 doum
最新版本541200007最新版本541200007
d35218 对比 | 目录
2 天以前 doum
更改头部
e3552c 对比 | 目录
已删除3个文件
已修改23个文件
281 ■■■■■ 文件已修改
admin/public/template/cars.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/template/member.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/index.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/static/css/app.034e1a67.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/static/js/app.c8651863.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/whyc_admin/static/js/app.c8651863.js.map 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/doc/新增断路器设备功能(2025-12-24).sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberPushData.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_gateway/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/model/Member.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/JiandaoyunCloudController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/CarsImport.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/public/template/cars.xlsx
Binary files differ
admin/public/template/member.xlsx
Binary files differ
admin/whyc_admin/index.html
@@ -1 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/whyc_admin/favicon.ico"><title>芜湖烟草智慧安消安全防范系统</title><link href="/whyc_admin/static/css/app.034e1a67.css" rel="preload" as="style"><link href="/whyc_admin/static/css/chunk-vendors.04c7bff3.css" rel="preload" as="style"><link href="/whyc_admin/static/js/app.c8651863.js" rel="preload" as="script"><link href="/whyc_admin/static/js/chunk-vendors.6d4f879a.js" rel="preload" as="script"><link href="/whyc_admin/static/css/chunk-vendors.04c7bff3.css" rel="stylesheet"><link href="/whyc_admin/static/css/app.034e1a67.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but èŠœæ¹–çƒŸè‰æ™ºæ…§å®‰æ¶ˆå®‰å…¨é˜²èŒƒç³»ç»Ÿ doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/whyc_admin/static/js/chunk-vendors.6d4f879a.js"></script><script src="/whyc_admin/static/js/app.c8651863.js"></script></body></html>
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/whyc_admin/favicon.ico"><title>title: process.env.VUE_APP_TITLE,</title><link href="/whyc_admin/static/css/app.e13cc487.css" rel="preload" as="style"><link href="/whyc_admin/static/css/chunk-vendors.04c7bff3.css" rel="preload" as="style"><link href="/whyc_admin/static/js/app.b07e2862.js" rel="preload" as="script"><link href="/whyc_admin/static/js/chunk-vendors.6d4f879a.js" rel="preload" as="script"><link href="/whyc_admin/static/css/chunk-vendors.04c7bff3.css" rel="stylesheet"><link href="/whyc_admin/static/css/app.e13cc487.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but èŠœæ¹–çƒŸè‰æ™ºæ…§å®‰æ¶ˆå®‰å…¨é˜²èŒƒç³»ç»Ÿ doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/whyc_admin/static/js/chunk-vendors.6d4f879a.js"></script><script src="/whyc_admin/static/js/app.b07e2862.js"></script></body></html>
admin/whyc_admin/static/css/app.034e1a67.css
ÎļþÒÑɾ³ý
admin/whyc_admin/static/js/app.c8651863.js
ÎļþÒÑɾ³ý
admin/whyc_admin/static/js/app.c8651863.js.map
ÎļþÒÑɾ³ý
server/doc/ÐÂÔö¶Ï·Æ÷É豸¹¦ÄÜ£¨2025-12-24£©.sql
@@ -4,6 +4,12 @@
INSERT INTO `wuhuyancao`.`quartz_job` (`id`, `bean_name`, `params`, `cron_expres`, `state`, `remark`, `create_time`, `module`) VALUES (NULL, 'visitServiceJob', '{}', '0 0/5 * * * ? *', 1, '【断路器】开启定时远程控制断路器分闸', '2023-07-26 13:17:17', 'autoCloseCmd');
INSERT INTO `wuhuyancao`.`system_dict_data` (`ID`, `DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`, `REMARK`) VALUES (314, 18, 'yKSKuO0LoFf06jWGrwwuGudK', 'JDY_SECRET', 0, 0, 1, '2025-12-29 10:32:54', NULL, '2025-12-29 10:31:45', 0, '数据推送秘钥');
INSERT INTO `wuhuyancao`.`system_dict_data` (`ID`, `DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`, `REMARK`) VALUES (315, 18, 'https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93695219faa27eb068192dc4a9532972993159', 'JDY_MEMBER_PUSH_STATUS_URL', 0, 0, 1, '2025-12-29 14:06:56', NULL, '2025-12-29 14:05:46', 0, '简道云人员推送处理结果通知地址');
INSERT INTO `wuhuyancao`.`system_dict_data` (`ID`, `DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`, `REMARK`) VALUES (316, 1, '芜湖烟草公司', 'SYSTEM_TITLE', 0, 0, 1, '2025-12-30 14:49:57', NULL, '2025-12-30 14:48:47', 0, '系统主标题');
INSERT INTO `wuhuyancao`.`system_dict_data` (`ID`, `DICT_ID`, `CODE`, `LABEL`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`, `REMARK`) VALUES (317, 1, '智慧物流园区安消一体化平台', 'SYSTEM_SUBTITLE', 0, 0, 1, '2025-12-30 14:50:40', NULL, '2025-12-30 14:49:30', 0, '系统副标题');
CREATE TABLE `device_data` (
  `ID` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `CREATOR` int DEFAULT NULL COMMENT '创建人编码',
server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/constants/HttpConstant.java
@@ -4,7 +4,8 @@
 * http ç›¸å…³çš„常量
 */
public class HttpConstant {
    public static final String HOST = "https://api.jiandaoyun.com/api/";
//    public static final String HOST = "https://api.jiandaoyun.com/api/";
//    public static final String HOST = "https://lcdp.ahyc.com.cn:30443/api/";
    /**
     * éƒ¨é—¨ç›¸å…³çš„æŽ¥å£å‰ç¼€
@@ -50,7 +51,7 @@
    /**
     * API_KEY
     */
    public static final String API_KEY = "JsmYomhn3dissp9ZJ6QeTpnH2xKoKZgw";
//    public static final String API_KEY = "JsmYomhn3dissp9ZJ6QeTpnH2xKoKZgw";
    public static final String APP_ID = "APP_ID";
server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/http/ApiClient.java
@@ -1,5 +1,6 @@
package com.doumee.core.jiandaoyun.model.http;
import com.alibaba.fastjson.JSONObject;
import com.doumee.core.jiandaoyun.util.LimitUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
@@ -119,11 +120,12 @@
     */
    public Map<String, Object> sendPostRequest(HttpRequestParam param) throws Exception {
        if (param == null || StringUtils.isBlank(param.getPath())) {
            throw new RuntimeException("缺失参数!");
            throw new Exception("缺失参数!");
        }
        HttpClient client = getSSLHttpClient();
        Header[] headers = getHttpHeaders(this.getApiKey());
        String url = this.host + param.getPath();
        log.error("===简道云接口url:"+url);
        HttpRequestBase request = new HttpPost(url);
        // è¯·æ±‚参数
@@ -148,9 +150,11 @@
            result = (Map<String, Object>) mapper.readValue(response.getEntity().getContent(), Object.class);
        }
        if (statusCode >= 400) {
            throw new RuntimeException("请求错误,statusCode:" + statusCode + ",Error Code: " + result.get("code") + ", Error Msg: " + result.get("msg"));
            log.error("===简道云接口:请求错误,statusCode:" + statusCode + ",Error Code: " + result.get("code") + ", Error Msg: " + result.get("msg"));
            throw new Exception("请求错误,statusCode:" + statusCode + ",Error Code: " + result.get("code") + ", Error Msg: " + result.get("msg"));
        } else {
            // å¤„理返回结果
            log.error("===简道云接口:请求成功result:" + JSONObject.toJSONString(result));
            return result;
        }
    }
server/jiandaoyun_service/src/main/java/com/doumee/core/jiandaoyun/model/request/MemberPushData.java
@@ -16,6 +16,7 @@
    private String sex;
    private String job_date;
    private String can_visit;//可拜访 ä¸å¯æ‹œè®¿
    private String master;//是 å¦
    private String phone;
    private String name;
    private String idcardno;
server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: system_gateway
  # å®‰å…¨é…ç½®
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -65,6 +65,7 @@
    public static final String JDY_CAR_SECRET = " JDY_CAR_SECRET";
    public static final String JDY_SECRET ="JDY_SECRET";
    public static final String JDY_MEMBER_PUSH_STATUS_URL ="JDY_MEMBER_PUSH_STATUS_URL";
    public static final String JDY_API_HOST = "API_HOST";
    /**
     * æ“ä½œç±»åž‹ï¼Œç”¨äºŽåšæŽ¥å£éªŒè¯åˆ†ç»„
@@ -92,6 +93,7 @@
    public static final String LOCATION ="LOCATION" ;
    public static final String API_KEY ="API_KEY" ;
    public static final String JDY_CONFIG ="JDY_CONFIG" ;
    public static final String JDY_COMPANY_ROOT_NO ="JDY_COMPANY_ROOT_NO" ;
    public static final String CABINET_CONFIG ="CABINET_CONFIG" ;
    public static final String BLOW_TIME ="BLOW_TIME" ;
    public static final String PRESSURE ="PRESSURE" ;
server/system_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -231,7 +231,7 @@
    private String companyPath;
    @ApiModelProperty(value = "组织信息")
    @TableField(exist = false)
    private Company company;
    private Company companyModel;
    @ApiModelProperty(value = "负责人编码(关联member)")
    @TableField(exist = false)
    private Integer headId;
server/system_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: systemTimer
    # å®‰å…¨é…ç½®
server/visits/admin_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: visitsTimer
    # å®‰å…¨é…ç½®
server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/JiandaoyunCloudController.java
@@ -122,7 +122,8 @@
            Map<String, String> parameterMap = parseParameter(request.getQueryString());
            String nonce = parameterMap.get("nonce");
            String timestamp = parameterMap.get("timestamp");
            String signature = getSignature(nonce, payload, systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_SECRET).getCode(), timestamp);
            String signature = getSignature(nonce, payload,
                    systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.JDY_SECRET).getCode(), timestamp);
            log.error("【简道云】数据推送 =========getRequestURI:{}\n,queryParam:{}\n,payload:{}\n,签名:{}\n,正确签名:{}\n",request.getRequestURI(),request.getQueryString(),payload,jdy,signature);
            if (!signature.equals(jdy)) {
                return  null;
@@ -163,7 +164,7 @@
    public static void main(String[] args) {
/*
*/
        String url = "https://api.jiandaoyun.com/api/v1/automation/tenant/6909b792324dc197821895d1/hooks/6909d0fbdb93695219faa27eb068192dc4a9532972993159";
        String url = "https://lcdp.ahyc.com.cn:30443/api/v1/automation/tenant/61b6fb6080e9de2aa1df94d7/hooks/6954aca3cdf86954d2657433fb470ca1aabd108246925eca";
        JSONObject object = new JSONObject();
        object.put("status",0);
        object.put("username","20251104160000" );
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -59,14 +59,11 @@
    @PostMapping("/create")
    @CloudRequiredPermission("business:member:create")
    public ApiResponse create(@RequestBody Member member,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) == DataSyncConfig.origin.self){
           member.setLoginUserInfo(this.getLoginUser(token));
           Member insert = memberService.create(member);
            //创建人脸信息
            return ApiResponse.success("操作成功!");
        }else{
            return ApiResponse.failed("对不起,无权限操作!");
        }
    }
    @PreventRepeat
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
  profiles:
    active: dev
    active: pro
  application:
    name: visitsAdmin
    # å®‰å…¨é…ç½®
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/CarsImport.java
@@ -35,8 +35,8 @@
    private String idcard;
    @ExcelColumn(name="停车库名称" , value = "parkName",index = 8)
    private String parkName;
    @ExcelColumn(name="开始时间" , value = "startTime",index =9)
    private String startTime;
    @ExcelColumn(name="结束时间" , value = "endTime",index = 10)
    private String endTime;
//    @ExcelColumn(name="开始时间" , value = "startTime",index =9)
//    private String startTime;
//    @ExcelColumn(name="结束时间" , value = "endTime",index = 10)
//    private String endTime;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -49,6 +49,7 @@
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;
@@ -194,7 +195,6 @@
        return false;
    }
    private OrgAddRequest getOrgAddModel(Company c ) {
        OrgAddRequest model = new OrgAddRequest();
@@ -891,12 +891,19 @@
    @Override
    public String syncJdyCompany() {
        //{
        //  "dept_no": 1,//数字 1 ä¸ºæ ¹éƒ¨é—¨ç¼–号。
        //  "dept_no": 1,//数字 1 ä¸ºæ ¹éƒ¨é—¨ç¼–号。483636217:芜湖市公司
        //  "has_child": true
        //}
        DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST);
        DeptApiClient deptApiClient = new DeptApiClient(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.API_KEY).getCode()
                ,systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_HOST).getCode());
        try {
            Map<String, Object> result =  deptApiClient.deptList(1,true,deptApiClient.getDefaultVersion());
            int root = 1;
            try {
                root = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_COMPANY_ROOT_NO).getCode());
            }catch (Exception e){
            }
            Map<String, Object> result =  deptApiClient.deptList(root,true,deptApiClient.getDefaultVersion());
            if(result!=null && result.get("departments")!=null ){
                TypeReference<List<DeptEntityModel>> typeReference =     new TypeReference<List<DeptEntityModel>>(){};
                Object obj = result.get("departments");
@@ -920,7 +927,6 @@
            e.printStackTrace();
            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "同步数据异常!");
        }
        return null;
    }
@@ -977,7 +983,6 @@
        }
    }
    /**
     * æ•´ç†é’‰é’‰åŒæ­¥ æ–°å¢žç»„织对象
     * @return
@@ -995,7 +1000,6 @@
    private Company getUpdateCompanyModel(Company param, Company company) {
        return syncDDEditCompanyModel(param,company);
    }
    /**
     * æ ¹æ®ERPID  åˆ¤æ–­æ•°æ®æ˜¯å¦å·²åœ¨é›†åˆé‡Œå­˜åœ¨
@@ -1158,7 +1162,7 @@
            if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
              parent =root;
            }
       /*   if(Objects.nonNull(parent.getType())&&!Constants.equalsInteger(parent.getType(),-1)){
           /*if(Objects.nonNull(parent.getType())&&!Constants.equalsInteger(parent.getType(),-1)){
                if(!Constants.equalsInteger(company.getType(),parent.getType())){
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,组织信息错误");
                }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -7,6 +7,9 @@
import com.doumee.core.dingTalk.DingTalkStream;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.jiandaoyun.api.arch.DeptApiClient;
import com.doumee.core.jiandaoyun.api.jdy.FormDataApiClient;
import com.doumee.core.jiandaoyun.model.form.FormDataCreateParam;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.*;
@@ -715,8 +718,6 @@
                            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                                for (String ddUserId:ddUserIdList) {
                                    this.getJDYData(warningEvent,ddUserId,
                                            systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.API_KEY).getCode(),
                                            systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.APPID).getCode(),
                                            systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.ENTRY_ID).getCode()
                                    );
                                }
@@ -758,34 +759,44 @@
     * ç®€é“云消息推送 å®šåˆ¶
     * @param warningEvent
     * @param ddUserId æŽ¥æ”¶äºº é’‰é’‰ä¸»é”®
     * @param jdyApiKey  ç®€å•云APIKEY
     * @param appid  åº”用ID
     * @param entryId è¡¨å•ID
     * @throws IOException
     */
    public void getJDYData(WarningEvent warningEvent,String ddUserId,String jdyApiKey,String appid,String entryId) throws IOException {
        Map<String,Object> map = new HashMap<>();
        map.put("app_id",appid);
        map.put("entry_id",entryId);
        map.put("is_start_workflow","false");
        map.put("is_start_trigger","true");
        map.put("data",this.getJdyChildData(warningEvent,ddUserId));
//        OkHttpClient client = new OkHttpClient().newBuilder()
//                .build();
//        MediaType mediaType = MediaType.parse("application/json");
//        RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(map));//"{\"data\":{\"notice_time\":{\"value\":\"2025-12-23 04:56:29\"},\"title\":{\"value\":\"跨越生产线\"},\"user\":{\"value\":\"1568490244651036\"},\"content\":{\"value\":\"跨越生产线-芜湖物流中心北围墙过道东\"},\"notice_type\":{\"value\":\"跨越生产线\"}},\"is_start_trigger\":\"true\",\"app_id\":\"6909d0fbdb93b068192dc4a9\",\"entry_id\":\"694a19ecf57e071788efc20b\",\"is_start_workflow\":\"false\"}");
//        log.error("简道云发送通知请求信息" + JSONObject.toJSONString(map));
//        Request request = new Request.Builder()
//                .url("https://api.jiandaoyun.com/api/v5/app/entry/data/create")
//                .method("POST", body)
//                .addHeader("Authorization", "Bearer "+jdyApiKey)
//                .addHeader("Content-Type", "application/json")
//                .build();
//        Response response = client.newCall(request).execute();
//
//        log.error("简道云发送通知返回信息" + JSONObject.toJSONString(response));
    public void getJDYData(WarningEvent warningEvent,String ddUserId , String entryId)  {
        try {
            log.error("简道云发送通知返回信息开始"  );
            FormDataApiClient apiClient = new FormDataApiClient(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.API_KEY).getCode()
                    ,systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_HOST).getCode());
            FormDataCreateParam param  =new FormDataCreateParam();
            param.setData(this.getJdyChildData(warningEvent,ddUserId));
            param.setApp_id(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.APPID).getCode());
            param.setEntry_id(entryId);
            param.setIs_start_trigger(false);
            param.setIs_start_trigger(true);
            Map<String, Object>  response =  apiClient.singleDataCreate(param,apiClient.getDefaultVersion());
            /*
             Map<String,Object> map = new HashMap<>();
            map.put("app_id",appid);
            map.put("entry_id",entryId);
            map.put("is_start_workflow","false");
            map.put("is_start_trigger","true");
            map.put("data",this.getJdyChildData(warningEvent,ddUserId));
            OkHttpClient client = new OkHttpClient().newBuilder()
                    .build();
            MediaType mediaType = MediaType.parse("application/json");
            RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(map));//"{\"data\":{\"notice_time\":{\"value\":\"2025-12-23 04:56:29\"},\"title\":{\"value\":\"跨越生产线\"},\"user\":{\"value\":\"1568490244651036\"},\"content\":{\"value\":\"跨越生产线-芜湖物流中心北围墙过道东\"},\"notice_type\":{\"value\":\"跨越生产线\"}},\"is_start_trigger\":\"true\",\"app_id\":\"6909d0fbdb93b068192dc4a9\",\"entry_id\":\"694a19ecf57e071788efc20b\",\"is_start_workflow\":\"false\"}");
            log.error("简道云发送通知请求信息" + JSONObject.toJSONString(map));
            Request request = new Request.Builder()
                    .url(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_HOST).getCode()+"v5/app/entry/data/create")
                    .method("POST", body)
                    .addHeader("Authorization", "Bearer "+jdyApiKey)
                    .addHeader("Content-Type", "application/json")
                    .build();
            Response response = client.newCall(request).execute();*/
            log.error("简道云发送通知返回信息" + JSONObject.toJSONString(response));
        }catch (Exception e){
            log.error("简道云发送通知返回信息异常:" + e.getMessage());
        }
    }
@@ -1105,8 +1116,6 @@
                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                            for (String ddUserId:ddUserIdList) {
                                this.getJDYData(warningEvent,ddUserId,
                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.API_KEY).getCode(),
                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.APPID).getCode(),
                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.ENTRY_ID).getCode()
                                );
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetLogServiceImpl.java
@@ -270,8 +270,6 @@
                                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                                    for (String ddUserId:ddUserIdList) {
                                        impl.getJDYData(warningEvent,ddUserId,
                                                systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.API_KEY).getCode(),
                                                systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.APPID).getCode(),
                                                systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.ENTRY_ID).getCode()
                                        );
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -182,18 +182,19 @@
        Member insert = initAddMemberModel(member,loginUserInfo);
        //海康人员新增业务
        try {
//             if(dealHkUserBiz(insert)){
            memberMapper.insert(insert);
            //创建系统登陆账号(默认无任何角色)
//                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
            //如果是内部组织人员,新增系统登陆账号
            systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
            //处理培训有效期业务
            dealTrainTIme(member,0,loginUserInfo);
             if(dealHkUserBiz(insert)){
                insert.setHkStatus(Constants.ONE);
                memberMapper.insert(insert);
                //创建系统登陆账号(默认无任何角色)
    //                if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){
                //如果是内部组织人员,新增系统登陆账号
                systemUserMapper.insert(createSystemUser(insert,systemDictDataBiz));
                //处理培训有效期业务
                dealTrainTIme(member,0,loginUserInfo);
//                }
//            }else{
//                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
//            }
            }else{
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
            }
        }catch (BusinessException e){
            //如果发生异常,删除已经创建的人员信息
            deleteHkUserBiz(new String[]{insert.getHkId()});
@@ -257,7 +258,7 @@
        insert.setCanVisit(Constants.formatIntegerNum(member.getCanVisit()));//默认不可访问
        insert.setAuthStatus(Constants.ZERO);
        insert.setName(member.getName());
        insert.setHkId(UUID.randomUUID().toString().replace("-",""));
//        insert.setHkId(UUID.randomUUID().toString().replace("-",""));
        insert.setHkStatus(Constants.ZERO);
        insert.setSex(Constants.getSexByCardNo( member.getIdcardNo()));//根据身份证号获取性别
        insert.setJobDate(member.getJobDate());
@@ -401,7 +402,7 @@
                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号【"+member.getPhone()+"】已被使用,不能重复");
        }
        Company company = member.getCompany()!=null ?member.getCompany(): companyMapper.selectById(member.getCompanyId());
        Company company = member.getCompanyModel()!=null ?member.getCompanyModel(): companyMapper.selectById(member.getCompanyId());
        if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除!");
        }
@@ -505,7 +506,7 @@
        }
        if(member.getCompanyId()!=null && !Constants.equalsInteger(member.getCompanyId(),model.getCompanyId())){
            //如果组织发生变化
            Company company = member.getCompany()!=null ?member.getCompany(): companyMapper.selectById(member.getCompanyId());
            Company company = member.getCompanyModel()!=null ?member.getCompanyModel(): companyMapper.selectById(member.getCompanyId());
            if(company == null || Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该组织信息已被删除,请刷新页面重试!");
            }
@@ -968,44 +969,44 @@
        updateMember.setEditor(loginUserInfo!=null?loginUserInfo.getId():null);
        updateMember.setEditDate(new Date());
        //海康人员新增业务
//        if(dealHkUserForUpdateBiz(updateMember)){
        updateMember.setHkId(null);
        updateMember.setAuthStatus(Constants.ZERO);
        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                .set(Member::getStartTime,null)
                .set(Member::getEndTime,null)
                .set(Member::getRoleId,null)
                .set(StringUtils.isNotBlank(updateMember.getPhone()),Member::getPhone,updateMember.getPhone())
                .set(StringUtils.isNotBlank(updateMember.getName()),Member::getName,updateMember.getName())
                .set(Member::getEditDate,updateMember.getEditDate())
                .set(Member::getEditor,updateMember.getEditor())
                .set(StringUtils.isNotBlank(updateMember.getName()),Member::getPinyin,Constants.getChinesePingyin(updateMember.getName()))
                .set(StringUtils.isNotBlank(updateMember.getIdcardNo()),Member::getIdcardNo,updateMember.getIdcardNo())
                .set(StringUtils.isNotBlank(updateMember.getIdcardDecode()),Member::getIdcardDecode,updateMember.getIdcardDecode())
                .set( Member::getAuthStatus,Constants.ZERO)
                .set(updateMember.getHkStatus()!=null,Member::getHkStatus,updateMember.getHkStatus())
                .set(updateMember.getSex()!=null,Member::getSex,updateMember.getSex())
                .set(updateMember.getCanVisit()!=null,Member::getCanVisit,updateMember.getCanVisit())
                .set(updateMember.getFaceStatus()!=null,Member::getFaceStatus,updateMember.getFaceStatus())
                .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
                .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
                .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark())
                .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg())
                .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId())
                .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId())
                .set(Member::getCode,updateMember.getCode())
//                    .set(StringUtils.isNotBlank(updateMember.getCode()),Member::getCode,updateMember.getCode())
                .set( updateMember.getPositionId()!=null,Member::getPositionId,updateMember.getPositionId())
                .set( updateMember.getIsDangyuan()!=null,Member::getIsDangyuan,updateMember.getIsDangyuan())
                .set( updateMember.getJobDate()!=null,Member::getJobDate,updateMember.getJobDate())
                .eq(Member::getId,updateMember.getId()));
        dealTrainTIme(updateMember,1,loginUserInfo);
        cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
        //记录操作日志
        saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
//        }else{
//            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
//        }
        if(dealHkUserForUpdateBiz(updateMember)){
            updateMember.setHkStatus(Constants.ONE);
            updateMember.setHkId(null);
            updateMember.setAuthStatus(Constants.ZERO);
            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                    .set(Member::getStartTime,null)
                    .set(Member::getEndTime,null)
                    .set(Member::getRoleId,null)
                    .set(StringUtils.isNotBlank(updateMember.getPhone()),Member::getPhone,updateMember.getPhone())
                    .set(StringUtils.isNotBlank(updateMember.getName()),Member::getName,updateMember.getName())
                    .set(Member::getEditDate,updateMember.getEditDate())
                    .set(Member::getEditor,updateMember.getEditor())
                    .set(StringUtils.isNotBlank(updateMember.getName()),Member::getPinyin,Constants.getChinesePingyin(updateMember.getName()))
                    .set(StringUtils.isNotBlank(updateMember.getIdcardNo()),Member::getIdcardNo,updateMember.getIdcardNo())
                    .set(StringUtils.isNotBlank(updateMember.getIdcardDecode()),Member::getIdcardDecode,updateMember.getIdcardDecode())
                    .set( Member::getAuthStatus,Constants.ZERO)
                    .set(updateMember.getHkStatus()!=null,Member::getHkStatus,updateMember.getHkStatus())
                    .set(updateMember.getSex()!=null,Member::getSex,updateMember.getSex())
                    .set(updateMember.getCanVisit()!=null,Member::getCanVisit,updateMember.getCanVisit())
                    .set(updateMember.getFaceStatus()!=null,Member::getFaceStatus,updateMember.getFaceStatus())
                    .set(updateMember.getHkDate()!=null,Member::getHkDate,updateMember.getHkDate())
                    .set(StringUtils.isNotBlank(updateMember.getRemark()),Member::getRemark,updateMember.getRemark())
                    .set(StringUtils.isNotBlank(updateMember.getFaceImg()),Member::getFaceImg,updateMember.getFaceImg())
                    .set(updateMember.getFaceId()!=null,Member::getFaceId,updateMember.getFaceId())
                    .set(updateMember.getCompanyId()!=null,Member::getCompanyId,updateMember.getCompanyId())
                    .set(Member::getCode,updateMember.getCode())
    //                    .set(StringUtils.isNotBlank(updateMember.getCode()),Member::getCode,updateMember.getCode())
                    .set( updateMember.getPositionId()!=null,Member::getPositionId,updateMember.getPositionId())
                    .set( updateMember.getIsDangyuan()!=null,Member::getIsDangyuan,updateMember.getIsDangyuan())
                    .set( updateMember.getJobDate()!=null,Member::getJobDate,updateMember.getJobDate())
                    .eq(Member::getId,updateMember.getId()));
            dealTrainTIme(updateMember,1,loginUserInfo);
            cancelAllMemberEmpower(updateMember,memberRoleMapper,empowerMapper);
            //记录操作日志
            saveUserActionBiz(updateMember,loginUserInfo,Constants.UserActionType.EDIT,userActionJoinMapper,null);
        }else{
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,员工信息同步安防平台失败,请稍后重试!");
        }
    }
    private void dealTrainTIme(Member updateMember, int i,LoginUserInfo loginUserInfo) {
@@ -2497,6 +2498,7 @@
                    .eq( Member::getType,Constants.TWO )
                    .last("limit 1"));
        }
        boolean addOrEdit = false;
        if(member == null){
            //新增人员
            if(data.getDeleter()!=null){
@@ -2505,6 +2507,7 @@
            }
            member = getAddOrUpdateModelFromJDY(data,true);
            this.create(member);
            addOrEdit=true;
        }else{
            //更新人员
            if(data.getDeleter()!=null){
@@ -2514,8 +2517,16 @@
                //更新人员信息
                Member updateMember =getAddOrUpdateModelFromJDY(data,false);
                updateMember.setId(member.getId());
                addOrEdit=true;
                this.updateById(updateMember);
            }
        }
        if(addOrEdit && Constants.equalsInteger(member.getHeadStatus(),Constants.ONE) && member.getCompanyModel()!=null){
            //如果是部门主管
            Company updateCom = new Company();
            updateCom.setHeadId(member.getId());
            updateCom.setId(member.getCompanyModel().getId());
            companyMapper.updateById(updateCom);//更新部门主管人员
        }
    }
@@ -2534,6 +2545,9 @@
        }
        if(StringUtils.isNotBlank(data.getCan_visit())){
            member.setCanVisit(StringUtils.equals(data.getCan_visit(),"可拜访")?1:0);
        }
        if(StringUtils.isNotBlank(data.getMaster())){
            member.setHeadStatus(StringUtils.equals(data.getMaster(),"是")?1:0);
        }
        member.setErpId(data.getUsername());
        if(data.getDepartment()!=null){
@@ -2570,7 +2584,7 @@
        if(depart!=null){
            member.setCompanyId(depart.getId());
        }
        member.setCompany(depart);
        member.setCompanyModel(depart);
        return  member;
    }
@@ -2608,7 +2622,8 @@
    @Override
    public String syncJdyUserInfo() {
        DeptApiClient deptApiClient = new DeptApiClient(HttpConstant.API_KEY, HttpConstant.HOST);
        DeptApiClient deptApiClient = new DeptApiClient(systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.API_KEY).getCode()
                ,systemDictDataBiz.queryByCode(Constants.JDY_CONFIG, Constants.JDY_API_HOST).getCode());
        try {
            Map<String, Object> result =  deptApiClient.deptMemberList(1,true,deptApiClient.getDefaultVersion());
            if(result!=null && result.get("users")!=null ){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncLoginAuthServiceImpl.java
@@ -43,7 +43,8 @@
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,登录组件失败,请稍后重试!");
        }
        //优先从缓存取数据,如果有缓存,直接返回缓存地址
        /*String cacheUrl = (String) redisTemplate.opsForValue().get(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel());
        /*
        String cacheUrl = (String) redisTemplate.opsForValue().get(Constants.REDIS_HK_TOKEN_KEY+param.getUsername()+param.getLabel());
        if(StringUtils.isNotBlank(cacheUrl)){
            return cacheUrl;
        }*/
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -546,8 +546,6 @@
                                        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ddUserIdList)){
                                            for (String ddUserId:ddUserIdList) {
                                                impl.getJDYData(warningEvent,ddUserId,
                                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.API_KEY).getCode(),
                                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.APPID).getCode(),
                                                        systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.ENTRY_ID).getCode()
                                                );
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -763,7 +763,13 @@
            }else{
                noticeErpFail(c,Constants.ZERO,"人员信息同步安防平台失败,请修正后重试!");
                c.setHkStatus(Constants.TWO);
                c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!"+(result!=null?result.getCode()+result.getMsg():""));
                String msg =(result!=null?result.getCode()+result.getMsg():"");
                c.setRemark("人员信息同步安防平台更新失败,请修正后重试!!"+msg);
                if(StringUtils.contains(msg,"Person Not Exists")){
                    //人员信息不存在,清空hkId,重新添加
                    c.setHkId("-");
                    c.setHkStatus(Constants.ZERO);
                }
            }
            c.setHkDate(date);
            c.setEditDate(date);