Browse Source

包租协议抵用

guoshuai 1 week ago
parent
commit
75ec4e0dac

+ 6 - 0
src/main/java/com/qmrb/system/pojo/entity/BarnRecord.java

@@ -112,4 +112,10 @@ public class BarnRecord extends BaseEntity {
      */
     @TableField("discount_amount")
     private BigDecimal discountAmount;
+    
+    /**
+     * 抵扣时长
+     */
+    @TableField("discount_minute")
+    private BigDecimal discountMinute;
 }

+ 3 - 1
src/main/java/com/qmrb/system/service/IContractPlaceNumberRelService.java

@@ -10,6 +10,8 @@ import com.qmrb.system.pojo.query.ContractPlaceNumberRelQuery;
 import com.baomidou.mybatisplus.extension.service.IService;
 import jakarta.validation.Valid;
 
+import java.util.Map;
+
 /**
  * <p>
  * 协议(客商)车牌关系 服务类
@@ -45,5 +47,5 @@ public interface IContractPlaceNumberRelService extends IService<ContractPlaceNu
 	 * @param barnRecord
 	 * @return
 	 */
-    Double getDenomination(BarnRecord barnRecord);
+	Map<String,Object> getDenomination(Long recordId);
 }

+ 26 - 25
src/main/java/com/qmrb/system/service/impl/BarnRecordServiceImpl.java

@@ -165,6 +165,18 @@ public class BarnRecordServiceImpl extends ServiceImpl<BarnRecordMapper, BarnRec
                 record.setParkingTime(calculateTimeDifference(record.getBillingStartTime(), record.getOutTime()));
             } else {
                 record.setParkingTime(calculateTimeDifference(record.getBillingStartTime(), new Date()));
+                // 查询优惠券
+                List<Coupon> coupons = couponMapper.selectList(new LambdaQueryWrapper<Coupon>().eq(Coupon::getGoodsId, record.getId()));
+                log.info("查询优惠券:{}",coupons.size());
+                if(CollectionUtil.isNotEmpty(coupons)){
+                    Coupon coupon = coupons.get(0);
+                    // 1 扫码抵用金额 2扫码抵用时长
+                    if(1 == coupon.getCouponType()){
+                        record.setDiscountAmount(coupon.getDenomination());
+                    }else if(2 == coupon.getCouponType()){
+                        record.setDiscountMinute(coupon.getDenomination());
+                    }
+                }
             }
 
             if(queryParams.getIsMonthlyCardMode() != null){
@@ -182,19 +194,7 @@ public class BarnRecordServiceImpl extends ServiceImpl<BarnRecordMapper, BarnRec
             }else{
                 record.setBillingAmount(record.getReceivedAmount());
             }
-
-            // 查询优惠券
-            List<Coupon> coupons = couponMapper.selectList(new LambdaQueryWrapper<Coupon>().eq(Coupon::getGoodsId, record.getId()));
-            log.info("查询优惠券:{}",coupons.size());
-            if(CollectionUtil.isNotEmpty(coupons)){
-                Coupon coupon = coupons.get(0);
-                // 1 扫码抵用金额 2扫码抵用时长
-                if(1 == coupon.getCouponType()){
-                    record.setDiscountAmount(coupon.getDenomination());
-                }else if(2 == coupon.getCouponType()){
-                    record.setDiscountMinute(coupon.getDenomination());
-                }
-            }
+            
             
             
             if(queryParams.getIsMonthlyCardMode() != null && queryParams.getIsMonthlyCardMode()){
@@ -273,6 +273,18 @@ public class BarnRecordServiceImpl extends ServiceImpl<BarnRecordMapper, BarnRec
             form.setParkingTime(calculateTimeDifference(form.getBillingStartTime(), form.getOutTime()));
         } else {
             form.setParkingTime(calculateTimeDifference(form.getBillingStartTime(), new Date()));
+            // 查询优惠券
+            List<Coupon> coupons = couponMapper.selectList(new LambdaQueryWrapper<Coupon>().eq(Coupon::getGoodsId, form.getId()));
+            log.info("查询优惠券:{}",coupons.size());
+            if(CollectionUtil.isNotEmpty(coupons)){
+                Coupon coupon = coupons.get(0);
+                // 1 扫码抵用金额 2扫码抵用时长
+                if(1 == coupon.getCouponType()){
+                    form.setDiscountAmount(coupon.getDenomination());
+                }else if(2 == coupon.getCouponType()){
+                    form.setDiscountMinute(coupon.getDenomination());
+                }
+            }
         }
         
 
@@ -301,18 +313,7 @@ public class BarnRecordServiceImpl extends ServiceImpl<BarnRecordMapper, BarnRec
             form.setBillingAmount(form.getReceivedAmount());//计费金额
         }
 
