Browse Source

no message

FengChaoYu 8 months ago
parent
commit
84b83020ae

+ 12 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/manage/OldRefundManageRecordBean.java

@@ -0,0 +1,12 @@
+package com.gree.mall.manager.bean.material.manage;
+
+import com.gree.mall.manager.plus.entity.WebsitPartsOldRefundManageRecord;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class OldRefundManageRecordBean extends WebsitPartsOldRefundManageRecord {
+}

+ 7 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/manage/WebsitPartsSalesBean.java

@@ -1,6 +1,7 @@
 package com.gree.mall.manager.bean.material.manage;
 
 import com.gree.mall.manager.plus.entity.WebsitPartsSales;
+import com.gree.mall.manager.plus.entity.WebsitSalesPayOrder;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -15,4 +16,10 @@ public class WebsitPartsSalesBean extends WebsitPartsSales {
 
     @ApiModelProperty(value = "订单配件信息", required = true)
     private List<WebsitPartsSalesItemBean> itemList;
+
+    @ApiModelProperty(value = "支付记录列表", required = true)
+    private List<WebsitSalesPayOrder> payList;
+
+    @ApiModelProperty(value = "订单明细使用信息", required = true)
+    private List<OldRefundManageRecordBean> oldRefundManageRecordBeanList;
 }

+ 9 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/MaterialMapper.java

@@ -299,4 +299,13 @@ public interface MaterialMapper {
      * @return
      */
     IPage<WebsitPartsSalesWVO> websitPartsSalesWPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+    /**
+     * 根据配件销售单id查询配件明细
+     * @param id
+     * @return
+     */
+    List<WebsitPartsSalesItemBean> selectItemBySalesOrderId(@Param("id") String id);
+
+    List<OldRefundManageRecordBean> queryOldRefundRecordById(@Param("id") String id);
 }

+ 1 - 0
mall-server-api/src/main/java/com/gree/mall/manager/constant/Constant.java

@@ -86,6 +86,7 @@ public class Constant {
         public final static String NEW_IN = "jsm:parts:new:in:";
         public static final String OLD_OUT = "jsm:parts:old:out:";
         public static final String NEW_REFUND = "jsm:parts:new:refund:";
+        public static final String PARTS_SALES = "jsm:lock:parts:sales:";
     }
     public class ChatMessage {
         public final static String MSG_TYPE_DOC = "docmsg";

+ 21 - 18
mall-server-api/src/main/java/com/gree/mall/manager/controller/material/manage/WebsitPartsSalesOrderController.java

@@ -6,6 +6,7 @@ import com.gree.mall.manager.annotation.ZfireList;
 import com.gree.mall.manager.bean.material.manage.WebsitPartsSalesBean;
 import com.gree.mall.manager.bean.material.manage.WebsitPartsSalesVO;
 import com.gree.mall.manager.bean.material.manage.WebsitPartsSalesWVO;
+import com.gree.mall.manager.constant.Constant;
 import com.gree.mall.manager.enums.material.SourceSalesEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.helper.ResponseHelper;
@@ -23,6 +24,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
 
 @Slf4j
 @RestController
@@ -49,30 +52,30 @@ public class WebsitPartsSalesOrderController {
         return ResponseHelper.success(partsSalesOrderBean);
     }
 
-//    @ApiOperation("配件销售单修改")
-//    @PostMapping("/update")
-//    public ResponseHelper<PartsSalesOrderBean> update(
-//            @RequestBody PartsSalesOrderBean partsSalesOrderBean
-//    ) throws Exception {
-//        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.PARTS_SALES + partsSalesOrderBean.getSalesOrderNo());
-//        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
-//            throw new RemoteServiceException("配件销售单冻结中");
-//        }
-//        try {
-//            websitPartsSalesOrderLogic.update(partsSalesOrderBean);
-//        } finally {
-//            obtain.unlock();
-//        }
-//
-//        return ResponseHelper.success(partsSalesOrderBean);
-//    }
+    @ApiOperation("配件销售单修改")
+    @PostMapping("/update")
+    public ResponseHelper<WebsitPartsSalesBean> update(
+            @RequestBody WebsitPartsSalesBean partsSalesOrderBean
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.PARTS_SALES + partsSalesOrderBean.getId());
+        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("配件销售单冻结中");
+        }
+        try {
+            websitPartsSalesOrderLogic.update(partsSalesOrderBean);
+        } finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success(partsSalesOrderBean);
+    }
 
     @ApiOperation("配件销售单根据id获取")
     @GetMapping("/loadSalesOrderById")
     public ResponseHelper<WebsitPartsSalesBean> loadSalesOrderById(
             @RequestParam String id
     ) throws RemoteServiceException {
-        return ResponseHelper.success(websitPartsSalesOrderLogic.loadSalesOrderById(id, null));
+        return ResponseHelper.success(websitPartsSalesOrderLogic.loadSalesOrderById(id));
     }
 
     @ZfireList

