111
k94314517
2025-02-21 3139292bd5e958ec735778a9ecc4b4fdef814fa8
111
已修改13个文件
172 ■■■■ 文件已修改
server/platform/src/main/java/com/doumee/task/ScheduleTool.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/BikesService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/SitesService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/api/web/BusinessApi.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -68,8 +68,11 @@
        //前一天的數據
        Date ydate = DateUtil.addDaysToDate(new Date(), -1);
        wxBillService.getWxBill(ydate);
    }
    /**
     * 測試
     * @throws Exception
@@ -172,4 +175,12 @@
    }
    @Scheduled(fixedDelay = 1000L * 60L )
    public void autCancelGoodsOrder(){
        log.info("=====================开始 自動取消未支付订单状态=======================");
        goodsorderService.autoCancelRefunOrder();;
        log.info("=====================结束 自動取消未支付订单状态=======================");
    }
}
server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java
@@ -68,4 +68,9 @@
    @ApiModelProperty(value = "热销套餐")
    private List<Discount> discountList;
    @ApiModelProperty(value = "电车运营区域")
    private String eleBusinessArea;
}
server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java
@@ -72,6 +72,9 @@
    @ApiModelProperty(value = "骑行记录主键")
    private String rideId;
    @ApiModelProperty(value = "车辆类型")
    private String bikeTypeName;
    @ApiModelProperty(value = "套餐卡信息")
    private DiscountMember discountMember;
server/services/src/main/java/com/doumee/service/business/BikesService.java
@@ -100,4 +100,6 @@
    PageData<Bikes> findJoinPage(PageWrap<Bikes> pageWrap);
    void updateByJtt( Bikes m);
    List<Bikes> getEleBikes();
}
server/services/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -5,6 +5,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Bikes;
import com.doumee.dao.business.model.DiscountMember;
import com.doumee.dao.business.model.Goodsorder;
import com.doumee.dao.business.model.MemberRides;
import com.doumee.dao.business.vo.GoodsorderExportVO;
@@ -208,4 +209,5 @@
    void autoCancelRefunOrder();
    DiscountMember getUseDiscount(String memberId, Integer driveTime);
}
server/services/src/main/java/com/doumee/service/business/SitesService.java
@@ -118,4 +118,6 @@
    void dealSiteLocks(Sites sites);
    List<Sites> getSiteList(Integer type);
}
server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java
@@ -423,4 +423,18 @@
        bike.setType(Constants.ONE);//只能新增电车数据
        return  bike;
    }
    @Override
    public List<Bikes> getEleBikes() {
        return bikesMapper.selectList(new QueryWrapper<Bikes>()
                .lambda().eq(Bikes::getIsdeleted,Constants.ZERO)
                .eq(Bikes::getType,Constants.ONE)
                .eq(Bikes::getStatus,Constants.ZERO)
                .isNotNull(Bikes::getLatitude)
                .isNotNull(Bikes::getLongitude)
        );
    }
}
server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -375,6 +375,7 @@
        homeResponse.setIsStopServe(this.checkTemporaryStop()?1:0);
        homeResponse.setIsBusiness(this.checkBusiness()?0:1);
        homeResponse.setUnBusinessTips("营业时间为"+ systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_STARTTIME).getCode() +" ~ "+systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.BUSINESS_ENDTIME).getCode()+",请在营业时间内使用本系统");
        homeResponse.setEleBusinessArea(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.PARK_LAT_LNG_LIST).getCode());
        homeResponse.setAdList(adMapper.selectList(new QueryWrapper<Ad>()
                .eq("isdeleted",Constants.ZERO)
@@ -404,6 +405,7 @@
        Goodsorder goodsorder = this.goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>()
                .eq("member_id",memberId)
                .eq("status",Constants.goodsorderStatus.pay)
                .eq("type",0)
                .last(" limit 1 "));
        homeResponse.setDepositStatus(Constants.ZERO);
        if(goodsorder!=null){
@@ -672,6 +674,7 @@
        update.setCloseDate(new Date());
        update.setCloseInfo(Constants.REFUND_TYPE.get(type).getInfo());
        update.setCloseUserId(goodsorder.getEditor());
        update.setType(Constants.ZERO);
        if(Constants.REFUND_TYPE.PLAT_FORCE.getKey() == type){
            //如果是强制结算
            update.setCloseType(Constants.ONE);
@@ -832,7 +835,6 @@
            if(discountMember.getSurplusTime() >= durationSum){
                discountLog.setRideTime(durationSum);
                discountLog.setRidePrice(closeMoney);
                discountLogMapper.insert(discountLog);
                topRides.setActualPrice(BigDecimal.ZERO);
                closeMoney = BigDecimal.ZERO;
            }else{
@@ -1118,6 +1120,7 @@
        qry.setStatus(Constants.goodsorderStatus.pay);
        qry.setMemberId(memberId);
        qry.setIsdeleted(Constants.ZERO);
        qry.setType(Constants.ZERO);
        if(goodsorderMapper.selectCount(new QueryWrapper<>(qry))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"已支付过定金,无法重复该操作");
        }
@@ -1512,6 +1515,7 @@
     * 获取当前可使用的套餐
     * @param memberId
     */
    @Override
    public DiscountMember getUseDiscount(String memberId,Integer driveTime){
        String today = DateUtil.getToday();
        //判断今天是否为节假日
@@ -1522,12 +1526,12 @@
        Integer holiday = holidaysMapper.selectCount(new QueryWrapper<>(holidays))>0?1:0;
        List<DiscountMember> discountMemberList = discountMemberMapper.selectJoinList(DiscountMember.class,new MPJLambdaWrapper<DiscountMember>()
                .selectAll(DiscountMember.class)
                .select(" select sum(d.ride_time) from discount_log d  where and d.discount_member_id = discount_member.id " +
                        "and  d.isdeleted = 0 and  d.type = 0 and   EXTRACT(DAY FROM d.create_date) = EXTRACT(DAY FROM CURRENT_DATE) " , DiscountMember::getUseTime)//查询今日已使用时间
                .select(" ( select sum(d.ride_time) from discount_log d  where  d.discount_member_id = t.id " +
                        "and  d.isdeleted = 0 and  d.type = 0 and   EXTRACT(DAY FROM d.create_date) = EXTRACT(DAY FROM CURRENT_DATE) ) " , DiscountMember::getUseTime)//查询今日已使用时间
                .eq(DiscountMember::getStatus,Constants.ZERO)
                .eq(DiscountMember::getMemberId,memberId)
                .ge(DiscountMember::getUseStartDate, Utils.Date.getStart(DateUtil.stringToDate(today,"yyyy-MM-dd")))
                .le(DiscountMember::getUseEndDate, Utils.Date.getEnd(DateUtil.stringToDate(today,"yyyy-MM-dd")))
                .le(DiscountMember::getUseStartDate, Utils.Date.getStart(DateUtil.stringToDate(today,"yyyy-MM-dd")))
                .ge(DiscountMember::getUseEndDate, Utils.Date.getEnd(DateUtil.stringToDate(today,"yyyy-MM-dd")))
                .eq(Constants.equalsInteger(holiday,Constants.ONE),DiscountMember::getUseHoliday,Constants.ONE)
                .orderByDesc(DiscountMember::getLimitType)
                .orderByDesc(DiscountMember::getLimitTime)
@@ -1579,4 +1583,14 @@
    }
    public void autCancel(){
        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
                .set(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CANCEL.getKey())
                    .set(Goodsorder::getEditDate,DateUtil.getCurrDateTime())
                .eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.UN_PAY.getKey())
                .apply(" NOW() >= create_date  + INTERVAL '30 min'  ")
        );
    }
}
server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -497,6 +497,7 @@
            Goodsorder goodsorder = goodsorderService.findOneByWrapper(new QueryWrapper<Goodsorder>()
                    .eq("isdeleted", Constants.ZERO)
                    .eq("status", Constants.goodsorderStatus.pay)
                    .eq("type", Constants.ZERO)
                    .eq("member_id", memberId)
                    .orderByDesc("create_date")
                    .last("limit 1"));
