rk
昨天 4ee00850f197d769481f73acb8ed79ab1c75b84d
问题修复
已添加1个文件
已修改11个文件
364 ■■■■■ 文件已修改
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/JDYKeyUseByBookDTO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -84,6 +84,7 @@
    public static final String LOCATION ="LOCATION" ;
    public static final String API_KEY ="API_KEY" ;
    public static final String CABINET_CONFIG ="CABINET_CONFIG" ;
    public static final String JDY_CONFIG ="JDY_CONFIG" ;
    public static final String BLOW_TIME ="BLOW_TIME" ;
    public static final String PRESSURE ="PRESSURE" ;
    public static final String CONCENTRATION ="CONCENTRATION" ;
@@ -127,6 +128,8 @@
    public static final String WORK_END = "WORK_END";
    public static final String INTERVAL = "INTERVAL";
    public static final String USE_CAR_TAKE_CARE = "USE_CAR_TAKE_CARE";
    public static final String PUSH_URL_KEYS = "PUSH_URL_KEYS";
@@ -537,6 +540,9 @@
    public static final String APP_SECRET ="APP_SECRET";
    public static final String ACCESS_TOKEN ="ACCESS_TOKEN";
    public static final String AGENT_ID ="AGENT_ID";
    public static final String CLEAN_TIME ="CLEAN_TIME";
    public static final String EARLY_CONFIG ="EARLY_CONFIG";