-        // 查询优惠券
-        List<Coupon> coupons = couponMapper.selectList(new LambdaQueryWrapper<Coupon>().eq(Coupon::getGoodsId, form.getId()));
-        log.info("查询优惠券:{}",coupons.size());
-        if(CollectionUtil.isNotEmpty(coupons)){
-            Coupon coupon = coupons.get(0);
-            // 1 扫码抵用金额 2扫码抵用时长
-            if(1 == coupon.getCouponType()){
-                form.setDiscountAmount(coupon.getDenomination());
-            }else if(2 == coupon.getCouponType()){
-                form.setDiscountMinute(coupon.getDenomination());
-            }
-        }
+        
         return form;
     }
 

+ 8 - 1
src/main/java/com/qmrb/system/service/impl/CarParkChargingRulesServiceImpl.java

@@ -292,7 +292,14 @@ public class CarParkChargingRulesServiceImpl extends ServiceImpl<CarParkCharging
 				parkingRecord.couponRecord = couponRecord;
 			}else{
 				// 判断是否否存在包租协议
-				Double denomination = contractPlaceNumberRelService.getDenomination(barnRecord);
+				Map<String,Object> map = contractPlaceNumberRelService.getDenomination(recordId);
+				if(CollectionUtil.isNotEmpty(map)){
+					ParkingFeeCalculator.CouponRecord couponRecord = new ParkingFeeCalculator.CouponRecord();
+					couponRecord.denomination = (Double) map.get("denomination");
+					couponRecord.expireTime = (LocalDateTime) map.get("expireTime");
+					couponRecord.couponType = "2";
+					parkingRecord.couponRecord = couponRecord;
+				}
 			}
 		}
 		if(CollectionUtil.isNotEmpty(orderList)){

+ 33 - 10
src/main/java/com/qmrb/system/service/impl/ContractPlaceNumberRelServiceImpl.java

@@ -2,12 +2,16 @@ package com.qmrb.system.service.impl;
 
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qmrb.system.common.result.PageResult;
 import com.qmrb.system.converter.ContractPlaceNumberRelConverter;
 import com.qmrb.system.framework.security.util.SecurityUtils;
+import com.qmrb.system.mapper.BarnRecordMapper;
 import com.qmrb.system.pojo.entity.*;
 import com.qmrb.system.pojo.entity.ContractPlaceNumberRel;
 import com.qmrb.system.pojo.form.ContractPlaceNumberRelForm;
@@ -34,7 +38,9 @@ import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -52,6 +58,9 @@ public class ContractPlaceNumberRelServiceImpl extends ServiceImpl<ContractPlace
 
     @Autowired
     SysUserService userService;
+    
+    @Autowired
+    BarnRecordMapper barnRecordMapper;
 
     @Autowired
     IContractService contractService;
@@ -219,26 +228,40 @@ public class ContractPlaceNumberRelServiceImpl extends ServiceImpl<ContractPlace
     }
 
     @Override