@@ -708,8 +709,9 @@
        }
        Integer bikeType = Constants.ZERO;
        //根据前缀区分是否为电车二维码
        if(code.startsWith(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.ELECTRICITY_PREFIX).getCode())){
        if(code.startsWith(Constants.EBIKE_PREFIX)){
            bikeType = Constants.ONE;
            code = code.replaceFirst(Constants.EBIKE_PREFIX,"");
        }
        MemberRidesResponse memberRidesResponse = new MemberRidesResponse();
        Bikes bike= new Bikes();
@@ -768,9 +770,10 @@
        if(Objects.isNull(baseParam)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"当前车辆类型无法租赁,请联系管理员!");
        }
        memberRidesResponse.setBikeCode(bike.getCode());
        memberRidesResponse.setBikeTypeName(baseParam.getName());
        MemberRides memberRides = new MemberRides();
        this.dealMemberRidesData(baseParam.getId(),memberRides);
        memberRidesResponse.setBikeCode(memberRides.getBikeCode());
        memberRidesResponse.setBasePrice(memberRides.getBasePrice());
        memberRidesResponse.setBaseTime(memberRides.getBaseTime());
        memberRidesResponse.setUnitTime(memberRides.getUnitTime());
@@ -779,6 +782,8 @@
                memberRidesResponse.getBasePrice(),memberRidesResponse.getBaseTime(),
                memberRidesResponse.getUnitPrice()
                ,memberRidesResponse.getUnitTime()));
        //查询当前的骑行套餐
        memberRidesResponse.setDiscountMember(goodsorderService.getUseDiscount(memberId,Constants.ZERO));
        return memberRidesResponse;
    }
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
@@ -349,7 +349,14 @@
                    }
                }
        }
    }
    @Override
    public List<Sites> getSiteList(Integer type){
        return sitesMapper.selectList(new QueryWrapper<Sites>().lambda()
                .eq(Sites::getIsdeleted,Constants.ZERO)
                .eq(Sites::getStatus,Constants.ZERO)
                .eq(Objects.nonNull(type),Sites::getType,type));
    }
}
server/services/src/main/resources/application-dev.yml
@@ -50,8 +50,8 @@
    apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT
    serialNumer: 368B835A194384FD583B83B77977B84127D2F655
    mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S
    notifyUrl: http://xiaopiqiu2.natapp1.cc/api/wxPayNotify
    refundNotifyUrl: http://xiaopiqiu2.natapp1.cc/api/wxRefundNotify
    notifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxPayNotify
    refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify
