From 48d2fcc6e04d9fdf61e079d427186338a1816dba Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 13 十一月 2025 11:59:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/maanshan' into maanshan

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java |  111 +++++++++++++++++++++++++++++++++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java          |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java           |   21 ++++++-
 server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java                                 |    9 ++
 server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java                |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java               |   12 +++
 6 files changed, 150 insertions(+), 7 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
index 6213c15..176962f 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -2971,7 +2971,7 @@
 //            Date date1 = getISO8601DateByStr("2024-06-14T08:46:36.014+08:00");
 //            System.out.println(DateUtil.afterMinutesDate(-5));
 
-            System.out.println(DateUtil.getWeekZhouOfDate(getDateFromString2("2025-11-06 00:00:00")));
+            System.out.println(DateUtil.getISO8601DateByStr("2025-11-12T09:13:00.000Z"));
 
 //            System.out.println(getPlusTime2(DateUtil.addMonthToDate(new Date(),-1)));
 //            System.out.println(DateUtil.getBeforMonthStr(new Date(),12));
@@ -3604,6 +3604,13 @@
         return getDayEndTime(cal.getTime());
     }
 
+    public static String getDateStrOfUTCStr(String utcDate){
+        ZonedDateTime utcTime = ZonedDateTime.parse(utcDate,
+                DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX").withZone(ZoneId.of("UTC")));
+        // 杞崲涓哄寳浜椂闂�
+        ZonedDateTime beijingTime = utcTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));
+        return beijingTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
     // 鑾峰彇褰撳ぉ鐨勫紑濮嬫椂闂�
     public static java.util.Date getDayBegin() {
         Calendar cal = new GregorianCalendar();
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
index 6c3d90c..9da656c 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java
@@ -48,7 +48,7 @@
     @PostMapping("/updateDingTalkTokenOrigin")
     public ApiResponse updateDingTalkTokenOrigin() throws Exception {
         dingTalk.updTokenInfo();
-        return ApiResponse.success("寮�鍚畾鏃舵洿鏂板井淇″叕浼楀彿accesstoken鎴愬姛");
+        return ApiResponse.success("瀹氭椂鏇存柊閽夐拤涓氬姟token鎴愬姛");
     }
 
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
index 0ab5635..622c347 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java
@@ -16,10 +16,12 @@
 import com.doumee.core.utils.FtpUtil;
 import com.doumee.core.utils.HttpsUtil;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
+import com.doumee.dao.business.model.CarUseBook;
 import com.doumee.dao.business.model.Cars;
 import com.doumee.dao.business.model.JkCabinetLog;
 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.third.model.ApiResponse;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
@@ -62,11 +64,19 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private CarUseBookService carUseBookService;
+
+    @LoginNoRequired
     @ApiOperation("绠�閬撲簯鎺ㄩ�佺敤杞︾敵璇�")
     @PostMapping("/pushCarApply")
     public void pushCarApply (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":"鐨朎U2866","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":"鐨朎U2866","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":"鐨朎U2866","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();
@@ -81,7 +91,7 @@
             Map<String, String> parameterMap = parseParameter(request.getQueryString());
             String nonce = parameterMap.get("nonce");
             String timestamp = parameterMap.get("timestamp");
-            String signature = getSignature(nonce, payload, SECRET, timestamp);
+            String signature = getSignature(nonce, payload, LOCAl_SECRET, timestamp);
             log.error("绠�閬撲簯=========nonce锛�"+nonce);
             log.error("绠�閬撲簯=========timestamp锛�"+timestamp);
             log.error("绠�閬撲簯=========payload锛�"+payload);
@@ -93,6 +103,9 @@
                 response.getWriter().close();;
                 return ;
             }
+
+            carUseBookService.jdyPushCarUseBook(payload);
+
             response.setStatus(200);
             response.getWriter().write("success");
             response.getWriter().close();
@@ -113,6 +126,8 @@
     }
 
     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);
     }
