From 2aae6068bbf1aff1ffb2813098553ac632d5002b Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期二, 10 九月 2024 16:24:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master-v2' into master-v2

---
 src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderList4CheckDTO.java  |    2 
 src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java              |   16 ++++
 src/main/java/com/mzl/flower/service/flower/FlowerService.java                     |    3 
 src/main/java/com/mzl/flower/service/point/PointGoodsService.java                  |  110 +++++++++++++++-----------
 src/main/java/com/mzl/flower/service/point/CustomerPointService.java               |    2 
 src/main/resources/mapper/payment/OrderMapper.xml                                  |    4 +
 src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderInfoSpQueryDTO.java  |    7 +
 src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItem4CheckDTO.java  |    2 
 src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderStationQueryDTO.java |    7 +
 src/main/java/com/mzl/flower/dto/request/payment/OrderQueryDTO.java                |    3 
 src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java             |    4 
 src/main/resources/mapper/point/CustomerPointMapper.xml                            |   16 ++-
 src/main/resources/mapper/payment/DeliveryOrderMapper.xml                          |   23 ++++-
 src/main/java/com/mzl/flower/service/system/UserService.java                       |    2 
 14 files changed, 139 insertions(+), 62 deletions(-)

diff --git a/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderInfoSpQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderInfoSpQueryDTO.java
index 04dc3fe..aeee9a5 100644
--- a/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderInfoSpQueryDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderInfoSpQueryDTO.java
@@ -4,6 +4,7 @@
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class DeliveryOrderInfoSpQueryDTO {
@@ -28,9 +29,15 @@
     @ApiModelProperty(value = "库位名称")
     private String warehouseLocationCode;
 
+    @ApiModelProperty(value = "日期")
+    private String date;
+
     @ApiModelProperty(hidden = true)
     private LocalDateTime startDate;
 
     @ApiModelProperty(hidden = true)
     private LocalDateTime endDate;
+
+    @ApiModelProperty(hidden = true)
+    private List<String> statusList;
 }
diff --git a/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderStationQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderStationQueryDTO.java
index e503680..19217da 100644
--- a/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderStationQueryDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/payment/DeliveryOrderStationQueryDTO.java
@@ -4,6 +4,7 @@
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class DeliveryOrderStationQueryDTO {
@@ -34,9 +35,15 @@
     @ApiModelProperty(value = "库位名称")
     private String warehouseLocationCode;
 
+    @ApiModelProperty(value = "日期")
+    private String date;
+
     @ApiModelProperty(hidden = true)
     private LocalDateTime startDate;
 
     @ApiModelProperty(hidden = true)
     private LocalDateTime endDate;
+
+    @ApiModelProperty(hidden = true)
+    private List<String> statusList;
 }
diff --git a/src/main/java/com/mzl/flower/dto/request/payment/OrderQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/payment/OrderQueryDTO.java
index d271a9a..ca40541 100644
--- a/src/main/java/com/mzl/flower/dto/request/payment/OrderQueryDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/payment/OrderQueryDTO.java
@@ -70,4 +70,7 @@
 
     @ApiModelProperty(hidden = true)
     private List<String> idList;
+
+    @ApiModelProperty(value = "收货地址详细地址(拼接省市区地址)")
+    private String address;
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItem4CheckDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItem4CheckDTO.java
index 1e02cee..f0b2e4d 100644
--- a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItem4CheckDTO.java
+++ b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItem4CheckDTO.java
@@ -37,7 +37,7 @@
     private String flowerLevelStr;
 
     @ApiModelProperty(value = "订单商品状态")
-    @DictTrans(target = "statusStr", codeType = "CHECK_OPERATE")
+    @DictTrans(target = "statusStr", codeType = "ORDER_ITEM_STATUS")
     private String status;
     private String statusStr;
 
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderList4CheckDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderList4CheckDTO.java
index ae7760f..a392344 100644
--- a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderList4CheckDTO.java
+++ b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderList4CheckDTO.java
@@ -25,4 +25,6 @@
     @ApiModelProperty(value = "供应商总价")
     private BigDecimal totalAmount;
 
+    @ApiModelProperty(value = "未完成质检订单数量")
+    private Integer uncheckedCount;
 }