#    notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify
    keyPath: D://apiclient_cert.p12
    privateCertPath: D://apiclient_cert.pem
server/web/src/main/java/com/doumee/api/web/BusinessApi.java
@@ -73,6 +73,12 @@
    @Autowired
    private DiscountService discountService;
    @Autowired
    private SitesService  sitesService;
    @Autowired
    private BikesService bikesService;
    @PreventRepeat
    @LoginRequired
    @ApiOperation(value = "押金支付", notes = "小程序端")
@@ -93,7 +99,7 @@
            @ApiImplicitParam(paramType = "query", dataType = "String", name = "discountId", value = "套餐主键", required = true)
    })
    public ApiResponse<Object> createDiscountOrderPay(@RequestParam String discountId) {
        return  ApiResponse.success("操作成功",goodsorderService.createDiscountOrderPay(discountId,getMemberId()));
        return  ApiResponse.success("操作成功",goodsorderService.createDiscountOrderPay(getMemberId(),discountId));
    }
@@ -120,6 +126,38 @@
        rentSite.setIsdeleted(Constants.ZERO);
        rentSite.setStatus(Constants.ZERO);
        return  ApiResponse.success("查询成功",rentSiteService.findList(rentSite));
    }
    @LoginRequired
    @ApiOperation(value = "电动车站点列表", notes = "小程序端")
    @GetMapping("/eleSiteList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<Sites>> eleSiteList() {
        return  ApiResponse.success("查询成功",sitesService.getSiteList(Constants.ONE));
    }
    @LoginRequired
    @ApiOperation(value = "查询所有电动车信息", notes = "小程序端")
    @GetMapping("/eleBikeList")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<List<Bikes>> eleBikeList() {
        return  ApiResponse.success("查询成功",bikesService.getEleBikes());
    }
    @LoginRequired
    @ApiOperation(value = "获取电动车运营区域", notes = "小程序端")
    @GetMapping("/getEleBusinessArea")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true)
    })
    public ApiResponse<String> getEleBusinessArea() {
        return  ApiResponse.success("查询成功",systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.PARK_LAT_LNG_LIST).getCode());
    }
    @LoginRequired