@@ -134,8 +149,8 @@
         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);
+        object.put("id","10000020251105");//
+        object.put("type",1);//0=棰嗙敤锛�1=褰掕繕
         String result = HttpsUtil.postJson(url,JSONObject.toJSONString(object));
         System.out.println(result);
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
index cc1f7cd..9c9270e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -115,9 +115,14 @@
     private String cancelInfo;
 
     @ApiModelProperty(value = "鐩殑鍦扮被鍨� 0甯傚唴鐢ㄨ溅 1甯傚鐢ㄨ溅", example = "1")
-    //@ExcelColumn(name="鐩殑鍦扮被鍨� 0甯傚唴鐢ㄨ溅 1甯傚鐢ㄨ溅")
-    @ExcelColumn(name="鐩殑鍦扮被鍨�",index =8,width = 5,valueMapping = "0=甯傚唴鐢ㄨ溅;1=甯傚鐢ㄨ溅")
+    //@ExcelColumn(name="鐩殑鍦扮被鍨� 0甯傚唴鐢ㄨ溅 1甯傚鐢ㄨ溅") 
     private Integer type;
+
+
+    @ApiModelProperty(value = "鐩殑鍦扮被鍨嬫弿杩�", example = "1")
+    //@ExcelColumn(name="鐩殑鍦扮被鍨� 0甯傚唴鐢ㄨ溅 1甯傚鐢ㄨ溅")
+    @ExcelColumn(name="鐩殑鍦扮被鍨�",index =8,width = 5)
+    private String typeInfo;
 
     @ApiModelProperty(value = "涔樿溅浜虹紪鐮侀泦鍚堬紝澶氫釜鑻辨枃閫楀彿闅斿紑", example = "1")
     //@ExcelColumn(name="涔樿溅浜虹紪鐮侀泦鍚堬紝澶氫釜鑻辨枃閫楀彿闅斿紑")
@@ -151,6 +156,9 @@
     @ApiModelProperty(value = "閽夐拤寰呭姙浠诲姟褰掑睘浜轰富閿�")
     private String ddBelongToUnionId;
 
+    @ApiModelProperty(value = "绠�閬撲簯涓氬姟涓婚敭")
+    private String jdyId;
+
     @ApiModelProperty(value = "鍙告満濮撳悕", example = "1")
     @TableField(exist = false)
     private String driverName;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
index bc5f3aa..a4c1537 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
@@ -105,4 +105,6 @@
     List<DateIntervalVO> checkDateUse(Integer cars, String dateDay);
 
     void revoke(Integer id, String info, LoginUserInfo loginUserInfo);
