瀏覽代碼

更新维修单

周箭河 4 年之前
父節點
當前提交
32d380c4a2

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java

@@ -172,4 +172,11 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
      * @return
      */
     List<SellOrder> getSellOrderByParentGoodsId(@Param("orderId") Long orderId, @Param("parentGoodsId") Integer parentGoodsId);
+
+    /**
+     * 获取退货的sellOrder
+     * @param orderId
+     * @return
+     */
+    List<SellOrder> getRefundSellOrder(@Param("orderId") Long orderId);
 }

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SellOrder.java

@@ -167,6 +167,13 @@ public class SellOrder {
     @ApiModelProperty(value = "状态")
     private SellStatus status;
 
+
+    /**
+     * 退货时间
+     */
+    @ApiModelProperty(value="退货时间")
+    private Date refundTime;
+
     /**
     * 交易时间
     */
@@ -451,4 +458,12 @@ public class SellOrder {
     public void setParentGoodsId(Integer parentGoodsId) {
         this.parentGoodsId = parentGoodsId;
     }
+
+    public Date getRefundTime() {
+        return refundTime;
+    }
+
+    public void setRefundTime(Date refundTime) {
+        this.refundTime = refundTime;
+    }
 }

+ 12 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java

@@ -48,15 +48,25 @@ public interface SellOrderService extends BaseService<Integer, SellOrder> {
      * 退货
      *
      * @param sellOrders
+     * @param reBackFee  是否退费
      * @return
      */
-    List<SellOrder> refund(List<SellOrder> sellOrders);
+    List<SellOrder> refund(List<SellOrder> sellOrders, Boolean reBackFee);
 
     /**
      * 根据订单id退货
      *
      * @param orderId
+     * @param reBackFee 是否退费
      * @return
      */
-    List<SellOrder> refundByOrderId(Long orderId);
+    List<SellOrder> refundByOrderId(Long orderId, Boolean reBackFee);
+
+    /**
+     * 获取订单退货的sellOrder
+     * @param orderId
+     * @return
+     */
+    List<SellOrder> getRefundSellOrder(Long orderId);
+
 }

+ 14 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -223,7 +223,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                         sellOrderExpectAmount = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(expectAmount).divide(complementPrice, 2, BigDecimal.ROUND_HALF_UP);
                         sellOrderBalance = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(balance).divide(complementPrice, 2, BigDecimal.ROUND_HALF_UP);
                     }
