Forráskód Böngészése

update 声部更换

周箭河 5 éve
szülő
commit
991dfe9e30

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SubjectChange.java

@@ -14,6 +14,9 @@ public class SubjectChange {
     @ApiModelProperty(value = "")
     private Integer id;
 
+    @ApiModelProperty(value = "原始订单id")
+    private Integer originalOrderId;
+
     @ApiModelProperty(value = "合作单位id")
     private Integer cooperationOrganId;
 
@@ -555,4 +558,12 @@ public class SubjectChange {
     public void setEduTeacher(String eduTeacher) {
         this.eduTeacher = eduTeacher;
     }
+
+    public Integer getOriginalOrderId() {
+        return originalOrderId;
+    }
+
+    public void setOriginalOrderId(Integer originalOrderId) {
+        this.originalOrderId = originalOrderId;
+    }
 }

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

@@ -25,6 +25,7 @@ public interface SellOrderService extends BaseService<Integer, SellOrder> {
 
     /**
      * 将订单详情加入销售列表
+     *
      * @param orderDetails
      * @param studentPaymentOrder
      * @return
@@ -36,16 +37,26 @@ public interface SellOrderService extends BaseService<Integer, SellOrder> {
 
     /**
      * 获取组合商品的相关商品
+     *
      * @param orderId
      * @param parentGoodsId
      * @return
      */
-    List<SellOrder> getSellOrderByParentGoodsId(Long orderId,Integer parentGoodsId);
+    List<SellOrder> getSellOrderByParentGoodsId(Long orderId, Integer parentGoodsId);
 
     /**
      * 退货
+     *
      * @param sellOrders
      * @return
      */
     List<SellOrder> refund(List<SellOrder> sellOrders);
+
+    /**
+     * 根据订单id退货
+     *
+     * @param orderId
+     * @return
+     */
+    List<SellOrder> refundByOrderId(Long orderId);
 }

+ 13 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/SubjectChangeService.java

@@ -1,18 +1,13 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.StudentVisitDto;
+import com.ym.mec.biz.dal.entity.SellOrder;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SubjectChange;
-import com.ym.mec.biz.dal.page.StudentVisitQueryInfo;
 import com.ym.mec.biz.dal.page.SubjectChangeQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
-import com.ym.mec.util.collection.MapUtil;
-import com.ym.mec.util.date.DateUtil;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -72,4 +67,16 @@ public interface SubjectChangeService extends BaseService<Integer, SubjectChange
      * @return
      */
     SubjectChange updateCostMargin(Integer id,BigDecimal costMargin);
+
+
+    /**
+     * 添加
+     * @param orderId
+     * @param musicGroupId
+     * @param goodsIds
+     * @param totalAmount
+     * @param balance
+     * @return
+     */
+    List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance);
 }

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

@@ -291,4 +291,10 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         return sellOrders;
     }
 
+    @Override
+    public List<SellOrder> refundByOrderId(Long orderId) {
+        List<SellOrder> sellOrders = sellOrderDao.getSellOrderByParentGoodsId(orderId, null);
+        return refund(sellOrders);
+    }
+
 }

+ 155 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.StudentVisitDto;
@@ -26,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectChange> implements SubjectChangeService {
@@ -62,6 +64,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
     private StudentRegistrationService studentRegistrationService;
     @Autowired
     private ContractService contractService;
+    @Autowired
+    private SysPaymentConfigService sysPaymentConfigService;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private SellOrderService sellOrderService;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -218,6 +226,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         }
         Date nowDate = new Date();
         SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
+        subjectChange.setOriginalOrderId(studentOriginal.getOrderId());
         subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
         subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
         MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
@@ -258,24 +267,30 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChange.setVersion(0);
         subjectChangeDao.insert(subjectChange);
 