@@ -1568,5 +1574,27 @@
    }
    public static boolean  betweenTimeConfig(String timeConfigData){
        if(StringUtils.isNotBlank(timeConfigData)){
            Integer nowTime = Integer.valueOf(DateUtil.getFormattedDateUtil(new Date(),"HH:mm").replace(":",""));
            List<String> cleanConfigList = Arrays.asList(StringUtils.split(timeConfigData,","));
            for (String config:cleanConfigList) {
                String [] timeArr = config.split("-");
                if(timeArr.length>Constants.ONE){
                    try {
                        Integer start = Integer.valueOf(timeArr[0].replace(":",""));
                        Integer end = Integer.valueOf(timeArr[1].replace(":",""));
                        if(start <= nowTime && end >= nowTime){
                            return true;
                        }
                    }catch (Exception e){
                    }
                }
            }
        }
        return false;
    }
}
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -2085,7 +2085,7 @@
     */
    public static String getCurrDateTime() {
        Timestamp date = new Timestamp(System.currentTimeMillis());
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return formatter.format(date);
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
@@ -22,6 +22,7 @@
import com.doumee.dao.web.reqeust.VisitRecordDTO;
import com.doumee.dao.web.response.VisitRecordVO;
import com.doumee.service.business.CarUseBookService;
import com.doumee.service.business.CarsService;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -68,12 +69,20 @@
    @Autowired
    private CarUseBookService carUseBookService;
    @Autowired
    private CarsService carsService;
    public  static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK";
    public  static final String LOCAl_SECRET ="tSoMiqC3GY6tItXY48tSTwY6";
    public static final String LLCAL_CARINFO_SECRET = "4J1GMIAG3m6O2jkkaxTu5EOe";
    @LoginNoRequired
    @ApiOperation("简道云推送用车申请")
    @PostMapping("/pushCarApply")
    public void pushCarApply (HttpServletRequest request, HttpServletResponse response) {
        log.error("简道云=========getRequestURI:"+request.getRequestURI());
        log.error("简道云=========getRequestURL:"+request.getRequestURL());
        log.error("【简道云】 ç”¨è½¦ç”³è¯· =========getRequestURI:"+request.getRequestURI());
        log.error("【简道云】 ç”¨è½¦ç”³è¯· =========getRequestURL:"+request.getRequestURL());
        //新建{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":0,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:41:56.155Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_create","opTime":1762850516152}
        //修改{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":0,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:43:06.436Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_update","opTime":1762850586436}
        //修改{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":1,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:45:01.231Z","updater":{"_id":"6909b792324dc197821895e4","name":"江萍","status":1,"type":0,"username":"0458340612772735"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_update","opTime":1762850701231}
@@ -92,20 +101,64 @@
            String nonce = parameterMap.get("nonce");
            String timestamp = parameterMap.get("timestamp");
            String signature = getSignature(nonce, payload, LOCAl_SECRET, timestamp);
            log.error("简道云=========nonce:"+nonce);
            log.error("简道云=========timestamp:"+timestamp);
            log.error("简道云=========payload:"+payload);
            log.error("简道云=========签名:"+jdy);
            log.error("简道云=========签名(正确):"+signature);
            log.error("【简道云】 ç”¨è½¦ç”³è¯· =========nonce:"+nonce);
            log.error("【简道云】 ç”¨è½¦ç”³è¯· =========timestamp:"+timestamp);
            log.error("【简道云】 ç”¨è½¦ç”³è¯· =========payload:"+payload);
            log.error("【简道云】 ç”¨è½¦ç”³è¯· =========签名:"+jdy);
            log.error("【简道云】 ç”¨è½¦ç”³è¯· =========签名(正确):"+signature);
            if (!signature.equals(jdy)) {
                response.setStatus(401);
                response.getWriter().write("fail");
                response.getWriter().close();;
                return ;
            }
            carUseBookService.jdyPushCarUseBook(payload);
            response.setStatus(200);
            response.getWriter().write("success");
            response.getWriter().close();
        }catch (Exception e){
            e.printStackTrace();
            log.error("【简道云】 ç”¨è½¦ç”³è¯· =========异常:"+e.getMessage());
        }
    }
    @LoginNoRequired
    @ApiOperation("简道云推送车辆信息")
    @PostMapping("/pushCarInfo")
    public void pushCarInfo (HttpServletRequest request, HttpServletResponse response) {
        log.error("【简道云】 è½¦è¾†ä¿¡æ¯ =========getRequestURI:"+request.getRequestURI());
        log.error("【简道云】 è½¦è¾†ä¿¡æ¯=========getRequestURL:"+request.getRequestURL());
        //新建{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":0,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:41:56.155Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_create","opTime":1762850516152}
        //修改{"data":{"data":{"_id":"6909d2ac6bf3636d0dbcc953","_widget_1762251302690":"皖AFJ6557","_widget_1762251302691":"一般公务","_widget_1762251302692":"","_widget_1762251302693":"市局本级车队","_widget_1762251302694":{"_id":"6909b792324dc197821895e8","name":"李怀英","status":1,"type":0,"username":"045831294126209983"},"_widget_1762251302695":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"_widget_1762251302696":"可用","_widget_1762251302697":null,"_widget_1762251302698":10000,"_widget_1762251302699":null,"_widget_1762251302700":null,"_widget_1762251302701":null,"_widget_1762251302702":null,"_widget_1762251302703":"否","appId":"6909d0fbdb93b068192dc4a9","createTime":"2025-11-04T10:17:17.015Z","creator":{"_id":"6909b792324dc197821895e8","name":"李怀英","status":1,"type":0,"username":"045831294126209983"},"deleteTime":null,"deleter":null,"entryId":"6909d226b9a675ac4224aa6d","formName":"车辆信息","updateTime":"2025-11-13T09:20:05.253Z","updater":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"}},"op":"data_update","opTime":1763025605253}
        //修改{"data":{"_id":"6912f6d47b4a80933348df31","addr":"豆米科技","appId":"6909d0fbdb93b068192dc4a9","car_category":"专卖管理","car_group":"当涂县局车队","car_no":"皖EU2866","car_statue":"出车","company":{"_id":"6909b792fa9388e2242f497d","dept_no":483166139,"name":"开发部","type":0},"createTime":"2025-11-11T08:41:56.152Z","create_date":"2025-11-10T16:00:00.000Z","creator":{"_id":"6909b792324dc197821895e7","name":"任康","status":1,"type":0,"username":"1568490244651036"},"deleteTime":null,"deleter":null,"driver":{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"},"driver_status":"空闲","end_date":"2025-11-11T09:41:00.000Z","entryId":"690ab9085ebd91d2308e595b","flowState":1,"formName":"派车申请","holiday":"否","key_back_date":null,"key_info":"待领取","key_use_date":null,"no":"20251111100004","reason":"测试申请","scope":"市内","start_date":"2025-11-11T08:41:00.000Z","updateTime":"2025-11-11T08:45:01.231Z","updater":{"_id":"6909b792324dc197821895e4","name":"江萍","status":1,"type":0,"username":"0458340612772735"},"users":[{"_id":"6909b792324dc197821895e5","name":"郭际文武","status":1,"type":0,"username":"0115666322451143077815"}]},"op":"data_update","opTime":1762850701231}
        try {
            String jdy = request.getHeader("x-jdy-signature");
            StringBuilder json = new StringBuilder();
            String line;
            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
            while ((line = reader.readLine()) != null) {
                json.append(line);
            }
//            String payload = IOUtils.toString(request.getInputStream(), "utf-8");
            String payload = json.toString();
            String uri = request.getRequestURI();
            Map<String, String> parameterMap = parseParameter(request.getQueryString());
            String nonce = parameterMap.get("nonce");
            String timestamp = parameterMap.get("timestamp");
            String signature = getSignature(nonce, payload, LLCAL_CARINFO_SECRET, timestamp);
            log.error("【简道云】 è½¦è¾†ä¿¡æ¯=========nonce:"+nonce);
            log.error("【简道云】 è½¦è¾†ä¿¡æ¯=========timestamp:"+timestamp);
            log.error("【简道云】 è½¦è¾†ä¿¡æ¯=========payload:"+payload);
            log.error("【简道云】 è½¦è¾†ä¿¡æ¯=========签名:"+jdy);
            log.error("【简道云】 è½¦è¾†ä¿¡æ¯=========签名(正确):"+signature);
            if (!signature.equals(jdy)) {
                response.setStatus(401);
                response.getWriter().write("fail");
                response.getWriter().close();;
                return ;
            }
            carsService.jdyPushCarInfo(payload);
            response.setStatus(200);
            response.getWriter().write("success");
            response.getWriter().close();
@@ -113,8 +166,8 @@
            e.printStackTrace();
            log.error("简道云=========异常:"+e.getMessage());
        }
    }
    @ApiOperation("简道云提交钥匙借还信息")
    @PostMapping("/submitKeyRecord")
    public ApiResponse<JkCabinetLog> submitKeyRecord (HttpServletRequest request, HttpServletResponse response) {
@@ -124,9 +177,6 @@
        log.setMemberName("张三");
        return  ApiResponse.success(log);
    }
    public  static final String SECRET ="yKSKuO0LoFf06jWGrwwuGudK";
    public  static final String LOCAl_SECRET ="tSoMiqC3GY6tItXY48tSTwY6";
    private static String getSignature(String nonce, String payload, String secret, String timestamp) {
        return DigestUtils.sha1Hex(nonce + ":" + payload + ":" + secret + ":" + timestamp);
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/JDYKeyUseByBookDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.doumee.dao.business.dto;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/10/11 16:01
 */
@Data
public class JDYKeyUseByBookDTO{
    @ApiModelProperty(value = "操作时间")
    private Long create_date;
    @ApiModelProperty(value = "领用时间")
    private Long start_date;
    @ApiModelProperty(value = "归还时间")
    private Long end_date;
    @ApiModelProperty(value = "操作类型:0=领用;1=归还;")
    private Integer type;
    @ApiModelProperty(value = "派车单 no单号")
    private String id;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/OpenGridDriverDTO.java
@@ -25,6 +25,13 @@
    @ApiModelProperty(value = "用户主键")
    private Integer memberId;
    @ApiModelProperty(value = "开启方式:0=系统开启;1=手动开启")
    @ApiModelProperty(value = "开启类型:0=系统开启;1=手动开启")
    private Integer openType;
    @ApiModelProperty(value = "开启方式:0=随车;1=派车单;2=保洁")
    private Integer openWay;
    @ApiModelProperty(value = "派车单主键")
    private Integer carUseBookId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -159,6 +159,11 @@
    @ApiModelProperty(value = "简道云业务主键")
    private String jdyId;
    @ApiModelProperty(value = "钥匙领取状态:0=待领取;1=已领取;2=已归还;")
    private Integer keyStatus;
    @ApiModelProperty(value = "司机姓名", example = "1")
    @TableField(exist = false)
    private String driverName;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
@@ -127,6 +127,16 @@
    //@ExcelColumn(name="所属分类编码")
    private Integer cateId;
    @ApiModelProperty(value = "简道云主键", example = "1")
    //@ExcelColumn(name="所属分类编码")
    private String jdyId;
    @ApiModelProperty(value = "简道云车辆分类名称", example = "1")
    //@ExcelColumn(name="所属分类编码")
    private String typeName;
    @ApiModelProperty(value = "停车场名称集合", example = "1")
    //@ExcelColumn(name="停车场名称集合")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetGrid.java
@@ -110,4 +110,12 @@
    @TableField(exist = false)
    private Integer keyStatus;
    @ApiModelProperty(value = "派车申请单主键", example = "1")
    @TableField(exist = false)
    private Integer carUseBookId;
    @ApiModelProperty(value = "取钥匙方式:0=随车;1=派车单;2=保洁打扫", example = "1")
    @TableField(exist = false)
    private Integer getKeyWay;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinetLog.java
@@ -80,6 +80,13 @@
    @ApiModelProperty(value = "操作类型:0=开门;1=关门;", example = "1")
    private Integer type;
    @ApiModelProperty(value = "开启方式:0=随车;1=派车单;2=保洁")
    private Integer openWay;
    @ApiModelProperty(value = "派车单主键")
    private Integer carUseBookId;
    @ApiModelProperty(value = "车牌号")
    @TableField(exist = false)
    private String carCode;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarsService.java
@@ -107,4 +107,6 @@
     */
    PageData<CarsDTO> findCarPage(PageWrap<CarsQuery> pageWrap);
    void dealCarsAuthBiz(List<Cars> carsList);
    void jdyPushCarInfo(String dataInfo);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -1,5 +1,7 @@
package com.doumee.service.business.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,6 +9,7 @@
import com.doumee.core.annotation.excel.ExcelImporter;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.utils.DateUtil;
import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
@@ -39,6 +42,7 @@
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * è½¦è¾†ä¿¡æ¯è¡¨Service实现
@@ -711,4 +715,71 @@
    }
    @Override
    public void jdyPushCarInfo(String dataInfo){
        JSONObject dataInfoJSON = JSONObject.parseObject(dataInfo);
        if(dataInfoJSON.isEmpty()){
            return;
        }
        String op = dataInfoJSON.getString("op");
        //删除:data_remove æ–°å¢žï¼šdata_add ä¿®æ”¹ï¼šdata_update
        if(StringUtils.isEmpty(op)){
            return;
        }
        JSONObject dataJSON = dataInfoJSON.getJSONObject("data");
        String no = dataJSON.getString("_id");
        if(StringUtils.isEmpty(no)){
            return;
        }
        if(op.equals("data_remove")){
            carsMapper.update(new UpdateWrapper<Cars>().lambda()
                    .set(Cars::getEditDate, DateUtil.getCurrDate())
                    .set(Cars::getIsdeleted,Constants.ONE).eq(Cars::getJdyId,no));
            return;
        }
        String status = dataJSON.getString("status");
        String carCode = dataJSON.getString("car_code");
        Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>()
                .lambda().eq(Cars::getJdyId,no).last("limit 1"));
        if(Objects.isNull(cars)){
            cars = new Cars();
            cars.setCreateDate(new Date());
            cars.setEditDate(new Date());
            cars.setJdyId(no);
        }else{
            cars.setEditDate(new Date());
        }
        cars.setIsdeleted(Constants.ZERO);
        cars.setCode(StringUtils.isBlank(carCode)?null:carCode);
        cars.setStatus(StringUtils.isNotBlank(status)&&StringUtils.equals(status,"可用")?0:1);
        JSONObject driverJSON = dataJSON.getJSONObject("driver");
        if(!driverJSON.isEmpty()){
            String driverName = driverJSON.getString("name");
            String driverUserName = driverJSON.getString("username");
            if(StringUtils.isNotBlank(driverUserName)){
                Member driverMember = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getDdId,driverUserName).last("limit 1 "));
                if(Objects.nonNull(driverMember)){
                    cars.setMemberId(driverMember.getId());
                }
            }
        }
        JSONObject createJSON = dataJSON.getJSONObject("creator");
        if(!createJSON.isEmpty()){
            String createName = createJSON.getString("name");
            String createUserName = createJSON.getString("username");
            if(StringUtils.isNotBlank(createUserName)){
                Member createMember = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getDdId,createUserName).last("limit 1 "));
                if(Objects.nonNull(createMember)){
                    cars.setMemberId(createMember.getId());
                }
            }
        }
        carsMapper.insertOrUpdate(cars);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetGridServiceImpl.java