+ 88 - 10
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsSalesOrderLogic.java

@@ -9,6 +9,7 @@ import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.material.manage.*;
 import com.gree.mall.manager.commonmapper.MaterialMapper;
 import com.gree.mall.manager.enums.IsEnum;
+import com.gree.mall.manager.enums.IsYesNoEnum;
 import com.gree.mall.manager.enums.material.*;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
@@ -44,6 +45,21 @@ public class WebsitPartsSalesOrderLogic {
     private final WebsitStockService websitStockService;
     private final StorageService storageService;
     private final MaterialConfigService materialConfigService;
+    private final WebsitSalesPayOrderService websitSalesPayOrderService;
+
+    public IPage<WebsitPartsSalesVO> list(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.materialParam(zfireParamBean, WebsitPartsSalesVO.class, adminUser);
+
+        return materialMapper.websitPartsSalesPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+    }
+
+    public IPage<WebsitPartsSalesWVO> websitList(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.materialParam(zfireParamBean, WebsitPartsSalesWVO.class, adminUser);
+
+        return materialMapper.websitPartsSalesWPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+    }
 
     private Map<String, Object> validate(WebsitPartsSalesBean partsSalesOrderBean) {
         Map<String, Object> result = new HashMap<>();
@@ -325,22 +341,77 @@ public class WebsitPartsSalesOrderLogic {
         return partsSalesOrderItems;
     }
 
-    public WebsitPartsSalesBean loadSalesOrderById(String id, Object o) {
-        return null;
-    }
+    public WebsitPartsSalesBean loadSalesOrderById(String id) {
+        WebsitPartsSales partsSalesOrder = websitPartsSalesService.getById(id);
 
-    public IPage<WebsitPartsSalesVO> list(ZfireParamBean zfireParamBean) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-        FieldUtils.materialParam(zfireParamBean, WebsitPartsSalesVO.class, adminUser);
+        if(Objects.isNull(partsSalesOrder)) {
+            throw new RemoteServiceException("获取配件销售单失败") ;
+        }
 
-        return materialMapper.websitPartsSalesPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+        WebsitPartsSalesBean partsSalesOrderBean = new WebsitPartsSalesBean();
+        BeanUtils.copyProperties(partsSalesOrder, partsSalesOrderBean, WebsitPartsSalesBean.class);
+        List<WebsitPartsSalesItemBean> itemList = materialMapper.selectItemBySalesOrderId(partsSalesOrderBean.getId());
+        partsSalesOrderBean.setItemList(Collections.isEmpty(itemList) ? null : itemList);
+        List<WebsitSalesPayOrder> payList = websitSalesPayOrderService.lambdaQuery()
+                .eq(WebsitSalesPayOrder::getCompanyWechatId, partsSalesOrder.getCompanyWechatId())
+                .eq(WebsitSalesPayOrder::getPayFlag, IsYesNoEnum.YES.getKey())
+                .eq(WebsitSalesPayOrder::getOrderId, partsSalesOrderBean.getId())
+                .list();
+
+        partsSalesOrderBean.setPayList(payList);
+
+        // 配件使用记录
+        List<OldRefundManageRecordBean> oldRefundManageRecordBeans = materialMapper.queryOldRefundRecordById(partsSalesOrder.getId());
+        partsSalesOrderBean.setOldRefundManageRecordBeanList(oldRefundManageRecordBeans);
+
+        return partsSalesOrderBean;
     }
 
-    public IPage<WebsitPartsSalesWVO> websitList(ZfireParamBean zfireParamBean) {
+
+    public void update(WebsitPartsSalesBean partsSalesOrderBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
-        FieldUtils.materialParam(zfireParamBean, WebsitPartsSalesWVO.class, adminUser);
+        WebsitPartsSales partsSalesOrder = websitPartsSalesService.getById(partsSalesOrderBean.getId());
+        if(Objects.isNull(partsSalesOrder)) {
+            throw new RemoteServiceException("该配件销售单不存在");
+        }
+        //订单已提交,不能修改
+        if(!partsSalesOrder.getStatus().equals(PartsOrderStatusEnum.SAVE.getKey())) {
+            throw new RemoteServiceException("该配件销售单已提交,不能修改");
+        }
+        //一系列校验
+        Map<String, Object> validateMap = validate(partsSalesOrderBean);
+        if(validateMap.containsKey("isSuccess") && !Boolean.parseBoolean(validateMap.get("isSuccess").toString())) {
+            throw new RemoteServiceException(validateMap.get("msg").toString());
+        }
 
-        return materialMapper.websitPartsSalesWPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+        if (CollectionUtil.isEmpty(partsSalesOrderBean.getItemList())) {
+            throw new RemoteServiceException("请选择配件");
+        }
+
+        if (Objects.isNull(partsSalesOrderBean.getPayType())) {
+            // 默认通联
+            partsSalesOrderBean.setPayType(PayTypeEnum.ALLINPAY.getKey());
+        }
+
+        List<WebsitPartsSalesItemBean> itemList = partsSalesOrderBean.getItemList();
+        BigDecimal totalPrice = BigDecimal.ZERO;
+        for(WebsitPartsSalesItem partsSalesOrderItem : itemList) {
+            partsSalesOrderItem.setTotalAmount(partsSalesOrderItem.getSalesPrice().multiply(partsSalesOrderItem.getQty())
+                    .setScale(2, BigDecimal.ROUND_HALF_UP));
+            totalPrice = totalPrice.add(partsSalesOrderItem.getTotalAmount());
+        }
+
+        // 记录总金额
+        partsSalesOrderBean.setTotalPrice(totalPrice);
+        websitPartsSalesService.updateById(partsSalesOrderBean);
+        // 删除销售单配件明细
+        websitPartsSalesItemService.lambdaUpdate()
+                .eq(WebsitPartsSalesItem::getSalesId, partsSalesOrderBean.getId())
+                .remove();
+
+        // 保存销售单明细
+        List<WebsitPartsSalesItem> partsSalesOrderItems = this.createSalesOrderItem(partsSalesOrderBean, itemList);
+        websitPartsSalesItemService.saveBatch(partsSalesOrderItems);
     }
 
     /**
@@ -352,12 +423,19 @@ public class WebsitPartsSalesOrderLogic {
      */
     public WebsitStock queryPartsNewQty(String websitId, String partsWebsitId, String partsNumber) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
+        final Storage storage = storageService.lambdaQuery()
+                .eq(Storage::getCompanyWechatId, adminUser.getCompanyWechatId())
+                .eq(Storage::getWebsitId, websitId)
+                .eq(Storage::getIsDefault, IsEnum.Y.getValue())
+                .one();
         return websitStockService.lambdaQuery()
                 .eq(WebsitStock::getCompanyWechatId, adminUser.getCompanyWechatId())
                 .eq(WebsitStock::getGoodsType, WebsitGoodsTypeEnum.P.getKey())
                 .eq(WebsitStock::getGoodsId, partsNumber)
                 .eq(WebsitStock::getWebsitId, websitId)
+                .eq(WebsitStock::getStorageId, storage.getStorageId())
                 .eq(WebsitStock::getPartsWebsitId, partsWebsitId)
                 .one();
     }
+
 }

+ 43 - 0
mall-server-api/src/main/resources/mapper/MaterialMapper.xml

@@ -615,4 +615,47 @@
         </if>
         ${ex.orderBy}
     </select>
+
+    <select id="selectItemBySalesOrderId"
+            resultType="com.gree.mall.manager.bean.material.manage.WebsitPartsSalesItemBean">
+        select
+            a.id ,
+            a.identity ,
+            a.websit_id,
+            a.parts_websit_id,
+            a.parts_id,
+            a.parts_number,
+            a.parts_name,
+            a.material_group_name,
+            a.unit_name,
+            a.sales_id,
+            a.sales_price,
+            a.market_price,
+            a.second_price,
+            IF(d.status = 'END', a.examine_qty, a.qty) AS qty,
+            a.examine_qty,
+            a.new_refund_qty,
+            a.old_refund_qty ,
+            a.total_amount,
+            a.push_flag ,
+            a.create_by ,
+            a.create_time,
+            a.update_by,
+            a.update_time,
+            IFNULL(c.qty, 0) stockQty
+        FROM websit_parts_sales_item a JOIN websit_goods b ON a.parts_id = b.goods_id
+                                      LEFT JOIN websit_stock c ON a.websit_id = c.websit_id AND a.parts_number = c.goods_id AND a.parts_websit_id = c.parts_websit_id
+                                      JOIN websit_parts_sales d ON a.sales_id = d.id
+        WHERE a.sales_id = #{id}
+    </select>
+
+    <select id="queryOldRefundRecordById"
+            resultType="com.gree.mall.manager.bean.material.manage.OldRefundManageRecordBean">
+        SELECT
+            a.*
+        FROM
+            websit_parts_old_refund_manage_record a
+        WHERE
+            sales_id = #{id}
+    </select>
 </mapper>