-//        if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
-//            String orderNo = idGeneratorService.generatorId("payment") + "";
-//            StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
-//            studentPaymentOrder.setUserId(subjectChange.getStudentId());
-//            studentPaymentOrder.setGroupType(GroupType.SUBJECT_CHANGE);
-//            studentPaymentOrder.setOrderNo(orderNo);
-//            studentPaymentOrder.setType(OrderTypeEnum.SUBJECT_CHANGE);
-//            studentPaymentOrder.setExpectAmount(BigDecimal.ZERO);
-//            studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
-//            studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
-//            studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
-//            studentPaymentOrder.setMusicGroupId(subjectChange.getId().toString());
-//            studentPaymentOrder.setPaymentChannel("BALANCE");
-//            studentPaymentOrder.setUpdateTime(nowDate);
-//            studentPaymentOrder.setOrganId(subjectChange.getOrganId());
-//            studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
-//            studentPaymentOrderService.insert(studentPaymentOrder);
-//        }
+        if (amountMargin.compareTo(BigDecimal.ZERO) <= 0 && StringUtils.isNotBlank(goodsIds)) {
+            String orderNo = idGeneratorService.generatorId("payment") + "";
+            StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+            studentPaymentOrder.setUserId(subjectChange.getStudentId());
+            studentPaymentOrder.setGroupType(GroupType.SUBJECT_CHANGE);
+            studentPaymentOrder.setOrderNo(orderNo);
+            studentPaymentOrder.setType(OrderTypeEnum.SUBJECT_CHANGE);
+            studentPaymentOrder.setExpectAmount(BigDecimal.ZERO);
+            studentPaymentOrder.setActualAmount(BigDecimal.ZERO);
+            studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
+            studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+            studentPaymentOrder.setMusicGroupId(subjectChange.getId().toString());
+            studentPaymentOrder.setPaymentChannel("BALANCE");
+            studentPaymentOrder.setUpdateTime(nowDate);
+            studentPaymentOrder.setOrganId(subjectChange.getOrganId());
+            studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
+            studentPaymentOrderService.insert(studentPaymentOrder);
+            List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+
+            //退原订单商品
+            sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
+            //添加新订单
+            this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, BigDecimal.ZERO, BigDecimal.ZERO);
+        }
         return subjectChange;
     }
 
@@ -330,6 +345,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChange.setOrganId(musicGroup.getOrganId());
         subjectChange.setCooperationOrganId(musicGroup.getCooperationOrganId());
         subjectChange.setMusicGroupId(musicGroupId);
+        subjectChange.setOrderId(details.get(0).getPaymentOrderId().intValue());
         String accessoriesIds = "";
         BigDecimal accessoriesPrice = BigDecimal.ZERO;
         for (StudentPaymentOrderDetail detail : details) {
@@ -412,6 +428,20 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (this.update(subjectChange) <= 0) {
                 throw new BizException("维修单更新失败");
             }
+            String goodsIds = "";
+            if (subjectChange.getChangeMusical() != null) {
+                goodsIds += subjectChange.getChangeMusical() + "";
+            }
+            if (subjectChange.getChangeAccessories() != null) {
+                goodsIds += StringUtils.isNotBlank(goodsIds) ? "," + subjectChange.getChangeAccessories() : subjectChange.getChangeAccessories();
+            }
+            if (StringUtils.isNotBlank(goodsIds)) {
+                List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+                //退原订单商品
+                sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue());
+                //添加新订单
+                this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
+            }
 
             //插入交易明细
             BigDecimal amount = studentPaymentOrder.getActualAmount();
@@ -512,4 +542,111 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         }
         return subjectChange;
     }