@@ -260,6 +298,9 @@
    @LoginRequired
    @ApiOperation(value = "电车站点还车", notes = "电车站点还车")
    @PostMapping("/backElecBike")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse backElecBike(@RequestBody BackElecBikeRequest param) {
        param.setMemberId(getMemberId());
        jtt808Service.backElecBike(param);
@@ -269,6 +310,9 @@
    @LoginRequired
    @ApiOperation(value = "电车临时停车", notes = "电车临时停车")
    @PostMapping("/pauseElecBike")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse pauseElecBike(@RequestBody BackElecBikeRequest param) {
        param.setMemberId(getMemberId());
        jtt808Service.pauseElecBike(param);
@@ -279,6 +323,9 @@
    @LoginRequired
    @ApiOperation(value = "电车开锁", notes = "电车开锁")
    @PostMapping("/openElecBike")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse openElecBike(@RequestBody OpenElecBikeRequest param) {
        param.setMemberId(getMemberId());
        jtt808Service.openLock(param);
@@ -288,6 +335,9 @@
    @LoginRequired
    @ApiOperation(value = "临停开锁", notes = "临停开锁")
    @PostMapping("/pauseOpenElecBike")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "用户token值", required = true),
    })
    public ApiResponse pauseOpenElecBike(@RequestBody BackElecBikeRequest param) {
        param.setMemberId(getMemberId());
        jtt808Service.pauseOpenElecBike(param);
server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java
@@ -111,6 +111,7 @@
        Goodsorder gparam = new Goodsorder();
        gparam.setMemberId(param.getMemberId());
        gparam.setStatus(Constants.goodsorderStatus.pay);
        gparam.setType(Constants.ZERO);
        Goodsorder goodsorder =  goodsorderService.findOne(gparam);
        if(Objects.isNull(goodsorder)){
            throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"无骑行订单记录");
@@ -126,16 +127,21 @@
                if(Constants.equalsInteger(rides.getStatus(),Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey())
                        &&Constants.equalsInteger(rides.getType(),Constants.ONE)){
                    //如果是电车并且是骑行中 进行关锁处理
                    Bikes  bike = getElecBikeByCode(rides.getBikeCode());
                    //查询停车站点信息
                    if(bike.getSiteId() ==null){
                        throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,请按要求前往停车点停车!");
                    }
                    lockBikes(bike.getDeviceSn(),Constants.ZERO);//发起关锁指令请求
//                    Bikes  bike = getElecBikeByCode(rides.getBikeCode());
//                    //查询停车站点信息
//                    if(bike.getSiteId() ==null){
//                        throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,请按要求前往停车点停车!");
//                    }
//                    lockBikes(bike.getDeviceSn(),Constants.ZERO);//发起关锁指令请求
                    backIds.add(rides.getId());
                    rides.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey());//已还车
                    rides.setBackSiteId(bike.getSiteId());//还车站点
//                    rides.setBackSiteId(bike.getSiteId());//还车站点
                    rides.setBackDate(new Date());
                    Integer freeRentTime = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode());
                    Integer rideTime = DateUtil.betweenMin(rides.getRentDate(), rides.getBackDate());
                    //计算骑行计费时长
                    rides.setDuration( rideTime > freeRentTime  ? rideTime : 0 );
                    rides.setEditDate(rides.getBackDate());
                    memberRidesJoinMapper.updateById(rides);//更新骑行状态为已还车
                }
@@ -250,9 +256,9 @@
        if(memberRides ==null || memberRides.getBikeCode() == null){
            throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"对不起,未查询到您当前有骑行中记录");
        }
        Bikes bike = getElecBikeByCode(memberRides.getBikeCode());
        //查询停车位置是否符合停车位置规范
        checkPausePostionBiz(bike);
//        Bikes bike = getElecBikeByCode(memberRides.getBikeCode());
//        //查询停车位置是否符合停车位置规范
//        checkPausePostionBiz(bike);
        memberRides.setPauseDate(new Date());
        memberRides.setEditDate(memberRides.getBackDate());
        memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey());
@@ -373,6 +379,7 @@
            Goodsorder goodsorder = goodsorderService.findOneByWrapper(new QueryWrapper<Goodsorder>()
                    .eq("isdeleted", Constants.ZERO)
                    .eq("status", Constants.goodsorderStatus.pay)
                    .eq("type", Constants.ZERO)
                    .eq("member_id", member.getId())
                    .orderByDesc("create_date")
                    .last("limit 1"));
@@ -397,7 +404,7 @@
            //根据车型查询计价方案
            isValidePricingType(bike,memberRides) ;
            MemberRidesDetailResponse memberRidesDetailResponse = new MemberRidesDetailResponse();
            this.lockBikes(bike.getDeviceSn(),1);
//            this.lockBikes(bike.getDeviceSn(),1);
            //存储骑行记录
            memberRides.setId(Constants.getUUID());
            memberRides.setIsdeleted(Constants.ZERO);
@@ -406,7 +413,7 @@
            memberRides.setOrdreId(goodsorder.getId());
            memberRides.setBikeCode(bike.getCode());
            memberRides.setRentDate(new Date());
            memberRides.setType(Constants.ZERO);
            memberRides.setType(Constants.ONE);
            memberRides.setBalance(new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.RENT_DEPOSIT).getCode()));
            memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey());
            memberRides.setCloseStatus(Constants.ZERO);