diff --git a/src/main/java/com/mzl/flower/service/flower/FlowerService.java b/src/main/java/com/mzl/flower/service/flower/FlowerService.java
index 4ad623e..221d4be 100644
--- a/src/main/java/com/mzl/flower/service/flower/FlowerService.java
+++ b/src/main/java/com/mzl/flower/service/flower/FlowerService.java
@@ -458,6 +458,9 @@
     public void deleteFlower(Long id){
 
         final Flower flower = flowerMapper.selectById(id);
+        if(flower == null){
+            throw new ValidationException("商品未找到");
+        }
 
         flowerMapper.deleteById(id);
 
diff --git a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
index 154e9a9..92f7400 100644
--- a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
@@ -354,7 +354,7 @@
         );
         if (items != null && items.size() > 0) {
             for (OrderItem i : items) {
-                i.setStatus(Constants.CHECK_OPERATE.ok.name());
+                i.setStatus(Constants.ORDER_ITEM_STATUS.ok.name());
                 i.setCheckTime(LocalDateTime.now());
                 orderItemMapper.updateById(i);
             }
@@ -463,6 +463,7 @@
 
     //////////////////////////////////////////////////////////////新接口
     public Page<DeliveryOrderList4CheckDTO> selectSupplierDoList4Check(Page page, DeliveryOrderStationQueryDTO dto) {
+        dto.setStatusList(splitParam(dto.getStatus()));
         List<DeliveryOrderList4CheckDTO> ls = deliveryOrderMapper.selectSupplierDoList4Check(page, dto);
 
         page.setRecords(ls);
@@ -473,6 +474,7 @@
         if(dto.getSupplierId() == null){
             throw new ValidationException("供应商id不能为空");
         }
+        dto.setStatusList(splitParam(dto.getStatus()));
         List<DeliveryOrder4CheckDTO> ls = deliveryOrderMapper.selectSupplierDoInfo4Check(page, dto);
 
         if(ls != null && ls.size() > 0){
diff --git a/src/main/java/com/mzl/flower/service/point/CustomerPointService.java b/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
index 3d225f9..05363d3 100644
--- a/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
+++ b/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
@@ -93,7 +93,7 @@
                     point.setDeductionPoint(point.getDeductionPoint() + detail.getPoint());
                 }else{
                     //积分不足,直接清0
-                    point.setDeductionPoint(point.getUsedPoint() + balancePoint);
+                    point.setDeductionPoint(point.getDeductionPoint() + balancePoint);
                     detail.setPoint(balancePoint);
                     detail.setRemarks(detail.getRemarks()+",积分不足,扣除积分"+balancePoint);
                 }
diff --git a/src/main/java/com/mzl/flower/service/point/PointGoodsService.java b/src/main/java/com/mzl/flower/service/point/PointGoodsService.java
index 4c2ab59..27ad4dc 100644
--- a/src/main/java/com/mzl/flower/service/point/PointGoodsService.java
+++ b/src/main/java/com/mzl/flower/service/point/PointGoodsService.java
@@ -18,6 +18,7 @@
 import com.mzl.flower.mapper.point.PointGoodsMapper;
 import com.mzl.flower.mapper.point.PointGoodsRecordMapper;
 import com.mzl.flower.service.BaseService;
+import com.mzl.flower.service.payment.RedisLockService;
 import com.mzl.flower.utils.UUIDGenerator;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,6 +44,9 @@
     @Autowired
     private CustomerPointDetailMapper customerPointDetailMapper;
 
+
+    @Autowired
+    private RedisLockService lockService;
 
     public Long addPointGoods(PointGoodsCreateDTO dto){
         PointGoods p = new PointGoods();
@@ -117,57 +121,69 @@
         }
     }
 
-    public synchronized void exchangeGoods(ExchangeGoodsDTO dto) {
-        PointGoods p = pointGoodsMapper.selectById(dto.getGoodsId());
-        if(p == null){
-            throw new ValidationException("商品未找到");
+    public void exchangeGoods(ExchangeGoodsDTO dto) {
+        String key="EXCHANGE_GOODS:"+dto.getGoodsId()+":"+SecurityUtils.getUserId();
+        boolean lock = lockService.getObjectLock(key, "");
+        if(!lock){
+            throw new ValidationException("系统操作频繁,请稍后重试");
         }
-        if(!Constants.POINT_GOODS_STATUS.A.name().equals(p.getStatus())){
-            throw new ValidationException("商品未上架");
-        }
-        if(p.getStock()< dto.getNum()){
-            throw new ValidationException("商品库存不足");
-        }
-        CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
-                .eq(CustomerPoint::getUserId, SecurityUtils.getUserId()));
-        if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()) < p.getPoint() * dto.getNum()){
-            throw new ValidationException("积分不足");
-        }
-        //记录兑换记录
-        PointGoodsRecord record = new PointGoodsRecord();
-        record.setUserId(SecurityUtils.getUserId());
-        record.setCustomerId(getCustomerByUserId(SecurityUtils.getUserId()).getId());
-        record.setGoodsId(dto.getGoodsId());
-        record.setNum(dto.getNum());
-        record.setPoint(p.getPoint());
-        record.setName(p.getName());
-        record.setPictures(p.getPictures());
-        record.setDescription(p.getDescription());
-        record.setTotalPoint(p.getPoint() * dto.getNum());
-        record.setCover(p.getCover());
-        record.setRedeemCode(UUIDGenerator.getUUID());
-        record.setStatus(Constants.POINT_GOODS_RECORD_STATUS.A.name());//未使用
-        pointGoodsRecordMapper.insert(record);
+        try {
+            PointGoods p = pointGoodsMapper.selectById(dto.getGoodsId());
+            if(p == null){
+                throw new ValidationException("商品未找到");
+            }
+            if(!Constants.POINT_GOODS_STATUS.A.name().equals(p.getStatus())){
+                throw new ValidationException("商品未上架");
+            }
+            if(p.getStock()< dto.getNum()){
+                throw new ValidationException("商品库存不足");
+            }
+            CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
+                    .eq(CustomerPoint::getUserId, SecurityUtils.getUserId()));
+            if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()-cp.getDeductionPoint()) < p.getPoint() * dto.getNum()){
+                throw new ValidationException("积分不足");
+            }
+            //记录兑换记录
+            PointGoodsRecord record = new PointGoodsRecord();
+            record.setUserId(SecurityUtils.getUserId());
+            record.setCustomerId(getCustomerByUserId(SecurityUtils.getUserId()).getId());
+            record.setGoodsId(dto.getGoodsId());
+            record.setNum(dto.getNum());
+            record.setPoint(p.getPoint());
+            record.setName(p.getName());
+            record.setPictures(p.getCover());
+            record.setDescription(p.getDescription());
+            record.setTotalPoint(p.getPoint() * dto.getNum());
+            record.setCover(p.getCover());
+            record.setRedeemCode(UUIDGenerator.getUUID());
+            record.setStatus(Constants.POINT_GOODS_RECORD_STATUS.A.name());//未使用
+            pointGoodsRecordMapper.insert(record);
 