-    public Double getDenomination(BarnRecord barnRecord) {
+    public Map<String,Object> getDenomination(Long recordId) {
+        BarnRecord barnRecord = barnRecordMapper.selectById(recordId);
+        if(barnRecord == null || barnRecord.getOutTime() != null){
+            return  null;
+        }
         // 将 Date 转换为 Instant
         Instant instant = barnRecord.getInTime().toInstant();
 
         // 将 Instant 转换为 LocalDateTime(假设使用系统默认时区)
         LocalDateTime inDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
-        // 将 Date 转换为 Instant
-        Instant outInstant = barnRecord.getInTime().toInstant();
-
-        // 将 Instant 转换为 LocalDateTime(假设使用系统默认时区)
-        LocalDateTime outDateTime = outInstant.atZone(ZoneId.systemDefault()).toLocalDateTime();
+        
         LambdaQueryWrapper<ContractPlaceNumberRel> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ContractPlaceNumberRel::getPlateNumber,barnRecord.getPlaceNo());
         queryWrapper.eq(ContractPlaceNumberRel::getStatus,"1");//0停用1启用 2到期
         
-        if(barnRecord.getOutTime() != null){
-            // 出场时间在开始日之后,结束日之前
-            
+        //当前时间应大于包租协议开始日,小于结束日
+        LocalDateTime now = LocalDateTime.now();
+        queryWrapper.lt(ContractPlaceNumberRel::getEndTime,inDateTime);//0停用1启用 2到期
+        queryWrapper.gt(ContractPlaceNumberRel::getStartTime,now);//0停用1启用 2到期
+        List<ContractPlaceNumberRel> list = this.list(queryWrapper);
+        if(CollectionUtil.isNotEmpty(list)){
+            ContractPlaceNumberRel contractPlaceNumberRel = list.get(0);
+            long between = DateUtil.between(contractPlaceNumberRel.getStartTime(), contractPlaceNumberRel.getEndTime(), DateUnit.MINUTE);
+            HashMap<String, Object> map = new HashMap<>();
+
+            // 将 Date 转换为 Instant
+            Instant endTimeinstant = contractPlaceNumberRel.getEndTime().toInstant();
+
+            // 将 Instant 转换为 LocalDateTime(假设使用系统默认时区)
+            LocalDateTime endTime = endTimeinstant.atZone(ZoneId.systemDefault()).toLocalDateTime();
+            map.put("denomination",Double.valueOf(between));
+            map.put("expireTime",endTime);
+            return map;
         }
-        // this.list()
         return null;
     }
 

+ 33 - 8
src/main/java/com/qmrb/system/service/impl/OrderServiceImpl.java

@@ -19,12 +19,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.qmrb.parking.fee.ParkingFeeCalculator;
 import com.qmrb.system.converter.PayOrderConverter;
+import com.qmrb.system.mapper.CouponMapper;
 import com.qmrb.system.mapper.OrderMapper;
-import com.qmrb.system.pojo.entity.CarPark;
-import com.qmrb.system.pojo.entity.ContractPlaceNumberRel;
-import com.qmrb.system.pojo.entity.Order;
-import com.qmrb.system.pojo.entity.ToolWxConfig;
+import com.qmrb.system.pojo.entity.*;
 import com.qmrb.system.pojo.form.BarnRecordForm;
 import com.qmrb.system.pojo.form.PayOrderForm;
 import com.qmrb.system.pojo.query.PayOrderQuery;
@@ -33,10 +32,7 @@ import com.qmrb.system.pojo.vo.PayOrderVO;
 import com.qmrb.system.pojo.vo.ReCreateOrderVO;
 import com.qmrb.system.pojo.vo.ToCreateOrderVO;
 import com.qmrb.system.pojo.vo.WxLoginVO;
-import com.qmrb.system.service.IBarnRecordService;
-import com.qmrb.system.service.ICarParkService;
-import com.qmrb.system.service.OrderService;
-import com.qmrb.system.service.ToolWxConfigService;
+import com.qmrb.system.service.*;
 import com.qmrb.system.utils.WxPayUtil;
 import com.qmrb.system.wxpayback.Enum.WxApiType;
 import com.qmrb.system.wxpayback.Enum.WxPayStatusEnum;
@@ -64,6 +60,7 @@ import java.math.BigDecimal;
 import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.security.PrivateKey;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.HashMap;
@@ -100,6 +97,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private ICarParkService carParkService;
 
+    @Autowired
+    private CouponMapper couponMapper;
+
+    @Autowired
+    private IContractPlaceNumberRelService contractPlaceNumberRelService;
+
     /**分页查询
      * */
     @Override
@@ -319,6 +322,28 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                         BigDecimal amountsPayable = new BigDecimal(order.getAmountsPayable()).divide(new BigDecimal(100)); 
                         barnRecordForm.setReceivedAmount(barnRecordForm.getReceivedAmount().add(amountsPayable));
                         barnRecordForm.setBillingStartTime(new Date());
+                        // 查询优惠券
+                        List<Coupon> coupons = couponMapper.selectList(new LambdaQueryWrapper<Coupon>().eq(Coupon::getGoodsId, barnRecordForm.getId()));
+                        log.info("查询优惠券:{}",coupons.size());
+                        if(CollectionUtil.isNotEmpty(coupons)){
+                            Coupon coupon = coupons.get(0);
+                            // 1 扫码抵用金额 2扫码抵用时长
+                            if(1 == coupon.getCouponType()){
+                                barnRecordForm.setDiscountAmount(coupon.getDenomination());
+                            }else if(2 == coupon.getCouponType()){
+                                barnRecordForm.setDiscountMinute(coupon.getDenomination());
+                            }
+                        }else {
+                            // 判断是否否存在包租协议
+                            Map<String,Object> map = contractPlaceNumberRelService.getDenomination(barnRecordForm.getId());
+                            if(CollectionUtil.isNotEmpty(map)){
+
+                                Double denomination = (Double) map.get("denomination");
+                                BigDecimal discountMinute = new BigDecimal(denomination);
+                                barnRecordForm.setDiscountMinute(discountMinute);
+                            }
+                        }
+
                         barnRecordService.updateForm(barnRecordForm.getId(),barnRecordForm);
                     }
                     //支付成功 就返回true