doum
11 小时以前 48d2fcc6e04d9fdf61e079d427186338a1816dba
Merge remote-tracking branch 'origin/maanshan' into maanshan
已修改6个文件
155 ■■■■■ 文件已修改
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/DingTalkTokenTimerController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/JiandaoyunCloudController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
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成功");
    }
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":"皖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}
        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);
    }
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -116,8 +116,13 @@
    @ApiModelProperty(value = "目的地类型 0市内用车 1市外用车", example = "1")
    //@ExcelColumn(name="目的地类型 0市内用车 1市外用车")
    @ExcelColumn(name="目的地类型",index =8,width = 5,valueMapping = "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;
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);
}
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;
/**
 * 车辆_用车申请信息表Service实现
@@ -642,4 +645,112 @@
    }
    @Override
    public void jdyPushCarUseBook(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("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);
    }
}