-        //更新积分汇总
-        cp.setUsedPoint(cp.getUsedPoint()+record.getTotalPoint());
-        customerPointMapper.updateById(cp);
+            //更新积分汇总
+            cp.setUsedPoint(cp.getUsedPoint()+record.getTotalPoint());
+            customerPointMapper.updateById(cp);
 
-        //记录积分明细
-        CustomerPointDetail detail = new CustomerPointDetail();
-        detail.setUserId(SecurityUtils.getUserId());
-        detail.setCustomerId(record.getCustomerId());
-        detail.setPoint(record.getTotalPoint());
-        detail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name());
-        detail.setType(Constants.POINT_TYPE.exchange.name());
-        detail.setRecordDate(LocalDate.now());
-        detail.setRemarks(record.getName());
-        detail.create(SecurityUtils.getUserId());
-        customerPointDetailMapper.insert(detail);
+            //记录积分明细
+            CustomerPointDetail detail = new CustomerPointDetail();
+            detail.setUserId(SecurityUtils.getUserId());
+            detail.setCustomerId(record.getCustomerId());
+            detail.setPoint(record.getTotalPoint());
+            detail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name());
+            detail.setType(Constants.POINT_TYPE.exchange.name());
+            detail.setRecordDate(LocalDate.now());
+            detail.setRemarks(record.getName());
+            detail.create(SecurityUtils.getUserId());
+            customerPointDetailMapper.insert(detail);
 
