Browse Source

Merge branch 'zx_saas_goods' into test

刘俊驰 1 year ago
parent
commit
b8af10a450

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRepairDao.java

@@ -98,4 +98,6 @@ public interface StudentRepairDao extends com.ym.mec.common.dal.BaseDAO<Integer,
      * @return int
      */
     List<Integer> countStuEducation(@Param("studentId") Integer studentId);
+
+    StudentRepair getByOrderNo(@Param("orderNo") String orderNo);
 }

+ 16 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -89,6 +89,10 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
     private SysAreaService sysAreaService;
 
     @Autowired
+    private StudentRepairDao studentRepairDao;
+
+
+    @Autowired
     private StudentPaymentOrderAddressService studentPaymentOrderAddressService;
     @Override
     public BaseDAO<Integer, SellOrder> getDAO() {
@@ -281,7 +285,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
     @Transactional(rollbackFor = Exception.class)
     public void addOrderDetail2SellOrder(List<StudentPaymentOrderDetail> orderDetails,
                                                     StudentPaymentOrder studentPaymentOrder, String musicGroupId) {
-        //过非商品详情
+        //过非商品详情
         List<StudentPaymentOrderDetail> goodsOrderDetails = orderDetails.stream().filter(e -> StringUtils.isNotEmpty(e.getGoodsIdList())).collect(Collectors.toList());
         if(CollectionUtils.isEmpty(goodsOrderDetails)){
             return;
@@ -305,7 +309,8 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         //剩余待分配的优惠券金额
         BigDecimal subDetailCouponRemitFee = detailTotalRemitPrice;
         //剩余待分配现金
-        BigDecimal subDetailActualAmount = detailTotalPrice.subtract(balancePaymentAmount);
+        BigDecimal totalDetailActualAmount = detailTotalPrice.subtract(balancePaymentAmount);
+        BigDecimal subDetailActualAmount = totalDetailActualAmount;
         for (int i = 0; i < goodsOrderDetails.size(); i++) {
             StudentPaymentOrderDetail orderDetail = goodsOrderDetails.get(i);
             //获取支付金额比例
@@ -336,10 +341,10 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 detailBalance = balancePaymentAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_DOWN);
                 subDetailBalance = subDetailBalance.subtract(detailBalance);
                 //获取分配的优惠券金额
-                couponRemitFee = orderDetail.getRemitFee().multiply(ratioCouponAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+                couponRemitFee = detailTotalRemitPrice.multiply(ratioCouponAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
                 subDetailCouponRemitFee = subDetailCouponRemitFee.subtract(couponRemitFee);
                 //获取剩余待分配的现金
-                detailActualAmount = orderDetail.getPrice().subtract(detailBalance);
+                detailActualAmount = totalDetailActualAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_DOWN);
                 subDetailActualAmount = subDetailActualAmount.subtract(detailActualAmount);
             }
             List<Integer> goodsIds = Arrays.asList(orderDetail.getGoodsIdList().split(",")).stream().map(Integer::parseInt).collect(Collectors.toList());
@@ -682,6 +687,13 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 mallOrder.setReceiverDetailAddress(one.getAddress());
 
             }
+        } else if (studentPaymentOrder.getType() == OrderTypeEnum.REPAIR) {
+            StudentRepair studentRepair = studentRepairDao.getByOrderNo(studentPaymentOrder.getOrderNo());
+            if (studentRepair != null) {
+                mallOrder.setReceiverName(studentRepair.getContactName());
+                mallOrder.setReceiverPhone(studentRepair.getContactMobile());
+                mallOrder.setReceiverDetailAddress(studentRepair.getAddress());
+            }
         }
 
         CommonResult<Boolean> result = mallFeignService.productOrderCreate(mallOrder);

+ 23 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -2239,16 +2239,32 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if(CollectionUtils.isEmpty(sellOrders)){
             return;
         }
+        String format = DateUtil.format(new Date(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
         Map<String,List<SellOrder>> sellOrderMap = sellOrders.stream().collect(Collectors.groupingBy(SellOrder::getOrderNo));
-        Map<String,Map<Long,BigDecimal>> skuCostMap = new HashMap<>(orderSkuSyncs.size());
+//        Map<String,Map<Long,BigDecimal>> skuCostMap = new HashMap<>(orderSkuSyncs.size());
         for (OrderSkuSync orderSkuSync : orderSkuSyncs) {
             List<SellOrder> dtos = sellOrderMap.get(orderSkuSync.getOrderNo());
             if(CollectionUtils.isEmpty(dtos)){
                 continue;
             }
-            //获取sku平均成本价
+            Map<Long,List<SellOrder>> goodsSkuMap = dtos.stream().collect(Collectors.groupingBy(e->e.getGoodsSkuId().longValue()));
+            for (OrderSkuSync.SkuSync skuSync : orderSkuSync.getSkuSyncList()) {
+                List<SellOrder> sellOrderList = goodsSkuMap.get(skuSync.getSku());
+                for (int i = 0; i < skuSync.getCount(); i++) {
+                    SellOrder sellOrder = sellOrderList.get(i);
+                    if (sellOrder != null) {
+                        sellOrder.setDeliveryTime(format);
+                        sellOrder.setSellCost(skuSync.getPrice());
+                        sellOrder.setStockType(StringUtils.equalsIgnoreCase(skuSync.getType(),"INTERNAL")?StockType.INTERNAL:StockType.EXTERNAL);
+                    }
+                }
+            }
+
+
+/*            //获取sku平均成本价
             Map<Long,List<OrderSkuSync.SkuSync>> skuDetailMap = orderSkuSync.getSkuSyncList().stream().collect(Collectors.groupingBy(OrderSkuSync.SkuSync::getSku));
             Map<Long,BigDecimal> costMap = new HashMap<>(skuDetailMap.keySet().size());
+            Map<Long,String> stockMap = new HashMap<>(skuDetailMap.keySet().size());
             for (Long skuId : skuDetailMap.keySet()) {
                 List<OrderSkuSync.SkuSync> skuSyncs = skuDetailMap.get(skuId);
                 //汇总成本价
@@ -2260,12 +2276,12 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     avgCostPrice = costPrice.divide(new BigDecimal(count), 2, BigDecimal.ROUND_HALF_UP);
                 }
                 costMap.put(skuId,avgCostPrice);
+                stockMap.put(skuId,skuSyncs.get(0).getStock());
             }
-            skuCostMap.put(orderSkuSync.getOrderNo(),costMap);
+            skuCostMap.put(orderSkuSync.getOrderNo(),costMap);*/
         }
-        Date now = new Date();
-        String format = DateUtil.format(now, DateUtil.ISO_EXPANDED_DATE_FORMAT);
-        for (String orderNo : sellOrderMap.keySet()) {
+
+/*        for (String orderNo : sellOrderMap.keySet()) {
             List<SellOrder> sellOrderList = sellOrderMap.get(orderNo);
             Map<Long,BigDecimal> costMap = skuCostMap.get(orderNo);
             for (SellOrder sellOrder : sellOrderList) {
@@ -2276,7 +2292,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 sellOrder.setSellCost(costPrice);
                 sellOrder.setDeliveryTime(format);
             }
-        }
+        }*/
         sellOrderDao.batchUpdate(sellOrders);
 
     }

+ 35 - 203
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -446,11 +446,6 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             throw new BizException("已有未支付的声部更改,请勿重复创建");
         }
 
-        /*studentWaitPay = subjectChangeDao.getStudentLastChange(subjectChange.getStudentId(), musicGroupId);
-        if (studentWaitPay != null) {
-            throw new BizException("声部更换只能操作一次,请勿重复操作");
-        }*/
-
         Set<String> musicGroupIds = new HashSet<String>();
         musicGroupIds.add(musicGroupId);
 
@@ -527,15 +522,8 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         } else {
             subjectChange.setChangeAccessories(null);
         }
-        BigDecimal goodsPrice = BigDecimal.ZERO;
         List<Goods> goodies = goodsDao.findGoodsByIds(goodsIds);
-        for (Goods goods : goodies) {
-            goodsPrice = goodsPrice.add(goods.getDiscountPrice());
-        }
-        subjectChange.setChangeCost(goodsPrice);
-        
-        Map<Integer,Goods> goodsMap = goodies.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-        
+        subjectChange.setChangeCost(goodies.stream().map(Goods::getDiscountPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
         subjectChange.setCostMargin(subjectChange.getChangeCost().subtract(subjectChange.getOriginalCost()));
         //差价 <= 0
         BigDecimal amountMargin = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
@@ -552,7 +540,6 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
         subjectChangeDao.insert(subjectChange);
         //差价小于0退到余额
         if (amountMargin.compareTo(BigDecimal.ZERO) <= 0) {
-            //sysUserCashAccountService.updateBalance(subjectChange.getStudentId(), amountMargin.negate(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更换退还");
             if (amountMargin.compareTo(BigDecimal.ZERO) < 0) {
                 SysUserCashAccountLog sysUserCashAccountLog = new SysUserCashAccountLog();
                 sysUserCashAccountLog.setUserId(subjectChange.getStudentId());
@@ -592,205 +579,50 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
             //添加订单详情
             List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<StudentPaymentOrderDetail>();
-            StudentPaymentOrderDetail studentPaymentOrderDetail = null;
-        	Goods goods = null;
-			List<Integer> minuendStockGoodsIdList = null;
-			GoodsProcurement goodsProcurement = null;
-			Map<Long, GoodsProcurement> goodsProcurementMap = new HashMap<Long, GoodsProcurement>();
-			Map<Integer, Goods> batchUpdateGoodsMap = new HashMap<Integer, Goods>();
-			
-            for(String goodsIdStr : goodsIds.split(",")){
-        		if(StringUtils.isBlank(goodsIdStr)){
-					continue;
-				}
-				goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-				
-				if(goods != null){
-					studentPaymentOrderDetail = new StudentPaymentOrderDetail();
-	                studentPaymentOrderDetail.setCreateTime(nowDate);
-	                if(goods.getType() == GoodsType.INSTRUMENT){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
-	                	studentPaymentOrderDetail.setKitGroupPurchaseType(subjectChange.getKitGroupPurchaseType());
-	                }else if(goods.getType() == GoodsType.ACCESSORIES){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
-	                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
-	                }else{
-	                	studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
-	                }
-	                studentPaymentOrderDetail.setGoodsIdList(goodsIdStr);
-                	studentPaymentOrderDetail.setPrice(BigDecimal.ZERO);
-	                studentPaymentOrderDetail.setUpdateTime(nowDate);
-	                studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
-	              
-	                //忽略的分部
-	        		List<Integer> ignoreOrganList = Arrays.asList(4, 55, 59);
-	        		
-	        		//查询商品收款账户配置
-	                String goodsSellReceiptMerNo = sysConfigDao.findConfigValue("goodsSellReceiptMerNo");
-	                
-	                if(!ignoreOrganList.contains(subjectChange.getOrganId()) && StringUtils.isNotBlank(goodsSellReceiptMerNo)){
-	                	//扣减库存
-						
-						BigDecimal totalGroupPurchaseAmount = BigDecimal.ZERO;
-						
-						BigDecimal groupPurchaseAmount = BigDecimal.ZERO;
-						
-						minuendStockGoodsIdList = new ArrayList<Integer>();
-						
-						// 是否是组合商品
-						if(StringUtils.isNotBlank(goods.getComplementGoodsIdList())){
-							List<Goods> goodsList = goodsService.getGoodsWithLocked(goods.getComplementGoodsIdList());
-							totalGroupPurchaseAmount =  totalGroupPurchaseAmount.add(goodsList.stream().map(Goods :: getGroupPurchasePrice).reduce(BigDecimal.ZERO,BigDecimal :: add));
-							
-							for(Goods subGoods : goodsList){
-								
-								if(batchUpdateGoodsMap.get(subGoods.getId()) != null){
-									subGoods = batchUpdateGoodsMap.get(subGoods.getId());
-								}
-								//判断是否有内部库存
-								if(subGoods.getStockCount() > 0){
-									
-									groupPurchaseAmount = groupPurchaseAmount.add(subGoods.getGroupPurchasePrice());
-									subGoods.setStockCount(new AtomicInteger(subGoods.getStockCount()).decrementAndGet());
-									subGoods.setSellCount(new AtomicInteger(subGoods.getSellCount()).incrementAndGet());
-									subGoods.setUpdateTime(nowDate);
-									
-									batchUpdateGoodsMap.put(subGoods.getId(), subGoods);
-									
-									minuendStockGoodsIdList.add(subGoods.getId());
-									
-									goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(subGoods.getId());
-									if(goodsProcurement != null){
-										if(goodsProcurementMap.get(goodsProcurement.getId()) != null){
-											goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
-										}
-										goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
-										goodsProcurement.setUpdateTime(nowDate);
-										goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
-									}
-								}
-							}
-						}else{
-							totalGroupPurchaseAmount = totalGroupPurchaseAmount.add(goods.getGroupPurchasePrice());
-							
-							if(batchUpdateGoodsMap.get(goods.getId()) != null){
-								goods = batchUpdateGoodsMap.get(goods.getId());
-							}
-							
-							//判断是否有内部库存
-							if(goods.getStockCount() > 0){
-								
-								groupPurchaseAmount = groupPurchaseAmount.add(goods.getGroupPurchasePrice());
-								goods.setStockCount(new AtomicInteger(goods.getStockCount()).decrementAndGet());
-								goods.setSellCount(new AtomicInteger(goods.getSellCount()).incrementAndGet());
-								goods.setUpdateTime(nowDate);
-								batchUpdateGoodsMap.put(goods.getId(), goods);
-								
-								minuendStockGoodsIdList.add(goods.getId());
-								
-								goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
-								if(goodsProcurement != null){
-									if(goodsProcurementMap.get(goodsProcurement.getId()) != null){
-										goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
-									}
-									goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
-									goodsProcurement.setUpdateTime(nowDate);
-									goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
-								}
-							}
-						}
-						
-						if (minuendStockGoodsIdList.size() > 0) {
-							studentPaymentOrderDetail.setIncomeItem(OrderDetailTypeEnum.CLOUD_TEACHER.name());
-							studentPaymentOrderDetail.setIncome(BigDecimal.ZERO);
-							studentPaymentOrderDetail.setBalanceIncome(BigDecimal.ZERO);
-							if(minuendStockGoodsIdList.size() > 0){
-								studentPaymentOrderDetail.setMinuendStockGoodsIdList(minuendStockGoodsIdList.stream().map(t -> t.toString()).collect(Collectors.joining(",")));
-							}
-						}
-	                }
-	                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
-	                
-	                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
-	                
-	                //分部分润
-	                if(subjectChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0 && studentPaymentOrderDetail.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP) {
-	                	StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();
-	                    spod.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
-	                    spod.setPrice(subjectChange.getChangeCourseFee());
-	                    spod.setRemitFee(BigDecimal.ZERO);
-	                    spod.setCreateTime(nowDate);
-	                    spod.setUpdateTime(nowDate);
-	                    spod.setPaymentOrderId(studentPaymentOrder.getId());
-	                    spod.setTenantId(studentPaymentOrder.getTenantId());
-	                    studentPaymentOrderDetailList.add(spod);
-	                }
-				}
+            for (Goods goods : goodies) {
+                StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+                studentPaymentOrderDetail.setCreateTime(nowDate);
+                if(goods.getType() == GoodsType.INSTRUMENT){
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.MUSICAL);
+                    studentPaymentOrderDetail.setKitGroupPurchaseType(subjectChange.getKitGroupPurchaseType());
+                }else if(goods.getType() == GoodsType.ACCESSORIES){
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.ACCESSORIES);
+                }else if(goods.getType() == GoodsType.TEACHING || goods.getType() == GoodsType.STAFF){
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.TEACHING);
+                }else{
+                    studentPaymentOrderDetail.setType(OrderDetailTypeEnum.OTHER);
+                }
+                studentPaymentOrderDetail.setGoodsIdList(goods.getId().toString());
+                studentPaymentOrderDetail.setPrice(BigDecimal.ZERO);
+                studentPaymentOrderDetail.setUpdateTime(nowDate);
+                studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+                studentPaymentOrderDetail.setTenantId(studentPaymentOrder.getTenantId());
+                studentPaymentOrderDetailList.add(studentPaymentOrderDetail);
+                //分部分润
+                if(subjectChange.getChangeCourseFee().compareTo(BigDecimal.ZERO) > 0 && studentPaymentOrderDetail.getKitGroupPurchaseType() == KitGroupPurchaseTypeEnum.GROUP) {
+                    StudentPaymentOrderDetail spod = new StudentPaymentOrderDetail();
+                    spod.setType(OrderDetailTypeEnum.ORGAN_SHARE_PROFIT);
+                    spod.setPrice(subjectChange.getChangeCourseFee());
+                    spod.setRemitFee(BigDecimal.ZERO);
+                    spod.setCreateTime(nowDate);
+                    spod.setUpdateTime(nowDate);
+                    spod.setPaymentOrderId(studentPaymentOrder.getId());
+                    spod.setTenantId(studentPaymentOrder.getTenantId());
+                    studentPaymentOrderDetailList.add(spod);
+                }
         	}
-            
-            //原始订单的库存要归还
-            List<StudentPaymentOrderDetail> originalStudentPaymentOrderDetailList = new ArrayList<StudentPaymentOrderDetail>();
-            if(subjectChange.getOriginalOrderId() != null){
-            	originalStudentPaymentOrderDetailList = studentPaymentOrderDetailService.queryOrderDetail(subjectChange.getOriginalOrderId().longValue());
-            }
-            String originalGoodsIds = originalStudentPaymentOrderDetailList.stream().filter(t -> StringUtils.isNotBlank(t.getMinuendStockGoodsIdList())).map(t -> t.getMinuendStockGoodsIdList()).collect(Collectors.joining(","));
-            if(StringUtils.isNotBlank(originalGoodsIds)){
-            	List<Goods> goodsList = goodsService.getGoodsWithLocked(originalGoodsIds);
-            	goodsMap = goodsList.stream().collect(Collectors.toMap(Goods :: getId, t -> t));
-            	
-            	for(String goodsIdStr : originalGoodsIds.split(",")){
-            		if(StringUtils.isBlank(goodsIdStr)){
-						continue;
-					}
-					goods = goodsMap.get(Integer.parseInt(goodsIdStr));
-					if(batchUpdateGoodsMap.get(goods.getId()) != null){
-						goods = batchUpdateGoodsMap.get(goods.getId());
-					}
-					goods.setStockCount(new AtomicInteger(goods.getStockCount()).incrementAndGet());
-					goods.setSellCount(new AtomicInteger(goods.getSellCount()).decrementAndGet());
-					goods.setUpdateTime(nowDate);
-					
-					batchUpdateGoodsMap.put(goods.getId(), goods);
-					
-					// 进货清单
-					goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
-					if(goodsProcurement != null){
-						if(goodsProcurementMap.get(goodsProcurement.getId()) != null){
-							goodsProcurement = goodsProcurementMap.get(goodsProcurement.getId());
-						}
-						goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).decrementAndGet());
-						goodsProcurement.setUpdateTime(nowDate);
-						goodsProcurementMap.put(goodsProcurement.getId(), goodsProcurement);
-					}
-					
-            	}
-            }
-            
-            if(studentPaymentOrderDetailList.size() > 0){
+            if(!CollectionUtils.isEmpty(studentPaymentOrderDetailList)){
             	studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
             }
-			
-			if(goodsProcurementMap.size() > 0){
-				goodsProcurementDao.batchUpdate(new ArrayList<GoodsProcurement>(goodsProcurementMap.values()));
-			}
-    		
-    		if(batchUpdateGoodsMap.size() > 0){
-    			goodsService.batchUpdate(new ArrayList<Goods>(batchUpdateGoodsMap.values()));
-    		}
-
             //退原订单商品
     		if(subjectChange.getOriginalOrderId() != null) {
     			sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
     		}
 
             if (StringUtils.isNotBlank(goodsIds)) {
-                List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
+                List<Integer> goodsIdList = goodies.stream().map(Goods::getId).collect(Collectors.toList());
                 //添加新订单
-                this.addSellOrder(studentPaymentOrder,
-                        subjectChange.getMusicGroupId(),
-                        goodsIdList,
-                        subjectChange.getKitGroupPurchaseType());
+                sellOrderService.initSellOrder(studentPaymentOrder,musicGroupId,goodsIdList,subjectChange.getKitGroupPurchaseType(),true);
             }
             //乐保处理
             studentInstrumentService.subjectChangeUpdateInstrument(subjectChange);

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/StudentRepairMapper.xml

@@ -338,4 +338,11 @@
         SELECT pg.educational_teacher_id_ FROM practice_group pg
         WHERE pg.student_id_ = #{studentId}) sid
     </select>
+
+    <select id="getByOrderNo" resultMap="StudentRepair">
+        SELECT * FROM student_repair
+        WHERE
+            trans_no_ = #{orderNo}
+        limit 1
+    </select>
 </mapper>

+ 30 - 10
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/OmsOrderController.java

@@ -1,20 +1,23 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.yonge.cooleshow.admin.wrapper.OmsOrderWrapper;
 import com.yonge.cooleshow.mall.common.api.CommonPage;
 import com.yonge.cooleshow.mall.common.api.CommonResult;
 import com.yonge.cooleshow.admin.dto.*;
-import com.yonge.cooleshow.mbg.model.OmsOrder;
 import com.yonge.cooleshow.admin.service.OmsOrderService;
+import com.yonge.cooleshow.mall.common.enums.OrderCacheEnum;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 订单管理Controller
@@ -23,10 +26,13 @@ import java.util.Map;
 @Controller
 @Api(tags = "OmsOrderController", description = "订单管理")
 @RequestMapping("/order")
+@Slf4j
 public class OmsOrderController {
     @Autowired
     private OmsOrderService orderService;
 
+    @Autowired
+    private RedissonClient redissonClient;
     @ApiOperation("查询订单")
     @RequestMapping(value = "/list", method = RequestMethod.GET)
     @ResponseBody
@@ -41,10 +47,24 @@ public class OmsOrderController {
     @RequestMapping(value = "/update/delivery", method = RequestMethod.POST)
     @ResponseBody
     public CommonResult delivery(@RequestBody List<OmsOrderDeliveryParam> deliveryParamList) {
-        int count = orderService.delivery(deliveryParamList);
-        if (count > 0) {
-            return CommonResult.success(count);
+
+        RLock lock = redissonClient.getLock(OrderCacheEnum.LOCK_REFUND_ORDER_MALL + ":delivery");
+        try {
+            boolean b = lock.tryLock(60, 60, TimeUnit.SECONDS);
+            if (b) {
+                int count = orderService.delivery(deliveryParamList);
+                if (count > 0) {
+                    return CommonResult.success(count);
+                }
+            }
+        } catch (InterruptedException e) {
+            log.error("批量发货异常", e);
+        } finally {
+            if (lock.getHoldCount() >0) {
+                lock.unlock();
+            }
         }
+
         return CommonResult.failed();
     }
 
@@ -53,7 +73,7 @@ public class OmsOrderController {
     @ResponseBody
     public CommonResult close(@RequestParam("ids") List<Long> ids, @RequestParam String note) {
 
-        // int count = orderService.close(ids, note);
+//         int count = orderService.close(ids, note);
         // if (count > 0) {
         //     return CommonResult.success(count);
         // }
@@ -64,9 +84,9 @@ public class OmsOrderController {
     @ApiOperation("批量完成订单")
     @RequestMapping(value = "/update/success", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult success(@RequestBody List<Long> ids) {
+    public CommonResult success(@RequestBody @Validated OmsOrderWrapper.OrderStatusUpdate orderStatusUpdate) {
 
-         int count = orderService.success(ids);
+         int count = orderService.updateStatus(orderStatusUpdate);
         // if (count > 0) {
         //     return CommonResult.success(count);
         // }

+ 2 - 1
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.service;
 import com.yonge.cooleshow.admin.dto.*;
 import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
+import com.yonge.cooleshow.admin.wrapper.OmsOrderWrapper;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -101,5 +102,5 @@ public interface OmsOrderService {
     // 同步订单状态,
     boolean productUpdateOrderStatus(String orderNo, Integer status);
 
-    int success(List<Long> ids);
+    int updateStatus(OmsOrderWrapper.OrderStatusUpdate orderStatusUpdate);
 }

+ 8 - 6
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java

@@ -17,6 +17,7 @@ import com.yonge.cooleshow.admin.dto.search.OrderStatisticalSearch;
 import com.yonge.cooleshow.admin.dto.search.UserStatisticalSearch;
 import com.yonge.cooleshow.admin.enums.OrderStatisticalEnum;
 import com.yonge.cooleshow.admin.service.*;
+import com.yonge.cooleshow.admin.wrapper.OmsOrderWrapper;
 import com.yonge.cooleshow.mbg.mapper.*;
 import com.yonge.cooleshow.mbg.model.*;
 import lombok.extern.slf4j.Slf4j;
@@ -810,23 +811,24 @@ public class OmsOrderServiceImpl implements OmsOrderService {
     // 直接修改订单状态为完成
     @Override
     @Transactional
-    public int success(List<Long> ids) {
+    public int updateStatus(OmsOrderWrapper.OrderStatusUpdate orderStatusUpdate) {
+
         OmsOrder record = new OmsOrder();
-        record.setStatus(3);
+        record.setStatus(orderStatusUpdate.getStatus());
         OmsOrderExample example = new OmsOrderExample();
-        example.createCriteria().andDeleteStatusEqualTo(0).andIdIn(ids);
+        example.createCriteria().andDeleteStatusEqualTo(0).andIdIn(orderStatusUpdate.getIds());
         orderMapper.updateByExampleSelective(record, example);
 
 
         //添加操作记录
-        List<OmsOrderOperateHistory> operateHistoryList = ids.stream()
+        List<OmsOrderOperateHistory> operateHistoryList = orderStatusUpdate.getIds().stream()
             .map(id -> {
                 OmsOrderOperateHistory history = new OmsOrderOperateHistory();
                 history.setOrderId(id);
                 history.setCreateTime(new Date());
                 history.setOperateMan("后台管理员");
-                history.setOrderStatus(3);
-                history.setNote("订单完成");
+                history.setOrderStatus(orderStatusUpdate.getStatus());
+                history.setNote("修改订单状态");
                 return history;
             }).collect(Collectors.toList());
         return orderOperateHistoryDao.insertList(operateHistoryList);

+ 26 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/wrapper/OmsOrderWrapper.java

@@ -0,0 +1,26 @@
+package com.yonge.cooleshow.admin.wrapper;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+public class OmsOrderWrapper {
+
+    @Data
+    public static class OrderStatusUpdate {
+
+        // 订单ID集合
+        @ApiModelProperty("订单ID集合")
+        @NotNull(message = "订单ID集合不能为空")
+        @NotEmpty(message = "订单ID集合不能为空")
+        private List<Long> ids;
+
+        // 状态
+        @ApiModelProperty("订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单")
+        @NotNull(message = "订单状态不能为空")
+        private Integer status;
+    }
+}

+ 3 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -249,10 +249,13 @@ public class Payment {
                 LOGGER.warn("调用汇付[关单]接口同步返回,出现异常:{}", paymentClose);
 
                 result.put("status", "success");
+                return result;
             }
             result.put("status", "failed");
             result.put ("msg",paymentClose.get("error_msg").toString());
+            return result;
         }
+        result.put("status", "success");
 
         return result;
     }