+
+    @Override
+    public List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance) {
+        if (goodsIds == null || goodsIds.size() <= 0) {
+            return null;
+        }
+        if (balance == null) {
+            balance = BigDecimal.ZERO;
+        }
+        StudentPaymentOrder order = studentPaymentOrderDao.get(orderId);
+        MusicGroup musicGroup = new MusicGroup();
+        if (StringUtils.isNotBlank(musicGroupId)) {
+            musicGroup = musicGroupDao.get(musicGroupId);
+        }
+        int goodsNum = goodsIds.size();
+        BigDecimal goodsTotalPrice = BigDecimal.ZERO;
+        List<Goods> goodies = goodsDao.getGoodies(goodsIds);
+        int i = 1;
+        for (Integer goodsId : goodsIds) {
+            for (Goods goods : goodies) {
+                if (goods.getId().equals(goodsId)) {
+                    goodsTotalPrice = goodsTotalPrice.add(goods.getGroupPurchasePrice());
+                    break;
+                }
+            }
+        }
+
+        BigDecimal hasRouteBalance = BigDecimal.ZERO;
+        BigDecimal goodsTotalBalance = balance == null ? BigDecimal.ZERO : balance;
+        List<SellOrder> sellOrders = new ArrayList<>();
+
+        AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos());
+
+        for (Integer goodsId : goodsIds) {
+            SellOrder sellOrder = new SellOrder();
+            BigDecimal goodsPrice = BigDecimal.ZERO;
+            Goods nowGoods = new Goods();
+            for (Goods goods : goodies) {
+                if (goods.getId().equals(goodsId)) {
+                    nowGoods = goods;
+                    break;
+                }
+            }
+            goodsPrice = nowGoods.getGroupPurchasePrice();
+
+            BigDecimal goodsBalance = goodsTotalBalance.multiply(goodsPrice).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+            if (i == goodsNum) {
+                goodsBalance = goodsTotalBalance.subtract(hasRouteBalance);
+            }
+            hasRouteBalance = hasRouteBalance.add(goodsBalance);
+            sellOrder.setGoodsId(goodsId);
+            sellOrder.setGoodsName(nowGoods.getName());
+            sellOrder.setExpectAmount(goodsPrice);
+            sellOrder.setBalanceAmount(goodsBalance);
+            sellOrder.setActualAmount(goodsPrice.subtract(goodsBalance));
+            Map<String, BigDecimal> CostMap = new HashMap<>();
+            CostMap.put("sellCost", nowGoods.getDiscountPrice());
+            if (nowGoods.getAgreeCostPrice() != null) {
+                CostMap.put("SellCost2", nowGoods.getAgreeCostPrice());
+            }
+            sellOrder.setSellCost2(JSON.toJSONString(CostMap));
+
+            sellOrder.setOrganId(order.getOrganId());
+            sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
+            sellOrder.setTransNo(order.getTransNo());
+            sellOrder.setOrderId(order.getId());
+            sellOrder.setOrderNo(order.getOrderNo());
+            sellOrder.setSellCost(nowGoods.getDiscountPrice());
+            sellOrder.setNum(1);
+            sellOrder.setUserId(order.getUserId());
+            sellOrder.setPaymentChannel(order.getPaymentChannel());
+            sellOrder.setMerNo(order.getMerNos());
+            sellOrder.setAccountType(accountType);
+            sellOrder.setSellTime(order.getCreateTime());
+            sellOrder.setCreateIme(new Date());
+            sellOrder.setUpdateTime(new Date());
+            if (nowGoods.getType().equals(GoodsType.INSTRUMENT)) {
+                sellOrder.setType(SellTypeEnum.INSTRUMENT);
+            } else if (nowGoods.getType().equals(GoodsType.ACCESSORIES)) {
+                sellOrder.setType(SellTypeEnum.ACCESSORIES);
+            } else {
+                sellOrder.setType(SellTypeEnum.OTHER);
+            }
+
+            StockType goodsStockType = StockType.INTERNAL;
+            for (Goods goods : goodies) {
+                if (goods.getId().equals(goodsId)) {
+                    goodsStockType = goods.getStockType();
+                    break;
+                }
+            }
+            //库存类型
+            if (goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.INTERNAL)) {
+                sellOrder.setStockType(StockType.INTERNAL);
+            } else if (goodsStockType.equals(StockType.ALL) && accountType.equals(AccountType.EXTERNAL)) {
+                sellOrder.setStockType(StockType.EXTERNAL);
+            } else {
+                sellOrder.setStockType(goodsStockType);
+            }
+            //批次号 TODO
+
+            sellOrders.add(sellOrder);
+            i++;
+        }
+        sellOrderDao.batchInsert(sellOrders);
+        return sellOrders;
+    }
 }

+ 14 - 6
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -39,7 +39,8 @@
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         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_,
+        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_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="SellOrder">
@@ -58,10 +59,12 @@
             useGeneratedKeys="true">
         <!--@mbg.generated-->
         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_,
