guoshuai 1 settimana fa
parent
commit
1d9e08ef4a

+ 20 - 0
src/main/java/com/qmrb/system/common/enums/GoodTypesEnum.java

@@ -0,0 +1,20 @@
+package com.qmrb.system.common.enums;
+
+import com.qmrb.system.common.base.IBaseEnum;
+import lombok.Getter;
+
+public enum GoodTypesEnum implements IBaseEnum<String> {
+    PARK("1", "停车"),
+    MONTHLY_CARD ("2", "月卡");
+
+    @Getter
+    private String value;
+
+    @Getter
+    private String label;
+
+    GoodTypesEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+}

+ 33 - 0
src/main/java/com/qmrb/system/controller/OrderController.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmrb.system.common.enums.GoodTypesEnum;
 import com.qmrb.system.common.result.PageResult;
 import com.qmrb.system.common.result.Result;
 import com.qmrb.system.common.result.ResultCode;
@@ -16,6 +17,7 @@ import com.qmrb.system.pojo.dto.LoginParam;
 import com.qmrb.system.pojo.dto.UserParam;
 import com.qmrb.system.pojo.entity.BarnRecord;
 import com.qmrb.system.pojo.entity.Order;
+import com.qmrb.system.pojo.entity.ParkingCard;
 import com.qmrb.system.pojo.entity.ToolWxConfig;
 import com.qmrb.system.pojo.form.BarnRecordForm;
 import com.qmrb.system.pojo.form.PayOrderForm;