@@ -9,6 +9,7 @@
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.HttpsUtil;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dao.MemberMapper;
import com.doumee.dao.business.dto.*;
@@ -82,6 +83,9 @@
    @Autowired
    private DingTalk dingTalk;
    @Autowired
    private CarUseBookMapper carUseBookMapper;
    @Override
    public Integer create(JkCabinetGrid jkCabinetGrid) {
@@ -477,12 +481,40 @@
                                .set(JkKeys::getStatus,dto.getKeyStatus())
                                .eq(JkKeys::getId,jkKeys.getId())
                        );
                        //归还钥匙/借出钥匙 éƒ½è¦åŽ»æŸ¥è¯¢æœ€åŽä¸€æ¬¡å¼€é—¨è®°å½• èŽ·å–å…·ä½“çš„å¼€é—¨çš„æ–¹å¼ æ˜¯éšè½¦/派车/保洁 èµ‹äºˆå½“前关门记录内 å¦‚果是派车单数据 éœ€è¦è°ƒèµ·ç®€é“云推送
                        JkCabinetLog lastOutLog = jkCabinetLogMapper.selectOne(new QueryWrapper<JkCabinetLog>().lambda()
                                .eq(JkCabinetLog::getKeyId,jkCabinetLog.getKeyId())
                                .eq(JkCabinetLog::getType,Constants.ZERO)
                                .last( "limit 1 "));
                        if(Objects.nonNull(lastOutLog)){
                            if(Objects.nonNull(lastOutLog.getCarUseBookId())) {
                                CarUseBook carUseBook = carUseBookMapper.selectById(lastOutLog.getCarUseBookId());
                                if (Objects.nonNull(carUseBook) && Constants.equalsInteger(carUseBook.getKeyStatus(), Constants.ZERO)) {
                                    carUseBookMapper.update(new UpdateWrapper<CarUseBook>().lambda()
                                            .set(CarUseBook::getKeyStatus, Constants.ONE)
                                            .eq(CarUseBook::getId, carUseBook.getId())
                                    );
                                    //推送简道云 æ ‡è®°ä¸šåŠ¡æ•°æ®å·²è¢«é¢†å–é’¥åŒ™
                                    if (StringUtils.isNotBlank(carUseBook.getJdyId())) {
                                        JDYKeyUseByBookDTO jdyKeyUseByBookDTO = new JDYKeyUseByBookDTO();
                                        jdyKeyUseByBookDTO.setCreate_date(System.currentTimeMillis());
                                        jdyKeyUseByBookDTO.setStart_date(Constants.equalsInteger(dto.getKeyStatus(),Constants.TWO)?System.currentTimeMillis():null);
                                        jdyKeyUseByBookDTO.setEnd_date(Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)?System.currentTimeMillis():null);
                                        jdyKeyUseByBookDTO.setType(Constants.equalsInteger(dto.getKeyStatus(),Constants.TWO)?Constants.ZERO:Constants.ONE);
                                        jdyKeyUseByBookDTO.setId(carUseBook.getJdyId());
                                        this.pushJDYKeyInfo(jdyKeyUseByBookDTO);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            jkCabinetLog.setIsNotice(Constants.ZERO);
            jkCabinetLog.setType(Constants.ONE);
            jkCabinetLogMapper.insert(jkCabinetLog);
            //查询钥匙的开门记录 è¿›è¡Œæ·»åŠ å…³é—¨è®°å½•ä¸»é”®
            if(Constants.equalsInteger(dto.getKeyStatus(),Constants.ONE)){
                jkCabinetLogMapper.update(null,new UpdateWrapper<JkCabinetLog>().lambda()
@@ -558,23 +590,80 @@
                    return jkCabinetGridList;
                }
            }
            //如果是还钥匙 åˆ™ç›´æŽ¥æŸ¥è¯¢å·²å€Ÿå‡ºçš„钥匙的数据
            if(Constants.equalsInteger(dto.getType(),Constants.ONE)){
            jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                    new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
                            .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                            .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                            .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                            .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
                            .leftJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                                .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                            .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                            .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
                            .eq(JkCabinetGrid::getStatus,Constants.ZERO)
                            .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                            .in(Constants.equalsInteger(dto.getType(),Constants.ONE),JkKeys::getStatus,Constants.TWO,Constants.THREE)
                            .in(Constants.equalsInteger(dto.getType(),Constants.ZERO),JkKeys::getStatus,Constants.ONE)
                                .in(JkKeys::getStatus,Constants.TWO,Constants.THREE)
                            .isNotNull(JkCabinetGrid::getKeyId)
                            .apply(" t1.car_id in ( select c.id from  cars c  where c.ISDELETED = 0 and  c.MEMBER_ID = "+dto.getMemberId()+" ) ")
                            .orderByAsc(JkCabinetGrid::getCode)
            );
            }else{
                //判断当前时间是否处于保洁时段内
                String cleanConfig =  systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.CLEAN_TIME).getCode();
                String earlyConfig =  systemDictDataBiz.queryByCode(Constants.CABINET_CONFIG,Constants.EARLY_CONFIG).getCode();
                Boolean isCleanTime = Constants.betweenTimeConfig(cleanConfig);
                List<Integer> girdIdList = new ArrayList<>();
                //查询根据任务可以领取的数据
                jkCabinetGridList = jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                        new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
                                .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                                .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                                .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                                .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
                                .selectAs(CarUseBook::getId,JkCabinetGrid::getCarUseBookId)
                                .select("1",JkCabinetGrid::getGetKeyWay)
                                .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                                .innerJoin(CarUseBook.class,CarUseBook::getCarCode,JkKeys::getCarCode)
                                .innerJoin(Cars.class,Cars::getCode,CarUseBook::getCarCode)
                                .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                                .eq(CarUseBook::getIsdeleted,Constants.ZERO)
                                .eq(Cars::getIsdeleted,Constants.ZERO)
                                .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
                                .eq(JkCabinetGrid::getStatus,Constants.ZERO)
                                .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                                .in(JkKeys::getStatus,Constants.ONE)
                                .eq(JkKeys::getRoleType,Constants.ONE)
                                .isNotNull(JkCabinetGrid::getKeyId)
                                .apply("and NOW() > DATE_SUB(t2.START_TIME, INTERVAL "+earlyConfig+" MINUTE) and now() < t2.end_time and t3.MEMBER_ID = "+dto.getMemberId()+" )")
                );
                if(CollectionUtils.isNotEmpty(jkCabinetGridList)){
                    girdIdList = jkCabinetGridList.stream().map(i->i.getId()).collect(Collectors.toList());
                }
                jkCabinetGridList.addAll(jkCabinetGridMapper.selectJoinList(JkCabinetGrid.class,
                            new MPJLambdaWrapper<JkCabinetGrid>().selectAll(JkCabinetGrid.class)
                                    .selectAs(JkKeys::getRfidLable,JkCabinetGrid::getKeyCode)
                                    .selectAs(JkKeys::getCarCode,JkCabinetGrid::getCarCode)
                                    .selectAs(JkKeys::getCarId,JkCabinetGrid::getCarId)
                                    .selectAs(JkKeys::getStatus,JkCabinetGrid::getKeyStatus)
                                    .select(!isCleanTime?"0":"2",JkCabinetGrid::getGetKeyWay)
                                    .innerJoin(JkKeys.class,JkKeys::getId,JkCabinetGrid::getKeyId)
                                    .eq(JkCabinetGrid::getIsdeleted,Constants.ZERO)
                                    .eq(JkCabinetGrid::getWorkingStatus,Constants.ZERO)
                                    .eq(JkCabinetGrid::getStatus,Constants.ZERO)
                                    .eq(JkCabinetGrid::getCabinetId,dto.getCabinetId())
                                    .eq(!isCleanTime,JkKeys::getRoleType,Constants.ZERO)
                                    .in(JkKeys::getStatus,Constants.ONE)
                                    .isNotNull(JkCabinetGrid::getKeyId)
                                    .notIn(CollectionUtils.isNotEmpty(girdIdList),JkCabinetGrid::getId,jkCabinetGridList)
                                    .apply("t1.car_id in ( select c.id from  cars c  where c.ISDELETED = 0 and  c.MEMBER_ID = "+dto.getMemberId()+" ) ")
                    )
                );
            }
            for (JkCabinetGrid jkCabinetGrid:jkCabinetGridList) {
                jkCabinetGrid.setBindStatus(Objects.isNull(jkCabinetGrid.getKeyId())?Constants.ZERO:Constants.ONE);
                jkCabinetGrid.setKeyStatus(Objects.isNull(jkCabinetGrid.getKeyStatus())?Constants.ZERO:jkCabinetGrid.getKeyStatus());
@@ -607,7 +696,9 @@
        jkCabinetLog.setAuthType(openGridDriverDTO.getAuthType());
        jkCabinetLog.setMemberId(openGridDriverDTO.getMemberId());
        jkCabinetLog.setType(Constants.ZERO);
        jkCabinetLog.setStatus(Constants.ZERO);
        jkCabinetLog.setOpenWay(openGridDriverDTO.getOpenWay());
        jkCabinetLog.setCarUseBookId(openGridDriverDTO.getCarUseBookId());
        jkCabinetLog.setInfo(Objects.isNull(openGridDriverDTO.getOpenType())||Constants.equalsInteger(openGridDriverDTO.getOpenType(),Constants.ZERO)?"系统开启":"手动开启");
        if(Objects.nonNull(jkCabinetGrid.getKeyId())){
            jkCabinetLog.setKeyId(jkCabinetGrid.getKeyId());
@@ -622,9 +713,26 @@
        }
        jkCabinetLog.setIsNotice(Constants.ZERO);
        jkCabinetLogMapper.insert(jkCabinetLog);
    }
    public void pushJDYKeyInfo(JDYKeyUseByBookDTO dto){
        String url = systemDictDataBiz.queryByCode(Constants.JDY_CONFIG,Constants.PUSH_URL_KEYS).getCode();
//        JSONObject object = new JSONObject();
//        object.put("create_date","20251104160000");
//        object.put("start_date",System.currentTimeMillis() );
//        object.put("end_date", System.currentTimeMillis() + 24*3600*1000);
//        object.put("id","10000020251105");//
//        object.put("type",1);//0=领用;1=归还
        log.error("【简道云】推送派车单数据领用与归还信息-请求入参:"+JSONObject.toJSONString(dto));
        String result = HttpsUtil.postJson(url,JSONObject.toJSONString(dto));
        log.error("【简道云】推送派车单数据领用与归还信息-请求结果:"+JSONObject.toJSONString(result));
    }
    @Override
    public void timeOutUnCloseAlarm(TimeOutCloseGridDTO dto){