-        //更新库存
-        p.setStock(p.getStock()- dto.getNum());
-        pointGoodsMapper.updateById(p);
+            //更新库存
+            p.setStock(p.getStock()- dto.getNum());
+            pointGoodsMapper.updateById(p);
+        }catch (Exception e){
+            throw new ValidationException("兑换失败");
+        }finally {
+            lockService.releaseObjectLock(key,"");
+        }
+
     }
 
     public Page<PointGoodsRecordDTO> myExchangeGoods(QueryExchangeGoodsDTO dto, Page page) {
diff --git a/src/main/java/com/mzl/flower/service/system/UserService.java b/src/main/java/com/mzl/flower/service/system/UserService.java
index 855ec56..3ddf79c 100644
--- a/src/main/java/com/mzl/flower/service/system/UserService.java
+++ b/src/main/java/com/mzl/flower/service/system/UserService.java
@@ -201,7 +201,7 @@
             if(customerPoint == null){
                 result.setCurrentPoint(0);
             }else{
-                Integer currentPoint =customerPoint.getTotalPoint()-customerPoint.getUsedPoint()-customerPoint.getExpiredPoint();
+                Integer currentPoint =customerPoint.getTotalPoint()-customerPoint.getUsedPoint()-customerPoint.getExpiredPoint()-customerPoint.getDeductionPoint();
                 result.setCurrentPoint(currentPoint>=0?currentPoint:0);
             }
         }else if(Constants.USER_TYPE.supplier.name().equals(user.getType())){
diff --git a/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java b/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java
index 2af2b28..b176677 100644
--- a/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java
+++ b/src/main/java/com/mzl/flower/web/payment/DeliveryOrderController.java
@@ -136,6 +136,14 @@
     @ApiOperation(value = "查询集货站供应商配送列表")
     public ResponseEntity<ReturnDataDTO<Page<DeliveryOrderList4CheckDTO>>> selectSupplierDoList4Check(Page page
             , DeliveryOrderStationQueryDTO dto){
+        LocalDate localDate = deliveryOrderService.parseLocalDate(dto.getDate());
+        if(localDate != null){
+            LocalDateTime end = localDate.atTime(17, 0, 0);
+            LocalDateTime begin = end.plusDays(-1);
+            dto.setStartDate(begin);
+            dto.setEndDate(end);
+        }
+
         return returnData(R.SUCCESS.getCode(), deliveryOrderService.selectSupplierDoList4Check(page, dto));
     }
 
@@ -179,6 +187,14 @@
     @ApiOperation(value = "查询供应商配送单列表")
     public ResponseEntity<ReturnDataDTO<Page<DeliveryOrder4CheckDTO>>> selectSupplierDoInfo4Check(Page page
             , DeliveryOrderInfoSpQueryDTO dto){
+        LocalDate localDate = deliveryOrderService.parseLocalDate(dto.getDate());
+        if(localDate != null){
+            LocalDateTime end = localDate.atTime(17, 0, 0);
+            LocalDateTime begin = end.plusDays(-1);
+            dto.setStartDate(begin);
+            dto.setEndDate(end);
+        }
+
         return returnData(R.SUCCESS.getCode(), deliveryOrderService.selectSupplierDoInfo4Check(page, dto));
     }
 
diff --git a/src/main/resources/mapper/payment/DeliveryOrderMapper.xml b/src/main/resources/mapper/payment/DeliveryOrderMapper.xml
index dbfd143..34f3909 100644
--- a/src/main/resources/mapper/payment/DeliveryOrderMapper.xml
+++ b/src/main/resources/mapper/payment/DeliveryOrderMapper.xml
@@ -79,13 +79,16 @@
     </select>
 
     <select id="selectSupplierDoList4Check" resultType="com.mzl.flower.dto.response.payment.DeliveryOrderList4CheckDTO">
-        SELECT tt.id, tt.supplierName, tt.supplierTel, tt.stationName, sum(tt.num) totalNum, sum(tt.amount) totalAmount
+        SELECT tt.id, tt.supplierName, tt.supplierTel, tt.stationName, sum(tt.num) totalNum
+            , sum(tt.amount) totalAmount, sum(tt.uncheckedCount) uncheckedCount
         from (
             select s.id, s.name supplierName, s.contact_tel supplierTel, st.name stationName
             , (select sum(num) from t_order_item oi
                 where oi.supplier_id = q.supplier_id and oi.order_id = q.order_id) num
-            ,  (select sum(oi.supplier_price * oi.num) from t_order_item oi
+            , (select sum(oi.supplier_price * oi.num) from t_order_item oi
                 where oi.supplier_id = q.supplier_id and oi.order_id = q.order_id) amount
+            , (select count(1) from t_delivery_order dor
+                where dor.id = q.id and dor.status != 'CHECKED') uncheckedCount
             from t_supplier_info s
             join t_station st on st.id = s.station_id
             join t_delivery_order q on s.id = q.supplier_id
@@ -98,8 +101,12 @@
         <if test="condition.orderNo != null and condition.orderNo != ''">
             AND q.order_no LIKE concat('%', #{condition.orderNo},'%')
         </if>
-        <if test="condition.status != null and condition.status != ''">
-            AND q.status = #{condition.status}
+
+        <if test="condition.statusList != null and condition.statusList.size > 0">
+            AND q.status in
+            <foreach collection="condition.statusList" item="status" open="(" separator="," close=")">
+                #{status}
+            </foreach>
         </if>
 
         <if test="condition.supplierId != null">
@@ -148,8 +155,12 @@
         <if test="condition.orderNo != null and condition.orderNo != ''">
             AND q.order_no LIKE concat('%', #{condition.orderNo},'%')
         </if>
-        <if test="condition.status != null and condition.status != ''">
-            AND q.status = #{condition.status}
+
+        <if test="condition.statusList != null and condition.statusList.size > 0">
+            AND q.status in
+            <foreach collection="condition.statusList" item="status" open="(" separator="," close=")">
+                #{status}
+            </foreach>
         </if>
 
         <if test="condition.warehouseId != null">
diff --git a/src/main/resources/mapper/payment/OrderMapper.xml b/src/main/resources/mapper/payment/OrderMapper.xml
index 880740c..8bcdc82 100644
--- a/src/main/resources/mapper/payment/OrderMapper.xml
+++ b/src/main/resources/mapper/payment/OrderMapper.xml
@@ -90,6 +90,10 @@
         <if test="condition.customerAddress != null and condition.customerAddress != ''">
             AND q.customer_address LIKE concat('%', #{condition.customerAddress},'%')
         </if>
+        <if test="condition.address != null and condition.address != ''">
+            AND CONCAT(q.customer_province, q.customer_city, q.customer_region, q.customer_address) LIKE concat('%',
+            #{condition.address},'%')
+        </if>
         <if test="condition.customer != null and condition.customer != ''">
             AND (q.customer LIKE concat('%', #{condition.customer},'%')
                 or q.customer_tel LIKE concat('%', #{condition.customer},'%')
diff --git a/src/main/resources/mapper/point/CustomerPointMapper.xml b/src/main/resources/mapper/point/CustomerPointMapper.xml
index 91c18e8..9514779 100644
--- a/src/main/resources/mapper/point/CustomerPointMapper.xml
+++ b/src/main/resources/mapper/point/CustomerPointMapper.xml
@@ -3,15 +3,21 @@
 <mapper namespace="com.mzl.flower.mapper.point.CustomerPointMapper">
     <select id="queryPage" resultType="com.mzl.flower.dto.response.point.CustomerPointDTO">
         SELECT
-            p.*,
             c.`name` as customerName,
+            c.user_id as userId,
+            p.id as id,
+            c.id as customerId,
+            IFNULL(p.total_point, 0) as totalPoint,
+            IFNULL(p.used_point, 0) as usedPoint,
+            IFNULL(p.expired_point, 0) as expiredPoint,
+            IFNULL(p.deduction_point, 0) as deductionPoint,
             t.tel as customerTel
         FROM
-            t_customer_point p
-                LEFT JOIN t_customer_info c ON c.id = p.customer_id
-                LEFT JOIN t_user t on p.user_id = t.id
+            t_customer_info c
+        LEFT JOIN t_customer_point p ON c.id = p.customer_id
+        LEFT JOIN t_user t on c.user_id = t.id
         WHERE
-            p.deleted = 0
+            c.deleted = 0
           <if test="dto.customerName!= null and dto.customerName != ''">
               AND c.`name` LIKE CONCAT('%',#{dto.customerName},'%')
           </if>

--
Gitblit v1.9.3