-                     complementGoodsNum = complementGoodsNum - sellOrder.getNum();
+                    complementGoodsNum = complementGoodsNum - sellOrder.getNum();
                     if (complementGoodsNum <= 0) {
                         sellOrderExpectAmount = expectAmount.subtract(hasRouteSellOrderExpectAmount);
                         sellOrderBalance = balance.subtract(hasRouteSellOrderBalance);
@@ -289,7 +289,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public List<SellOrder> refund(List<SellOrder> sellOrders) {
+    public List<SellOrder> refund(List<SellOrder> sellOrders,Boolean reBackFee) {
         for (SellOrder sellOrder : sellOrders) {
             //1、更改销售列表状态
             sellOrder.setStatus(SellStatus.REFUND);
@@ -297,8 +297,8 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
             sellOrderDao.update(sellOrder);
 
             //2、金额退到余额
-            if (sellOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                sysUserCashAccountService.updateBalance(sellOrder.getUserId(), sellOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "订单:" + sellOrder.getOrderId() + " 商品id:" + sellOrder.getGoodsId() + "退货");
+            if (reBackFee && sellOrder.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(sellOrder.getUserId(), sellOrder.getExpectAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "订单:" + sellOrder.getOrderId() + " 商品id:" + sellOrder.getGoodsId() + "退货");
             }
         }
         //3、退货
@@ -309,9 +309,17 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
     }
 
     @Override
-    public List<SellOrder> refundByOrderId(Long orderId) {
+    public List<SellOrder> refundByOrderId(Long orderId,Boolean reBackFee) {
         List<SellOrder> sellOrders = sellOrderDao.getSellOrderByParentGoodsId(orderId, null);
-        return refund(sellOrders);
+        if (sellOrders.size() <= 0) {
+            return sellOrders;
+        }
+        return refund(sellOrders,reBackFee);
+    }
+
+    @Override
+    public List<SellOrder> getRefundSellOrder(Long orderId) {
+        return sellOrderDao.getRefundSellOrder(orderId);
     }
 
 }

+ 52 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -289,7 +289,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
 
             //退原订单商品
-            sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
+            sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
             //添加新订单
             this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, BigDecimal.ZERO, BigDecimal.ZERO);
         }
@@ -316,25 +316,39 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         SubjectChange subjectChange = new SubjectChange();
         SubjectChange studentLastChange = subjectChangeDao.getStudentLastChange(studentId, musicGroupId);
         if (studentLastChange != null) {
+            Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(subjectChange.getOrderId().longValue());
             subjectChange.setStudentId(studentLastChange.getStudentId());
             subjectChange.setOrderId(studentLastChange.getOrderId());
             subjectChange.setCooperationOrganId(studentLastChange.getCooperationOrganId());
             subjectChange.setMusicGroupId(studentLastChange.getMusicGroupId());
             subjectChange.setOriginalCourseFee(studentLastChange.getChangeCourseFee());
             subjectChange.setKitGroupPurchaseType(studentLastChange.getKitGroupPurchaseType());
-            subjectChange.setOriginalCost(studentLastChange.getChangeCost());
 
-            if (studentLastChange.getChangeMusical() != null) {
+            BigDecimal originalCost = BigDecimal.ZERO;
+            if (studentLastChange.getChangeMusical() != null && !refundSellOrderGoodsIds.contains(studentLastChange.getChangeMusical())) {
                 subjectChange.setOriginalMusical(studentLastChange.getChangeMusical());
                 subjectChange.setOriginalMusicalGoods(goodsDao.get(studentLastChange.getChangeMusical()));
                 subjectChange.setOriginalMusicalPrice(studentLastChange.getChangeMusicalPrice());
             }
 
             if (studentLastChange.getChangeAccessories() != null) {
-                subjectChange.setOriginalAccessories(studentLastChange.getChangeAccessories());
-                subjectChange.setOriginalAccessoriesGoods(goodsDao.findGoodsByIds(studentLastChange.getChangeAccessories()));
-                subjectChange.setOriginalAccessoriesPrice(studentLastChange.getChangeAccessoriesPrice());
+                String[] goodsIdArr = studentLastChange.getChangeAccessories().split(",");
+                String accessoriesId = "";
+                for (String goodsId : goodsIdArr) {
+                    if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
+                        continue;
+                    }
+                    accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
+                }
+                if (StringUtils.isNotBlank(accessoriesId)) {
+                    subjectChange.setOriginalAccessories(accessoriesId);
+                    List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
+                    subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
+                    BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    subjectChange.setOriginalAccessoriesPrice(price);
+                }
             }
+            subjectChange.setOriginalCost(originalCost);
             return subjectChange;
         }
         //2.1不存在历史的更换
@@ -342,6 +356,9 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         if (details.size() <= 0) {
             return null;
         }
+
+        Set<Integer> refundSellOrderGoodsIds = getRefundGoodsId(details.get(0).getPaymentOrderId());
+
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         subjectChange.setStudentId(studentId);
         subjectChange.setOrganId(musicGroup.getOrganId());
@@ -355,10 +372,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 subjectChange.setOriginalCourseFee(detail.getPrice());
             } else if (detail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
                 subjectChange.setKitGroupPurchaseType(detail.getKitGroupPurchaseType());
-                int goodsId = Integer.parseInt(detail.getGoodsIdList());
-                subjectChange.setOriginalMusical(goodsId);
-                subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
-                subjectChange.setOriginalMusicalPrice(detail.getPrice());
+                Integer goodsId = Integer.parseInt(detail.getGoodsIdList());
+                if (!refundSellOrderGoodsIds.contains(goodsId)) {
+                    subjectChange.setOriginalMusical(goodsId);
+                    subjectChange.setOriginalMusicalGoods(goodsDao.get(goodsId));
+                    subjectChange.setOriginalMusicalPrice(detail.getPrice());
+                }
             } else {
                 if (StringUtils.isNotBlank(detail.getGoodsIdList())) {
                     accessoriesPrice = accessoriesPrice.add(detail.getPrice());
@@ -367,9 +386,20 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
         }
         if (StringUtils.isNotBlank(accessoriesIds)) {
-            subjectChange.setOriginalAccessories(accessoriesIds);
-            subjectChange.setOriginalAccessoriesGoods(goodsDao.findGoodsByIds(accessoriesIds));
-            subjectChange.setOriginalAccessoriesPrice(accessoriesPrice);
+            String[] goodsIdArr = accessoriesIds.split(",");
+            String accessoriesId = "";
+            for (String goodsId : goodsIdArr) {
+                if (refundSellOrderGoodsIds.contains(Integer.parseInt(goodsId))) {
+                    continue;
+                }
+                accessoriesId += StringUtils.isBlank(accessoriesId) ? goodsId : "," + goodsId;
+            }
+
+            subjectChange.setOriginalAccessories(accessoriesId);
+            List<Goods> accessoriesGoods = goodsDao.findGoodsByIds(accessoriesId);
+            subjectChange.setOriginalAccessoriesGoods(accessoriesGoods);
+            BigDecimal price = accessoriesGoods.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            subjectChange.setOriginalAccessoriesPrice(price);
         }
         Long orderId = details.get(0).getPaymentOrderId();
         //2.2 计算销售成本
@@ -378,6 +408,14 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         return subjectChange;
     }
 