@@ -85,6 +87,9 @@ public class OrderController extends CommonController {
 
     @Autowired
     private IBarnRecordService barnRecordService;
+    
+    @Autowired
+    private IParkingCardService parkingCardService;
 
     @Autowired
     private ICarParkChargingRulesService rulesService;
@@ -259,6 +264,33 @@ public class OrderController extends CommonController {
         return process(() -> orderService.createOrder(toolWxConfigService.findConf(), toCreatOrderVO));
     }
 
+
+    /**
+     * 创建月卡订单
+     * @param toCreatOrderVO
+     * @return
+     */
+    @PostMapping("/createMonthlyCardOrder")
+    public CommonResult<ReCreateOrderVO> createMonthlyCardOrder(@RequestBody ToCreateOrderVO toCreatOrderVO) {
+        JSSafeSnowflake idGenerator = new JSSafeSnowflake(2);
+        Long id = idGenerator.nextId();
+        toCreatOrderVO.setOutTradeNo(id.toString());
+        // 根据月卡购买记录id获取车牌号
+        List<ParkingCard> barnRecordList = parkingCardService.list(new LambdaQueryWrapper<ParkingCard>().eq(ParkingCard::getId, toCreatOrderVO.getGoodId())
+                .orderByDesc(ParkingCard::getCreateTime));
+        // 订单入库
+        orderService.save(new Order().setAmountsPayable(toCreatOrderVO.getTotal())
+                .setPayDescription(toCreatOrderVO.getDescription())
+                .setId(id)
+                .setGoodId(toCreatOrderVO.getGoodId())
+                .setGoodsType(GoodTypesEnum.MONTHLY_CARD.getValue())//商品类型 1-停车 商品类型 2-月卡
+                .setGoodsName(toCreatOrderVO.getDescription())
+                .setPayStatus(SystemConstant.NUM_ZERO)
+                .setPlateNumber(barnRecordList.get(0).getPlateNumber())
+        );
+        return process(() -> orderService.createOrder(toolWxConfigService.findConf(), toCreatOrderVO));
+    }
+
     /**
      * @description:订单退款
      * @param: outTradeNo
@@ -354,6 +386,7 @@ public class OrderController extends CommonController {
                     .setPayDescription(toCreateOrderVO.getDescription())
                     .setId(orderId)
                     .setGoodId(id)
+                    .setGoodsType(GoodTypesEnum.PARK.getValue())//商品类型 1-停车 商品类型 2-月卡
                     .setGoodsName(toCreateOrderVO.getDescription())
                     .setPayStatus(SystemConstant.NUM_ZERO));
             return process(() -> orderService.createOrder(toolWxConfigService.findConf(), toCreateOrderVO));

+ 87 - 31
src/main/java/com/qmrb/system/service/impl/OrderServiceImpl.java

@@ -18,13 +18,10 @@ 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.system.common.enums.GoodTypesEnum;
 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.Coupon;
-import com.qmrb.system.pojo.entity.Order;
-import com.qmrb.system.pojo.entity.ToolWxConfig;
+import com.qmrb.system.mapper.*;
+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;
@@ -62,6 +59,7 @@ import java.math.BigDecimal;
 import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.security.PrivateKey;
+import java.time.LocalTime;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -99,6 +97,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     @Autowired
     private CouponMapper couponMapper;
+    
+    @Autowired
+    private CarParkStoredCardMapper carParkStoredCardMapper;    
+    
+    @Autowired
+    private ParkingCardMapper parkingCardMapper;    
+    
+    @Autowired
+    private ParkingCardTypeMapper parkingCardTypeMapper;
 
     @Autowired
     private IContractPlaceNumberRelService contractPlaceNumberRelService;
@@ -343,38 +350,46 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                         //2.对比成功 账单状态 已支付 更新实付金额
                         updateStatus(SystemConstant.NUM_ONE,orderNo);
 
-                        //   更新计费金额,已收金额
-                        BarnRecordForm barnRecordForm = barnRecordService.chargingByBarnId(Long.parseLong(orderNo));
+                        
                         Order order = this.getById(orderNo);
                         // 支付金额
                         BigDecimal amountsPayable = new BigDecimal(order.getAmountsPayable()).divide(new BigDecimal(100));
                         // 更新订单实付金额
                         updateAmountActuallyPaid(amountsPayable,orderNo);
-                        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());
+
+                        // 订单类型为购买月卡
+                        if (StrUtil.isNotBlank(order.getGoodsType()) && GoodTypesEnum.MONTHLY_CARD.getValue().equals(order.getGoodsType())) {
+                            saveStoreCard(order);
+                        }else{
+                            //   更新计费金额,已收金额
+                            BarnRecordForm barnRecordForm = barnRecordService.chargingByBarnId(Long.parseLong(orderNo));
+                            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);
+                                // }
                             }
-                        }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);
+                            barnRecordService.updateForm(barnRecordForm.getId(),barnRecordForm);
+                        }
+                        
                     }
                     //支付成功 就返回true
                     return true;
@@ -390,6 +405,41 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return false;
     }
 
+    /**
+     * 支付成功后,更新月卡购买记录状态,并新增月卡
+     * @param order
+     */
+    private void saveStoreCard(Order order) {
+        try{
+            // 更新订单状态
+            ParkingCard parkingCard = parkingCardMapper.selectById(order.getGoodId());
+            parkingCard.setStatus("active");
+            parkingCardMapper.updateById(parkingCard);
+
+            // 获取停车场信息
+            List<CarPark> list = carParkService.list();
+            Assert.isTrue(CollectionUtil.isNotEmpty(list),"无停车场数据!");
+            // 获取车型
+            ParkingCardType parkingCardType = parkingCardTypeMapper.selectById(parkingCard.getTypeId());
+            // 新增月卡
+            CarParkStoredCard carParkStoredCard = new CarParkStoredCard();
+            carParkStoredCard.setCarParkId(list.get(0).getId());
+            carParkStoredCard.setCarParkName(list.get(0).getName());
+            carParkStoredCard.setPlateNumber(parkingCard.getPlateNumber());
+            carParkStoredCard.setUserId(parkingCard.getCreateBy());
+            carParkStoredCard.setCreateTime(parkingCard.getCreateTime());
+            carParkStoredCard.setStartTime(parkingCard.getStartTime().atStartOfDay());
+            carParkStoredCard.setEndTime(parkingCard.getEndTime().atTime(LocalTime.MAX));
+            carParkStoredCard.setPhone(parkingCard.getPhone());
+            carParkStoredCard.setCreateBy(parkingCard.getCreateBy());
+            carParkStoredCard.setStatus("1");//月卡状态0停用1启用
+            carParkStoredCard.setName(parkingCard.getName());
+            carParkStoredCardMapper.insert(carParkStoredCard);
+        } catch (Exception e) {
+            log.error("支付成功后,更新月卡购买记录状态,新增月卡异常:" , e);
+        }
+    }
+
     @Override
     public void closeOrder(ToolWxConfig wxConfig, String outTradeNo) {
         try {
@@ -409,6 +459,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             httpPost.setEntity(new StringEntity(bos.toString("UTF-8"), "UTF-8"));
             CloseableHttpResponse response = WxPayUtil.getHttpClient(wxConfig, WxPayUtil.getVerifier(wxConfig)).execute(httpPost);
             log.info("=====关单结果======={}====",response);
+            Order order = this.getById(outTradeNo);
+            // 删除对应的月卡购买记录
+            if(order != null && StrUtil.isNotBlank(order.getGoodsType()) && GoodTypesEnum.MONTHLY_CARD.getValue().equals(order.getGoodsType())){
+                int i = parkingCardMapper.deleteById(order.getGoodId());
+                log.info("删除对应的月卡购买记录:{}",i);
+            }
             // 删除订单
             this.removeById(outTradeNo);
         } catch (Exception e) {

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

@@ -149,7 +149,7 @@ public class ParkingCardServiceImpl extends ServiceImpl<ParkingCardMapper, Parki
         form.setEndTime(period[1]);
         
         // 设置状态为有效
-        form.setStatus("active");
+        form.setStatus("pending");
         
         // 实体对象转换 form->entity
         ParkingCard entity = converter.form2Entity(form);