+        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_)
         values (#{eduTeacherId},#{organId}, #{cooperationOrganId}, #{transNo}, #{orderNo},#{orderId}, #{expectAmount},
-        #{actualAmount}, #{balanceAmount}, #{type},#{parentGoodsId}, #{goodsId}, #{goodsName}, #{sellCost}, #{sellCost2}, #{num}, #{userId},
+        #{actualAmount}, #{balanceAmount}, #{type},#{parentGoodsId}, #{goodsId}, #{goodsName}, #{sellCost},
+        #{sellCost2}, #{num}, #{userId},
         #{paymentChannel}, #{merNo},#{batchNo},#{stockType},#{accountType}, #{sellTime}, #{createIme}, #{updateTime})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.SellOrder">
@@ -152,7 +155,8 @@
 
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
         insert into sell_order (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_,
+        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_,edu_teacher_id_, create_ime_, update_time_)
         VALUE
         <foreach collection="sellOrders" separator="," item="sellOrder">
@@ -167,7 +171,8 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="SellOrder" parameterType="map">
-        SELECT so.*,su.username_ user_name_,su.phone_,o.name_ organ_name_,co.name_ school_name_,t.real_name_ eduTeacher,spo.receive_status_
+        SELECT so.*,su.username_ user_name_,su.phone_,o.name_ organ_name_,co.name_ school_name_,t.real_name_
+        eduTeacher,spo.receive_status_
         FROM sell_order so
         LEFT JOIN sys_user su ON so.user_id_ = su.id_
         LEFT JOIN organization o ON o.id_ = so.organ_id_
@@ -406,6 +411,9 @@
     </select>
 
     <select id="getSellOrderByParentGoodsId" resultMap="SellOrder">
-        SELECT * FROM sell_order WHERE order_id_ = #{orderId} AND parent_goods_id_ = #{parentGoodsId}
+        SELECT * FROM sell_order WHERE order_id_ = #{orderId}
+        <if test="parentGoodsId != null">
+            AND parent_goods_id_ = #{parentGoodsId}
+        </if>
     </select>
 </mapper>

+ 4 - 3
mec-biz/src/main/resources/config/mybatis/SubjectChangeMapper.xml

@@ -15,6 +15,7 @@
         <result column="cooperationOrganName" property="cooperationOrganName"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="musicGroupName" property="musicGroupName"/>
+        <result column="original_order_id_" property="originalOrderId"/>
         <result column="original_subject_id_" property="originalSubjectId"/>
         <result column="original_course_fee_" property="originalCourseFee"/>
         <result column="original_musical_" property="originalMusical"/>
@@ -49,7 +50,7 @@
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         id_,edu_teacher_id_,student_id_,organ_id_,cooperation_organ_id_,
-        music_group_id_,original_subject_id_,original_course_fee_, original_musical_,
+        music_group_id_,original_order_id_,original_subject_id_,original_course_fee_, original_musical_,
         original_musical_price_,
         original_accessories_,original_accessories_price_,kit_group_purchase_type_,change_subject_id_,
         change_course_fee_, change_musical_,
@@ -74,7 +75,7 @@
             useGeneratedKeys="true">
         <!--@mbg.generated-->
         insert into subject_change
-        (student_id_,edu_teacher_id_,organ_id_,cooperation_organ_id_,music_group_id_,original_subject_id_,original_course_fee_,
+        (student_id_,edu_teacher_id_,organ_id_,cooperation_organ_id_,music_group_id_,original_order_id_,original_subject_id_,original_course_fee_,
         original_musical_,
         original_musical_price_,original_accessories_,original_accessories_price_,original_cost_,kit_group_purchase_type_,
         change_subject_id_,change_course_fee_, change_musical_, change_musical_price_,
@@ -82,7 +83,7 @@
         course_margin_,cost_margin_,sell_amount_,order_id_,
         order_no_,trans_no_,status_,sell_time_, create_time_, update_time,version_)
         values
-        (#{studentId},#{eduTeacherId},#{organId},#{cooperationOrganId},#{musicGroupId},#{originalSubjectId},#{originalCourseFee},
+        (#{studentId},#{eduTeacherId},#{organId},#{cooperationOrganId},#{musicGroupId},#{originalOrderId},#{originalSubjectId},#{originalCourseFee},
         #{originalMusical},
         #{originalMusicalPrice},
         #{originalAccessories},