+
+    void jdyPushCarUseBook(String dataInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index e4fcb35..b81ac6f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
@@ -44,9 +45,11 @@
 
 import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.Date;
+import java.util.stream.Collectors;
 
 /**
  * 杞﹁締_鐢ㄨ溅鐢宠淇℃伅琛⊿ervice瀹炵幇
@@ -642,4 +645,112 @@
     }
 
 
+    @Override
+    public void jdyPushCarUseBook(String dataInfo){
+        JSONObject dataInfoJSON = JSONObject.parseObject(dataInfo);
+        if(dataInfoJSON.isEmpty()){
+            return;
+        }
+        String op = dataInfoJSON.getString("op");
+        //鍒犻櫎锛歞ata_remove 鏂板锛歞ata_add 淇敼锛歞ata_update
+        if(StringUtils.isEmpty(op)){
+            return;
+        }
+
+        JSONObject dataJSON = dataInfoJSON.getJSONObject("data");
+        String no = dataJSON.getString("no");
+        if(StringUtils.isEmpty(no)){
+            return;
+        }
+        if(op.equals("data_remove")){
+            carUseBookJoinMapper.update(new UpdateWrapper<CarUseBook>().lambda()
+                            .set(CarUseBook::getEditDate,DateUtil.getCurrDateTime())
+                    .set(CarUseBook::getIsdeleted,Constants.ONE).eq(CarUseBook::getJdyId,no));
+            return;
+        }
+        Integer status = dataJSON.getInteger("flowState");
+        if(Objects.isNull(status)||!(Constants.equalsInteger(status,Constants.ONE)||Constants.equalsInteger(status,Constants.TWO))){
+            return;
+        }
+
+        String carCode = dataJSON.getString("car_no");
+        String startDate = dataJSON.getString("start_date");
+        String endDate = dataJSON.getString("end_date");
+        String typeInfo =   dataJSON.getString("scope");
+        String reason =   dataJSON.getString("reason");
+        String addr =   dataJSON.getString("addr");
+
+        CarUseBook carUseBook = carUseBookJoinMapper.selectOne(new QueryWrapper<CarUseBook>()
+                .lambda().eq(CarUseBook::getJdyId,no).last("limit 1"));
+        if(Objects.isNull(carUseBook)){
+            carUseBook = new CarUseBook();
+            carUseBook.setCreateDate(new Date());
+            carUseBook.setEditDate(new Date());
+            carUseBook.setJdyId(no);
+        }else{
+            carUseBook.setEditDate(new Date());
+        }
+        carUseBook.setIsdeleted(Constants.equalsInteger(status,Constants.ONE)?Constants.ZERO:Constants.ONE);
+        carUseBook.setCarCode(StringUtils.isBlank(carCode)?null:carCode);
+        if(StringUtils.isNotBlank(carCode)){
+            Cars cars = carsMapper.selectOne(new QueryWrapper<Cars>().lambda()
+                    .eq(Cars::getIsdeleted,Constants.ZERO)
+                    .eq(Cars::getCode,carCode).last("limit 1"));
+            carUseBook.setCarId(Objects.nonNull(cars)?cars.getId():null);
+        }
+        carUseBook.setStartTime(StringUtils.isBlank(startDate)?null:DateUtil.getISO8601DateByStr(startDate));
+        carUseBook.setEndTime(StringUtils.isBlank(endDate)?null:DateUtil.getISO8601DateByStr(endDate));
+        carUseBook.setTypeInfo(StringUtils.isBlank(typeInfo)?null:typeInfo);
+        carUseBook.setContent(StringUtils.isBlank(typeInfo)?null:reason);
+        carUseBook.setAddr(StringUtils.isBlank(typeInfo)?null:addr);
+        carUseBook.setStatus(Constants.TWO);
+        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)){
+                    carUseBook.setDriverId(driverMember.getId());
+                }
+            }
+        }
+        JSONObject createJSON = dataJSON.getJSONObject("creator");
+        if(!driverJSON.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)){
+                    carUseBook.setMemberId(createMember.getId());
+                }
+            }
+        }
+
+        JSONArray usersArray =   dataJSON.getJSONArray("users");
+        if(!usersArray.isEmpty()){
+            String names = "";
+            List<String> userDDIdList = new ArrayList<>();
+            for (int i = 0; i < usersArray.size(); i++) {
+                JSONObject userJSON = usersArray.getJSONObject(i);
+                String name = createJSON.getString("name");
+                String userName = createJSON.getString("username");
+                userDDIdList.add(userName);
+                names = names +
+                        (StringUtils.isNotBlank(names)?",":"")
+                        + name;
+            }
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(userDDIdList)){
+                List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getDdId,userDDIdList));
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+                    names = String.join(",",memberList.stream().map(i->i.getName()).collect(Collectors.toList()));
+                    carUseBook.setMemberIds(String.join(",",memberList.stream().map(i->i.getId().toString()).collect(Collectors.toList())));
+                }
+            }
+            carUseBook.setMemberNames(names);
+        }
+        carUseBookMapper.insertOrUpdate(carUseBook);
+    }
+    
+    
 }

--
Gitblit v1.9.3