+    private Set<Integer> getRefundGoodsId(Long orderId) {
+        List<SellOrder> refundSellOrders = sellOrderService.getRefundSellOrder(orderId);
+        Set<Integer> refundSellOrderGoodsIds = refundSellOrders.stream().filter(e -> e.getParentGoodsId() == null).map(SellOrder::getGoodsId).collect(Collectors.toSet());
+        Set<Integer> refundSellOrderParentGoodsId = refundSellOrders.stream().filter(e -> e.getParentGoodsId() != null).map(SellOrder::getParentGoodsId).collect(Collectors.toSet());
+        refundSellOrderGoodsIds.addAll(refundSellOrderParentGoodsId);
+        return refundSellOrderGoodsIds;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
@@ -440,7 +478,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (StringUtils.isNotBlank(goodsIds)) {
                 List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
                 //退原订单商品
-                sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
+                sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
                 //添加新订单
                 this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
             }

+ 18 - 8
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -32,6 +32,7 @@
         <result column="mer_no_" property="merNo"/>
         <result column="batch_no_" property="batchNo"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="refund_time_" property="refundTime"/>
         <result column="sell_time_" property="sellTime"/>
         <result column="create_ime_" property="createIme"/>
         <result column="update_time_" property="updateTime"/>
@@ -45,7 +46,7 @@
         id_, edu_teacher_id_,organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_, expect_amount_,
         actual_amount_,balance_amount_, sell_cost_, sell_cost2_, type_,parent_goods_id_, goods_id_,goods_name_, num_,
         user_id_,
-        payment_channel_,mer_no_,batch_no_,stock_type_,account_type_,status_, sell_time_, create_ime_, update_time_
+        payment_channel_,mer_no_,batch_no_,stock_type_,account_type_,status_, refund_time_,sell_time_, create_ime_, update_time_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="SellOrder">
         <!--@mbg.generated-->
@@ -65,13 +66,13 @@
         insert into sell_order (edu_teacher_id_,organ_id_, cooperation_organ_id_, trans_no_,order_id_, order_no_,
         expect_amount_,actual_amount_,balance_amount_, type_,parent_goods_id_, goods_id_,goods_name_, sell_cost_,
         sell_cost2_, num_, user_id_, payment_channel_,
-        mer_no_,batch_no_,stock_type_,account_type_, sell_time_, create_ime_, update_time_)
+        mer_no_,batch_no_,stock_type_,account_type_, refund_time_,sell_time_, create_ime_, update_time_)
         values (#{eduTeacherId},#{organId}, #{cooperationOrganId}, #{transNo}, #{orderNo},#{orderId}, #{expectAmount},
         #{actualAmount}, #{balanceAmount}, #{type},#{parentGoodsId}, #{goodsId}, #{goodsName}, #{sellCost},
         #{sellCost2}, #{num}, #{userId},
         #{paymentChannel}, #{merNo},#{batchNo},
         #{stockType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{accountType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{sellTime}, #{createIme}, #{updateTime})
+        #{refundTime},#{sellTime}, #{createIme}, #{updateTime})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.SellOrder">
         <!--@mbg.generated-->
@@ -146,6 +147,9 @@
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="refundTime != null">
+                refund_time_ = #{refundTime},
+            </if>
             <if test="sellTime != null">
                 sell_time_ = #{sellTime},
             </if>
@@ -232,6 +236,9 @@
                 <if test="sellOrder.status != null">
                     status_ = #{sellOrder.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 </if>
+                <if test="sellOrder.refundTime != null">
+                    refund_time_ = #{sellOrder.refundTime},
+                </if>
                 <if test="sellOrder.sellTime != null">
                     sell_time_ = #{sellOrder.sellTime},
                 </if>
@@ -515,13 +522,11 @@
     <select id="getRefundIncome" resultMap="com.ym.mec.biz.dal.dao.OperatingReportDao.OperatingReport"><![CDATA[
         SELECT organ_id_,
                cooperation_organ_id_,
-               -SUM(actual_amount_)    sell_amount_,
-               -SUM(sell_cost_ * num_) sell_cost_,
-                SUM(actual_amount_)    other_income_
+               -SUM(sell_cost_ * num_) sell_cost_
         FROM sell_order
         WHERE status_ = 1
-          AND sell_time_ >= #{startTime}
-          AND sell_time_ <= #{endTime}
+          AND refund_time_ >= #{startTime}
+          AND refund_time_ <= #{endTime}
         GROUP BY organ_id_, cooperation_organ_id_
         ]]></select>
 
@@ -547,4 +552,9 @@
           AND batch_no_ IS NULL
         ORDER BY sell_time_
     </select>
+
+    <select id="getRefundSellOrder" resultMap="SellOrder">
+        SELECT * FROM sell_order WHERE order_id_ = #{orderId} AND status_=0
+    </select>
+
 </mapper>

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/SellOrderController.java

@@ -106,7 +106,7 @@ public class SellOrderController extends BaseController {
         } else {
             sellOrders.add(sellOrder);
         }
-        return succeed(sellOrderService.refund(sellOrders));
+        return succeed(sellOrderService.refund(sellOrders,true));
     }
 
 }