Bläddra i källkod

Merge remote-tracking branch 'origin/develop' into develop

‘linchangsheng’ 7 månader sedan
förälder
incheckning
2b00ded832
35 ändrade filer med 945 tillägg och 73 borttagningar
  1. 1 1
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/MaterialSalesFlagEnum.java
  2. 2 1
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/PayTypeEnum.java
  3. 18 3
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/AllInPayLogic.java
  4. 29 0
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/material/parts/WebsitPartsSalesOrderLogic.java
  5. 2 2
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/user/PayLogic.java
  6. 2 4
      mall-server-api/src/main/java/com/gree/mall/manager/bean/listvo/workorder/OrderBaseVO.java
  7. 2 2
      mall-server-api/src/main/java/com/gree/mall/manager/bean/material/base/WorkerGoodsVO.java
  8. 87 0
      mall-server-api/src/main/java/com/gree/mall/manager/bean/material/manage/WebsitPartsCreditBean.java
  9. 109 0
      mall-server-api/src/main/java/com/gree/mall/manager/bean/material/manage/WebsitPartsCreditItemVO.java
  10. 46 0
      mall-server-api/src/main/java/com/gree/mall/manager/bean/material/manage/WebsitPartsCreditVO.java
  11. 1 1
      mall-server-api/src/main/java/com/gree/mall/manager/bean/material/report/WorkerPurchaseCategoryBean.java
  12. 1 0
      mall-server-api/src/main/java/com/gree/mall/manager/bean/material/worker/OldRefundManageVO.java
  13. 24 8
      mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/MaterialMapper.java
  14. 132 0
      mall-server-api/src/main/java/com/gree/mall/manager/controller/material/manage/WebsitPartsCreditController.java
  15. 17 0
      mall-server-api/src/main/java/com/gree/mall/manager/controller/material/manage/WebsitPartsSalesOrderController.java
  16. 20 9
      mall-server-api/src/main/java/com/gree/mall/manager/controller/websit/WebsitSalesRetController.java
  17. 1 1
      mall-server-api/src/main/java/com/gree/mall/manager/enums/material/MaterialSalesFlagEnum.java
  18. 28 0
      mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PartsCreditEnum.java
  19. 1 1
      mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PartsPayFlagEnum.java
  20. 2 1
      mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PayTypeEnum.java
  21. 1 0
      mall-server-api/src/main/java/com/gree/mall/manager/enums/material/SalesPayOrderSourceEnum.java
  22. 9 3
      mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminRoleLogic.java
  23. 30 2
      mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminWebsitLogic.java
  24. 1 0
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/base/WebsitGoodsLogic.java
  25. 192 0
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsCreditLogic.java
  26. 2 2
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsNewInLogic.java
  27. 48 0
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsSalesOrderLogic.java
  28. 5 1
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitSalesLogic.java
  29. 1 1
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/report/ReportLogic.java
  30. 11 0
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/stock/WorkerStockLogic.java
  31. 27 7
      mall-server-api/src/main/java/com/gree/mall/manager/logic/material/worker/NewRefundManageLogic.java
  32. 17 13
      mall-server-api/src/main/java/com/gree/mall/manager/logic/websit/WebsitSalesRetLogic.java
  33. 1 1
      mall-server-api/src/main/resources/bootstrap-test.properties
  34. 18 2
      mall-server-api/src/main/resources/mapper/CommonMapper.xml
  35. 57 7
      mall-server-api/src/main/resources/mapper/MaterialMapper.xml

+ 1 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/MaterialSalesFlagEnum.java

@@ -15,7 +15,7 @@ public enum MaterialSalesFlagEnum implements BaseEnum {
     SAVE("SAVE","保存"),
     SUBMIT("SUBMIT","提交"),
     PAY_NOT_TAKE("PAY_NOT_TAKE","已支付,未提货"),
-    PAY_TAKE("PAY_TAKE","已支付,已提货"),
+    PAY_TAKE("PAY_TAKE","已提货"),
     CANCEL("CANCEL","取消订单"),
     ;
 

+ 2 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/PayTypeEnum.java

@@ -10,7 +10,8 @@ public enum PayTypeEnum implements BaseEnum {
     ALLINPAY("ALLINPAY","通联支付"),
     TRANSFER("TRANSFER","转账支付"),
     STORE("STORE","到店支付"),
-    LINE("LINE","线下支付");
+    LINE("LINE","线下支付"),
+    CREDIT("CREDIT","记账"),;
 
     PayTypeEnum(String key, String remark) {
         this.key=key;this.remark = remark;

+ 18 - 3
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/AllInPayLogic.java

@@ -6,14 +6,15 @@ import com.alibaba.fastjson.TypeReference;
 import com.gree.mall.miniapp.constant.SybConstants;
 import com.gree.mall.miniapp.enums.IsYesNoEnum;
 import com.gree.mall.miniapp.enums.PayOrderTypeEnum;
+import com.gree.mall.miniapp.enums.PayTypeEnum;
 import com.gree.mall.miniapp.enums.material.PartsOrderStatusEnum;
 import com.gree.mall.miniapp.enums.material.PartsPayFlagEnum;
 import com.gree.mall.miniapp.exception.RemoteServiceException;
 import com.gree.mall.miniapp.logic.material.parts.WebsitPartsSalesOrderLogic;
-import com.gree.mall.miniapp.plus.entity.WebsitPartsSales;
-import com.gree.mall.miniapp.plus.entity.WebsitSales;
-import com.gree.mall.miniapp.plus.entity.WebsitSalesPayOrder;
+import com.gree.mall.miniapp.plus.entity.*;
 import com.gree.mall.miniapp.plus.service.WebsitPartsSalesService;
+import com.gree.mall.miniapp.plus.service.WebsitPartsWorkerCreditRecordService;
+import com.gree.mall.miniapp.plus.service.WebsitSalesItemService;
 import com.gree.mall.miniapp.plus.service.WebsitSalesService;
 import com.gree.mall.miniapp.utils.ArithUtils;
 import com.gree.mall.miniapp.utils.DateUtils;
@@ -47,6 +48,10 @@ public class AllInPayLogic {
     WebsitPartsSalesService websitPartsSalesService;
     @Resource
     WebsitPartsSalesOrderLogic websitPartsSalesOrderLogic;
+    @Resource
+    WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
+    @Resource
+    WebsitSalesItemService websitSalesItemService;
 
     /**
      * 通联支付
@@ -207,8 +212,13 @@ public class AllInPayLogic {
                             .set(WebsitSales::getFlag, "PAY_NOT_TAKE")
                             .set(WebsitSales::getPayTime, DateUtils.parseDate2(fintime))
                             .set(WebsitSales::getPayNo, chnltrxid)
+                            .set(WebsitSales::getPayType, PayTypeEnum.ALLINPAY.getKey())
                             .eq(WebsitSales::getSalesId, order.getOrderId())
                             .update();
+                    websitSalesItemService.lambdaUpdate()
+                            .set(WebsitSalesItem::getPayType, PayTypeEnum.ALLINPAY.getKey())
+                            .eq(WebsitSalesItem::getSalesId, order.getOrderId())
+                            .update();
                 } else if (order.getOrderId().contains("PJ") && order.getOrderType().equals(PayOrderTypeEnum.S.getKey())) {
                     try {
                         log.info("执行配件库存处理方法");
@@ -230,6 +240,11 @@ public class AllInPayLogic {
                     } catch (Exception e) {
                         log.info("配件销售单库存处理异常:" + e.getMessage());
                     }
+                } else if (order.getOrderId().contains("PC") && order.getOrderType().equals(PayOrderTypeEnum.S.getKey())) {
+                    WebsitPartsWorkerCreditRecord record = websitPartsWorkerCreditRecordService.getById(order.getOrderId());
+                    record.setCreditStatus(true)
+                            .setRecAmountMode(PayTypeEnum.ALLINPAY.getKey())
+                            .updateById();
                 }
 
                 order.setPayFlag(IsYesNoEnum.YES.getKey())

+ 29 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/material/parts/WebsitPartsSalesOrderLogic.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.gree.mall.miniapp.bean.material.parts.OldRefundManageRecordBean;
 import com.gree.mall.miniapp.bean.material.parts.PartsSalesOrderBean;
 import com.gree.mall.miniapp.bean.material.parts.PartsSalesOrderItemBean;
@@ -63,6 +64,8 @@ public class WebsitPartsSalesOrderLogic {
     MaterialMapper materialMapper;
     @Resource
     WebsitSalesPayOrderService websitSalesPayOrderService;
+    @Resource
+    WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
 
     public void handlePaySuccessMethod(WebsitSalesPayOrder order) throws Exception {
         // 更新配件销售单状态为已支付
@@ -622,17 +625,43 @@ public class WebsitPartsSalesOrderLogic {
     private void updateSalesItem(PartsSalesOrderBean partsSalesOrderBean) {
         if(CollectionUtil.isNotEmpty(partsSalesOrderBean.getItemList())) {
             List<WebsitPartsSalesItem> itemList = new ArrayList<>();
+            List<WebsitPartsWorkerCreditRecord> recordList = new ArrayList<>();
             for(PartsSalesOrderItemBean itemBean : partsSalesOrderBean.getItemList()) {
                 itemBean.setPushFlag(partsSalesOrderBean.getPushFlag());
                 itemBean.setExamineTime(partsSalesOrderBean.getExamineTime());
                 if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CASH.getKey())) {
                     itemBean.setRefundAmountMode(PayTypeEnum.CASH.getKey());
+                } else if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CREDIT.getKey())) {
+                    itemBean.setRefundAmountMode(PayTypeEnum.CREDIT.getKey());
+
+                    recordList.add(new WebsitPartsWorkerCreditRecord()
+                            .setId("PC" + IdWorker.getIdStr())
+                            .setCompanyWechatId(partsSalesOrderBean.getCompanyWechatId())
+                            .setCompanyWechatName(partsSalesOrderBean.getCompanyWechatName())
+                            .setWebsitId(partsSalesOrderBean.getWebsitId())
+                            .setWebsitName(partsSalesOrderBean.getWebsitName())
+                            .setMobile(partsSalesOrderBean.getMobile())
+                            .setSalesId(partsSalesOrderBean.getId())
+                            .setSalesItemId(itemBean.getId())
+                            .setPartsNumber(itemBean.getPartsNumber())
+                            .setPartsName(itemBean.getPartsName())
+                            .setSalesPrice(itemBean.getSalesPrice())
+                            .setMarketPrice(itemBean.getMarketPrice())
+                            .setSecondPrice(itemBean.getSecondPrice())
+                            .setQty(itemBean.getQty())
+                            .setTotalAmount(itemBean.getTotalAmount())
+                            .setCreditStatus(Boolean.FALSE)
+                            .setRecAmountMode(itemBean.getRefundAmountMode())
+                    );
                 } else {
                     itemBean.setRefundAmountMode(PayTypeEnum.WECHAT.getKey());
                 }
                 itemList.add(itemBean);
             }
             websitPartsSalesItemService.saveOrUpdateBatch(itemList);
+            if (CollectionUtil.isNotEmpty(recordList)) {
+                websitPartsWorkerCreditRecordService.saveBatch(recordList);
+            }
         }
     }
 }

+ 2 - 2
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/user/PayLogic.java

@@ -927,8 +927,8 @@ public class PayLogic {
 
 
     public void allinpayCallback(HttpServletRequest request) throws UnsupportedEncodingException {
-        TreeMap<String,String> params = getParams(request);//动态遍历获取所有收到的参数,此步非常关键,因为收银宝以后可能会加字段,动态获取可以兼容
-        log.info("通联回调: {}", JSONUtil.toJsonStr(params));
+        TreeMap<String, String> params = getParams(request);//动态遍历获取所有收到的参数,此步非常关键,因为收银宝以后可能会加字段,动态获取可以兼容
+        log.info("通联回调: {} {}", params.get("trxid"), JSONUtil.toJsonStr(params));
     }
 
     /**

+ 2 - 4
mall-server-api/src/main/java/com/gree/mall/manager/bean/listvo/workorder/OrderBaseVO.java

@@ -1,10 +1,8 @@
 package com.gree.mall.manager.bean.listvo.workorder;
 
 import com.gree.mall.manager.annotation.ZfireField;
-import com.gree.mall.manager.enums.OrderStatusEnum;
 import com.gree.mall.manager.enums.workorder.OrderBaseStatusEnum;
 import com.gree.mall.manager.enums.workorder.SaleTypeEnum;
-import com.gree.mall.manager.plus.entity.PgOrderBase;
 import com.gree.mall.manager.plus.entity.PgOrderFlag;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -29,10 +27,10 @@ public class OrderBaseVO     {
     @ApiModelProperty(value = "网点名称")
     private String websitName;
 
-    @ZfireField(sortNum = 4)
+    @ZfireField(sortNum = 4, isShow = false)
     @ApiModelProperty(value = "增值服务售卖网点")
     private String pgIncreWebsitName;
-    @ZfireField(sortNum = 4)
+    @ZfireField(sortNum = 4, isShow = false)
     @ApiModelProperty("结算费用")
     private BigDecimal settleServiceAmount;
 

+ 2 - 2
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/base/WorkerGoodsVO.java

@@ -43,8 +43,8 @@ public class WorkerGoodsVO {
     @ApiModelProperty(value = "商品小类")
     private String categoryName;
 
-    @ApiModelProperty(value = "商品代码")
-    private String goodsCode;
+//    @ApiModelProperty(value = "商品代码")
+//    private String goodsCode;
 
     @ApiModelProperty(value = "是否小件")
     private IsEnum isSmall;

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

@@ -0,0 +1,87 @@
+package com.gree.mall.manager.bean.material.manage;
+
+import com.gree.mall.manager.plus.entity.WebsitPartsSalesItem;
+import com.gree.mall.manager.plus.entity.WebsitSalesPayOrder;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel
+@Data
+public class WebsitPartsCreditBean {
+
+    @ApiModelProperty(value = "网点编号")
+    private String websitId;
+
+    @ApiModelProperty(value = "网点名称")
+    private String websitName;
+
+    @ApiModelProperty(value = "购买方 WORKER=师傅 CUSTOMER=外部客户")
+    private String buyPeople;
+
+    @ApiModelProperty(value = "师傅身份证")
+    private String identity;
+
+    @ApiModelProperty(value = "师傅编号")
+    private String workerId;
+
+    @ApiModelProperty(value = "师傅名称")
+    private String workerName;
+
+    @ApiModelProperty(value = "申请类别")
+    private String applyCategory;
+
+    @ApiModelProperty(value = "申请类型 0-普通申请 1-急件申请 2-备件申请")
+    private Integer applyType;
+
+    @ApiModelProperty(value = "发货方式 0-快递 1-自提")
+    private Integer deliveryType;
+
+    @ApiModelProperty(value = "联系电话")
+    private String mobile;
+
+    @ApiModelProperty(value = "接收单位")
+    private String receiveUnit;
+
+    @ApiModelProperty(value = "发货单位")
+    private String deliveryUnit;
+
+    @ApiModelProperty(value = "收件地址")
+    private String receiveAddr;
+
+    @ApiModelProperty(value = "收件地址-详细地址")
+    private String addr;
+
+    @ApiModelProperty(value = "单据来源 ONLINE=在线订单 SELF=自建订单")
+    private String orderSource;
+
+    @ApiModelProperty(value = "订单金额")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty(value = "支付方式 CASH=现金  ALLINPAY=通联 CREDIT=记账")
+    private String payType;
+
+    @ApiModelProperty(value = "下单时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "应收金额")
+    private BigDecimal itemTotalAmount;
+
+    @ApiModelProperty(value = "收款状态 true=已收款  false=未收款")
+    private Boolean creditStatus;
+
+    @ApiModelProperty(value = "收款人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "收款时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "明细")
+    private WebsitPartsSalesItem item;
+
+    @ApiModelProperty(value = "明细")
+    private WebsitSalesPayOrder payOrder;
+}

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

@@ -0,0 +1,109 @@
+package com.gree.mall.manager.bean.material.manage;
+
+import com.gree.mall.manager.annotation.ZfireField;
+import com.gree.mall.manager.enums.material.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel
+@ZfireField(tbName = "a")
+public class WebsitPartsCreditItemVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "销售单号")
+    private String salesId;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("销售类型")
+    private BuyPeopleEnum buyPeople;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("申请类别")
+    private PartsApplyCategoryEnum applyCategory;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "网点编号")
+    private String websitId;
+
+    @ApiModelProperty(value = "网点名称")
+    private String websitName;
+
+    @ApiModelProperty("申请人")
+    private String workerName;
+
+    @ApiModelProperty("联系电话")
+    private String mobile;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("申请类型")
+    private PartsApplyTypeEnum applyType;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("发货方式")
+    private DeliveryTypeEnum deliveryType;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("接收单位")
+    private String receiveUnit;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("发货单位")
+    private String deliveryUnit;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("详细地址")
+    private String address;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("订单来源")
+    private SourceSalesEnum orderSource;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("订单状态")
+    private PartsOrderStatusEnum status;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty("支付状态")
+    private PartsPayFlagEnum payFlag;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("创建人")
+    private String createBy;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("配件名称")
+    private String partsName;
+
+    @ApiModelProperty("销售价")
+    private BigDecimal salesPrice;
+
+    @ApiModelProperty("优惠价")
+    private BigDecimal secondPrice;
+
+    @ApiModelProperty("数量")
+    private Integer qty;
+
+    @ApiModelProperty("应收金额")
+    private BigDecimal totalAmount;
+
+    @ApiModelProperty("收款状态")
+    private PartsCreditEnum creditStatus;
+
+    @ApiModelProperty("收款人")
+    private String updateBy;
+
+    @ApiModelProperty("收款时间")
+    private Date updateTime;
+}

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

@@ -0,0 +1,46 @@
+package com.gree.mall.manager.bean.material.manage;
+
+import com.gree.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel
+@ZfireField(tbName = "a")
+public class WebsitPartsCreditVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "网点编号")
+    private String websitId;
+
+    @ApiModelProperty(value = "网点名称")
+    private String websitName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "师傅编号")
+    private String workerId;
+
+    @ApiModelProperty(value = "师傅姓名")
+    private String workerName;
+
+    @ApiModelProperty(value = "师傅身份证")
+    private String identity;
+
+    @ApiModelProperty(value = "师傅联系电话")
+    private String mobile;
+
+    @ApiModelProperty(value = "记账总金额")
+    private BigDecimal total;
+
+    @ApiModelProperty(value = "记账总金额")
+    private BigDecimal recTotal;
+
+    @ApiModelProperty(value = "记账总金额")
+    private BigDecimal creditTotal;
+
+    @ApiModelProperty(value = "更新时间")
+    private Data updateTime;
+}

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/report/WorkerPurchaseCategoryBean.java

@@ -16,7 +16,7 @@ public class WorkerPurchaseCategoryBean {
     @ApiModelProperty(value = "网点编号")
     private String websitId;
     @ApiModelProperty(value = "网点名称")
-    private String websiteName;
+    private String websitName;
     @ApiModelProperty(value = "师傅编号")
     private String workerId;
     @ApiModelProperty(value = "师傅名称")

+ 1 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/material/worker/OldRefundManageVO.java

@@ -35,6 +35,7 @@ public class OldRefundManageVO {
 //    @ApiModelProperty(value = "返还方式")
 //    private PartsRefundModeEnum refundMode;
 
+    @ZfireField(isQuery = false)
     @ApiModelProperty(value = "维修标识")
     private PartsRepairFlagEnum repairFlag;
 

+ 24 - 8
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/MaterialMapper.java

@@ -364,8 +364,8 @@ public interface MaterialMapper {
      * @return
      */
     List<MaterialSalesSumBean> workerBuySum(@Param("companyWechatId") String companyWechatId,
-                                            @Param("startDate") String startDate,
-                                            @Param("endDate") String endDate,
+                                            @Param("startTime") String startDate,
+                                            @Param("endTime") String endDate,
                                             @Param("websits") List<String> websits,
                                             @Param("websitId") String websitId,
                                             @Param("workerMobile") String workerMobile,
@@ -383,8 +383,8 @@ public interface MaterialMapper {
      * @return
      */
     List<MaterialSalesSumDetailBean> workerBuyDetail(@Param("companyWechatId") String companyWechatId,
-                                                        @Param("startDate") String startDate,
-                                                        @Param("endDate") String endDate,
+                                                        @Param("startTime") String startDate,
+                                                        @Param("endTime") String endDate,
                                                         @Param("websits") List<String> websits,
                                                         @Param("websitId") String websitId,
                                                         @Param("workerMobile") String workerMobile);
@@ -402,8 +402,8 @@ public interface MaterialMapper {
      * @return
      */
     List<MaterialSalesSumDetailBean> workerBuySumDetail(@Param("companyWechatId") String companyWechatId,
-                                                        @Param("startDate") String startDate,
-                                                        @Param("endDate") String endDate,
+                                                        @Param("startTime") String startDate,
+                                                        @Param("endTime") String endDate,
                                                         @Param("websits") List<String> websits,
                                                         @Param("websitId") String websitId,
                                                         @Param("workerMobile") String workerMobile,
@@ -423,8 +423,8 @@ public interface MaterialMapper {
      * @return
      */
     List<MaterialSalesSumDetailBean> sumBuyDetail(@Param("companyWechatId") String companyWechatId,
-                                                  @Param("startDate") String startDate,
-                                                  @Param("endDate") String endDate,
+                                                  @Param("startTime") String startDate,
+                                                  @Param("endTime") String endDate,
                                                   @Param("websits") List<String> websits,
                                                   @Param("websitId") String websitId,
                                                   @Param("workerMobile") String workerMobile,
@@ -479,4 +479,20 @@ public interface MaterialMapper {
     List<WorkerPurchaseCategoryBean> getWorkerMonthSummaryData(@Param("companyWechatId") String companyWechatId,
                                                                @Param("startDate") String startDate,
                                                                @Param("endDate") String endDate);
+
+    /**
+     * 网点汇总记账列表
+     * @param page
+     * @param zfireParamBean
+     * @return
+     */
+    IPage<WebsitPartsCreditVO> websitPartsCreditPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+    /**
+     * 网点记账列表
+     * @param page
+     * @param zfireParamBean
+     * @return
+     */
+    IPage<WebsitPartsCreditItemVO> websitPartsCreditItemPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
 }

+ 132 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/material/manage/WebsitPartsCreditController.java

@@ -0,0 +1,132 @@
+package com.gree.mall.manager.controller.material.manage;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.manager.annotation.ZfireList;
+import com.gree.mall.manager.bean.PayDetail;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsCreditBean;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsCreditItemVO;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsCreditVO;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsSalesBean;
+import com.gree.mall.manager.constant.Constant;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.helper.ResponseHelper;
+import com.gree.mall.manager.logic.material.manage.WebsitPartsCreditLogic;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+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
+@Api(value = "网点配件记账管理", tags ={"网点配件记账管理"} )
+@RequestMapping(value = "/parts/credit", produces = "application/json; charset=utf-8")
+public class WebsitPartsCreditController {
+
+    @Resource
+    WebsitPartsCreditLogic websitPartsCreditLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
+
+    @ZfireList
+    @PostMapping("/gather/list")
+    @ApiOperation(value = "网点汇总记账-列表")
+    public ResponseHelper<IPage<WebsitPartsCreditVO>> gatherPage(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) {
+        IPage<WebsitPartsCreditVO> page = websitPartsCreditLogic.gatherPage(zfireParamBean);
+        return ResponseHelper.success(page, new TypeReference<WebsitPartsCreditVO>() {});
+    }
+
+    @PostMapping("/gather/list/export")
+    @ApiOperation("网点汇总记账-列表导出")
+    public void gatherListExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //2.查询要导出的内容
+        IPage<WebsitPartsCreditVO> baseVOIPage = websitPartsCreditLogic.gatherPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(baseVOIPage.getRecords(), zfireParamBean.getExportFields(), request, response);
+    }
+
+    @ZfireList
+    @PostMapping("/list")
+    @ApiOperation(value = "网点记账-列表")
+    public ResponseHelper<IPage<WebsitPartsCreditItemVO>> page(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) {
+        IPage<WebsitPartsCreditItemVO> page = websitPartsCreditLogic.page(zfireParamBean);
+        return ResponseHelper.success(page, new TypeReference<WebsitPartsCreditItemVO>() {});
+    }
+
+    @PostMapping("/list/export")
+    @ApiOperation("网点记账-列表导出")
+    public void listExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //2.查询要导出的内容
+        IPage<WebsitPartsCreditItemVO> baseVOIPage = websitPartsCreditLogic.page(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(baseVOIPage.getRecords(), zfireParamBean.getExportFields(), request, response);
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation("网点记账-详情")
+    public ResponseHelper<WebsitPartsCreditBean> detail(
+            @ApiParam(value = "id", required = true) @RequestParam String id
+    ) throws Exception {
+        WebsitPartsCreditBean bean = websitPartsCreditLogic.detail(id);
+        return ResponseHelper.success(bean);
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("网点记账-更新备注")
+    public ResponseHelper update(
+            @ApiParam(value = "id", required = true) @RequestParam String id,
+            @ApiParam(value = "备注") @RequestParam(required = false) String remark
+    ) throws Exception {
+        websitPartsCreditLogic.update(id, remark);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "生成支付二维码")
+    @PostMapping("/code")
+    public ResponseHelper<PayDetail> generateCode(
+            @ApiParam(value = "记账id", required = true) @RequestParam String id,
+            @ApiParam(value = "网点支付配置id") @RequestParam(required = false) String payConfigId
+    ) throws Exception {
+        return ResponseHelper.success(websitPartsCreditLogic.generateCode(id, payConfigId));
+    }
+
+    @ApiOperation("现金支付")
+    @PostMapping("/change-cash")
+    public ResponseHelper<WebsitPartsSalesBean> changeCash(@ApiParam(value = "记账id", required = true) @RequestParam String id) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.PARTS_SALES + id);
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("记账记录冻结中");
+        }
+        try {
+            websitPartsCreditLogic.changeCash(id);
+            return ResponseHelper.success();
+        } catch (Exception e) {
+            log.error("【记账记录处理】失败", e);
+            throw e;
+        } finally {
+            obtain.unlock();
+        }
+    }
+}

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

@@ -180,6 +180,23 @@ public class WebsitPartsSalesOrderController {
         }
     }
 
+    @ApiOperation("记账")
+    @PostMapping("/change-credit")
+    public ResponseHelper<WebsitPartsSalesBean> changeCredit(@ApiParam(value = "销售单号", required = true) @RequestParam String id) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.PARTS_SALES + id);
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("销售单冻结中");
+        }
+        try {
+            return ResponseHelper.success(websitPartsSalesOrderLogic.changeCredit(id));
+        } catch (Exception e) {
+            log.error("【提交订单处理】失败", e);
+            throw e;
+        } finally {
+            obtain.unlock();
+        }
+    }
+
     @ApiOperation("网点提货")
     @PostMapping("/confirm/delivery")
     public ResponseHelper confirmDelivery(

+ 20 - 9
mall-server-api/src/main/java/com/gree/mall/manager/controller/websit/WebsitSalesRetController.java

@@ -2,18 +2,13 @@ package com.gree.mall.manager.controller.websit;
 
 import cn.hutool.core.lang.TypeReference;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gree.mall.manager.annotation.ZfireList;
-import com.gree.mall.manager.bean.FreightTemplateVO;
-import com.gree.mall.manager.bean.template.TemplateBean;
 import com.gree.mall.manager.bean.websit.WebsitSalesRetAddUP;
 import com.gree.mall.manager.bean.websit.WebsitSalesRetDetail;
 import com.gree.mall.manager.bean.websit.WebsitSalesRetVO;
+import com.gree.mall.manager.constant.Constant;
 import com.gree.mall.manager.helper.ResponseHelper;
-import com.gree.mall.manager.logic.websit.WebsitLogic;
 import com.gree.mall.manager.logic.websit.WebsitSalesRetLogic;
-import com.gree.mall.manager.plus.entity.AdminWebsit;
-import com.gree.mall.manager.plus.entity.WebsitSalesRet;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
 import com.gree.mall.manager.zfire.util.FieldUtils;
 import io.swagger.annotations.Api;
@@ -21,12 +16,16 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.integration.redis.util.RedisLockRegistry;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.text.ParseException;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
 
 @Slf4j
 @RestController
@@ -36,7 +35,8 @@ public class WebsitSalesRetController {
 
     @Autowired
     private WebsitSalesRetLogic websitSalesRetLogic;
-
+    @Resource
+    RedisLockRegistry redisLockRegistry;
 
     @ZfireList
     @PostMapping("/list/pageV2")
@@ -64,8 +64,19 @@ public class WebsitSalesRetController {
     public ResponseHelper save(
             @RequestBody WebsitSalesRetAddUP websitSalesRetAddUP,
             HttpServletRequest request
-    ) throws ParseException {
-        websitSalesRetLogic.save(websitSalesRetAddUP);
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.MATERIAL_SALES + websitSalesRetAddUP.getSalesId());
+        try {
+            if (obtain.tryLock(5, TimeUnit.SECONDS)) {
+                websitSalesRetLogic.save(websitSalesRetAddUP);
+            }
+        } catch (Exception e) {
+            log.error("【辅材退货订单处理】失败", e);
+            throw e;
+        } finally {
+            obtain.unlock();
+        }
+
         return ResponseHelper.success();
     }
 

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/enums/material/MaterialSalesFlagEnum.java

@@ -15,7 +15,7 @@ public enum MaterialSalesFlagEnum implements BaseEnum {
     SAVE("SAVE","保存"),
     SUBMIT("SUBMIT","提交"),
     PAY_NOT_TAKE("PAY_NOT_TAKE","已支付,未提货"),
-    PAY_TAKE("PAY_TAKE","已支付,已提货"),
+    PAY_TAKE("PAY_TAKE","已提货"),
     CANCEL("CANCEL","取消订单"),
     IMPORT_WAIT("IMPORT_WAIT","导入待处理"),
     IMPORT_ERR("IMPORT_ERR","导入处理失败"),

+ 28 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PartsCreditEnum.java

@@ -0,0 +1,28 @@
+package com.gree.mall.manager.enums.material;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.manager.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@Getter
+@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+public enum PartsCreditEnum implements BaseEnum,IEnum<Boolean> {
+    NOT("true","未收款"),
+    END("false","已收款"),
+    ;
+
+    @EnumValue
+    @JsonValue
+    private final String key;
+    private final String remark;
+
+
+    @Override
+    public Boolean getValue() {
+        return Boolean.parseBoolean(key);
+    }
+}

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PartsPayFlagEnum.java

@@ -12,7 +12,7 @@ import lombok.RequiredArgsConstructor;
 public enum PartsPayFlagEnum implements BaseEnum {
     NOT("NOT","未支付"),
     PAY_NOT_TAKE("PAY_NOT_TAKE","已付未提货"),
-    PAY_TAKE("PAY_TAKE","已提货"),
+    PAY_TAKE("PAY_TAKE","已提货"),
     PAY_NOT_STOCK("PAY_NOT_STOCK","已付缺货");
 
     @EnumValue

+ 2 - 1
mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PayTypeEnum.java

@@ -15,7 +15,8 @@ public enum PayTypeEnum implements BaseEnum {
     ALLINPAY("ALLINPAY","通联支付"),
     ENGIN("ENGIN","工程支付"),
     TRANSFER("TRANSFER","转账支付"),
-    LINE("LINE","线下支付")
+    LINE("LINE","线下支付"),
+    CREDIT("CREDIT","记账")
     ;
 
     @EnumValue

+ 1 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/material/SalesPayOrderSourceEnum.java

@@ -15,6 +15,7 @@ public enum SalesPayOrderSourceEnum implements BaseEnum {
     SALES_RET("SALES_RET","辅材销售退货"),
     NEW_PARTS_RET("NEW_PARTS_RET","配件返还"),
     OLD_PARTS_RET("OLD_PARTS_RET","旧配件返还"),
+    PARTS_CREDIT("PARTS_CREDIT","配件记账"),
     ;
 
     @EnumValue

+ 9 - 3
mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminRoleLogic.java

@@ -38,17 +38,23 @@ public class AdminRoleLogic {
         AdminUserCom adminUser = commonLogic.getAdminUser(request);
         List<String> companyWechatIds = adminUser.getCompanyWechatIds();
 
-        Integer type = adminRoleService.getById(adminUser.getRoleId()).getType();
+        final AdminRole role = adminRoleService.getById(adminUser.getRoleId());
+        Integer type = role.getType();
+
         if("admin".equals(adminUser.getUserName())){
             type = RoleTypeEnum.ADMIN.getCode();
+        } else if ("企业负责人".equals(role.getName())) {
+            type = RoleTypeEnum.ADMIN.getCode();
         }
 
-        return adminRoleService.lambdaQuery()
-                .like(StringUtils.isNotBlank(companyWechatName),AdminRole::getCompanyName,companyWechatName)
+        Page<AdminRole> rolePage = adminRoleService.lambdaQuery()
+                .like(StringUtils.isNotBlank(companyWechatName), AdminRole::getCompanyName, companyWechatName)
                 .le(AdminRole::getType, type)
                 .in(CollectionUtils.isNotEmpty(companyWechatIds), AdminRole::getCompanyWechatId, companyWechatIds)
                 .orderByDesc(AdminRole::getType)
                 .page(new Page<>(pageNo, pageSize));
+
+        return rolePage;
     }
 
     /**

+ 30 - 2
mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminWebsitLogic.java

@@ -8,6 +8,7 @@ import com.gree.mall.manager.bean.ExcelData;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.admin.AdminWebsitNewBean;
 import com.gree.mall.manager.bean.admin.AdminWebsitTree;
+import com.gree.mall.manager.bean.admin.reqDto.AdminUserAddReqBean;
 import com.gree.mall.manager.bean.workorder.AdminWebsitList;
 import com.gree.mall.manager.enums.ExamineStatusEnum;
 import com.gree.mall.manager.enums.admin.AdminWebsitTypeEnum;
@@ -69,6 +70,8 @@ public class AdminWebsitLogic {
 
     @Autowired
     WebsitDispatchService websitDispatchService;
+    @Resource
+    AdminUserLogic adminUserLogic;
 //    @Autowired
 //    EnterpriseWechatWorkerLogic enterpriseWechatWorkerLogic;
 
@@ -235,6 +238,25 @@ public class AdminWebsitLogic {
         adminDeptWebsit.setWebsitName(adminWebsit.getName());
         adminDeptWebsit.setDeptName(adminDept.getDeptName());
         adminDeptWebsit.insert();
+
+        // 网点新增账号
+        if (adminWebsit.getType().equals(AdminWebsitTypeEnum.C.getKey()))
+            this.addAdminUser(adminWebsit);
+    }
+
+    private void addAdminUser(AdminWebsitNewBean adminWebsit) {
+        AdminUserAddReqBean adminUser = new AdminUserAddReqBean();
+        adminUser.setCompanyWechatId(adminWebsit.getCompanyWechatId())
+                .setCompanyName(adminWebsit.getCompanyWechatName())
+                .setUserName(adminWebsit.getWebsitId())
+                .setNickName(adminWebsit.getName())
+                .setRoleId("1831614042544427009")
+                .setPassword(adminWebsit.getWebsitPhone())
+                .setPubNotice(true)
+                .setIsVender(false)
+                .setLinkPhone(adminWebsit.getWebsitPhone());
+        adminUser.setAdminWebsitId(Collections.singletonList(adminWebsit.getWebsitId()));
+        adminUserLogic.add(adminUser, false);
     }
 
     private void initMaterialStorage(AdminUserCom adminUser, AdminWebsit adminWebsit) {
@@ -708,7 +730,6 @@ public class AdminWebsitLogic {
                 }
             }
 
-
             for (AdminWebsit websit : adminWebsitList) {
                 reloadJoinCode(websit.getCompanyWechatId(), websit.getJoinCode());
 
@@ -724,11 +745,18 @@ public class AdminWebsitLogic {
                 adminDeptWebsit.setWebsitName(websit.getName());
                 adminDeptWebsit.setDeptName(adminDept.getDeptName());
                 adminDeptWebsit.insert();
-            }
 
+                // 网点新增账号
+                if (websit.getType().equals(AdminWebsitTypeEnum.C.getKey())) {
+                    AdminWebsitNewBean reqBean = new AdminWebsitNewBean();
+                    BeanUtils.copyProperties(websit, reqBean);
+                    this.addAdminUser(reqBean);
+                }
+            }
             if (CollectionUtil.isNotEmpty(allPayConfigList)) {
                 adminWebsitPayConfigService.saveBatch(allPayConfigList);
             }
+
             adminWebsitService.saveBatch(adminWebsitList);
         }
     }

+ 1 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/base/WebsitGoodsLogic.java

@@ -181,6 +181,7 @@ public class WebsitGoodsLogic {
                 .ne(StringUtils.isNotBlank(goods.getGoodsId()), WebsitGoods::getGoodsId, goods.getGoodsId())
                 .eq(goods.getGoodsType().equals(WebsitGoodsTypeEnum.M.getKey()), WebsitGoods::getGoodsName, goods.getGoodsName())
                 .eq(goods.getGoodsType().equals(WebsitGoodsTypeEnum.P.getKey()), WebsitGoods::getGoodsCode, goods.getGoodsCode())
+                .eq(goods.getGoodsType().equals(WebsitGoodsTypeEnum.M.getKey()), WebsitGoods::getGoodsSpecification, goods.getGoodsSpecification())
                 .eq(WebsitGoods::getGoodsType, goods.getGoodsType())
                 .eq(WebsitGoods::getNormType, goods.getNormType())
                 .count();

+ 192 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsCreditLogic.java

@@ -0,0 +1,192 @@
+package com.gree.mall.manager.logic.material.manage;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.manager.bean.PayDetail;
+import com.gree.mall.manager.bean.admin.AdminUserCom;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsCreditBean;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsCreditItemVO;
+import com.gree.mall.manager.bean.material.manage.WebsitPartsCreditVO;
+import com.gree.mall.manager.commonmapper.MaterialMapper;
+import com.gree.mall.manager.constant.SybConstants;
+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.AllInPayLogic;
+import com.gree.mall.manager.logic.common.CommonLogic;
+import com.gree.mall.manager.plus.entity.*;
+import com.gree.mall.manager.plus.service.*;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class WebsitPartsCreditLogic {
+
+    private final CommonLogic commonLogic;
+    private final MaterialMapper materialMapper;
+    private final WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
+    private final WebsitPartsSalesService websitPartsSalesService;
+    private final WebsitPartsSalesItemService websitPartsSalesItemService;
+    private final WebsitSalesPayOrderService websitSalesPayOrderService;
+    private final AdminWebsitPayConfigService adminWebsitPayConfigService;
+    private final AllInPayLogic allInPayLogic;
+    private final AdminWebsitService adminWebsitService;
+
+    public IPage<WebsitPartsCreditVO> gatherPage(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.materialParam(zfireParamBean, WebsitPartsCreditVO.class, adminUser);
+        IPage<WebsitPartsCreditVO> page = materialMapper.websitPartsCreditPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+        return page;
+    }
+
+    public IPage<WebsitPartsCreditItemVO> page(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.materialParam(zfireParamBean, WebsitPartsCreditItemVO.class, adminUser);
+        IPage<WebsitPartsCreditItemVO> page = materialMapper.websitPartsCreditItemPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+        return page;
+    }
+
+
+    public WebsitPartsCreditBean detail(String id) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        final WebsitPartsWorkerCreditRecord record = websitPartsWorkerCreditRecordService.getById(id);
+        if (Objects.isNull(id)) {
+            throw new RemoteServiceException("单号不存在");
+        }
+        final WebsitPartsSales sales = websitPartsSalesService.lambdaQuery()
+                .eq(WebsitPartsSales::getCompanyWechatId, adminUser.getCompanyWechatId())
+                .eq(WebsitPartsSales::getId, record.getSalesId())
+                .one();
+        if (Objects.isNull(sales)) {
+            throw new RemoteServiceException("单号不存在");
+        }
+        final WebsitPartsSalesItem item = websitPartsSalesItemService.getById(record.getSalesItemId());
+        final WebsitSalesPayOrder payOrder = websitSalesPayOrderService.lambdaQuery()
+                .eq(WebsitSalesPayOrder::getOrderId, record.getId())
+                .eq(WebsitSalesPayOrder::getPayFlag, true)
+                .last("limit 1")
+                .one();
+        WebsitPartsCreditBean bean = new WebsitPartsCreditBean();
+        BeanUtils.copyProperties(sales, bean);
+        bean.setCreditStatus(record.getCreditStatus());
+        bean.setItemTotalAmount(record.getTotalAmount());
+        bean.setItem(item);
+        bean.setPayOrder(payOrder);
+        if (!bean.getCreditStatus()) {
+            bean.setUpdateBy(null);
+            bean.setUpdateTime(null);
+        }
+
+        return bean;
+    }
+
+    public PayDetail generateCode(String id, String payConfigId) {
+        WebsitPartsWorkerCreditRecord record = websitPartsWorkerCreditRecordService.getById(id);
+        if (Objects.isNull(record)) {
+            throw new RemoteServiceException("记账记录不存在");
+        }
+        if (record.getCreditStatus()) {
+            throw new RemoteServiceException("已收款记录");
+        }
+        final AdminWebsitPayConfig payConfig = adminWebsitPayConfigService.getById(payConfigId);
+        if (Objects.isNull(payConfig) || !payConfig.getStatus()) {
+            throw new RemoteServiceException("支付配置信息异常");
+        }
+
+        // 通联扫码支付
+        WebsitSalesPayOrder payOrder = new WebsitSalesPayOrder();
+        payOrder.setId(IdWorker.getIdStr())
+                .setCompanyWechatId(record.getCompanyWechatId())
+                .setCompanyWechatName(record.getCompanyWechatName())
+                .setGoodsType(WebsitGoodsTypeEnum.P.getKey())
+                .setWebsitId(record.getWebsitId())
+                .setWebsitName(record.getWebsitName())
+                .setOrderId(record.getId())
+                .setOutTradeNo(payOrder.getId())
+                .setPayType(PayTypeEnum.ALLINPAY.getKey())
+                .setOrderCreateTime(record.getCreateTime())
+                .setPayValue(record.getTotalAmount())
+                .setOrgId(payConfig.getOrgId())
+                .setMchNo(payConfig.getMchNo())
+                .setAppid(payConfig.getAppid())
+                .setOrderType(PayOrderTypeEnum.S.getKey())
+                .setRunTime(DateUtil.offsetSecond(DateUtil.date(), 15))
+                .setOrderSource(SalesPayOrderSourceEnum.P_SALES.getKey())
+                .setIsDeliver(false);
+
+        //生成失效时间
+        Date createDate = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(createDate);
+        calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + 360);
+        payOrder.setTimeExpire(calendar.getTime());
+        // 请求通联得到结果
+        Map<String, String> resMap = allInPayLogic.serviceUnifiedOrder(payOrder, SybConstants.PAY_TYPE_W01);
+
+        if (!resMap.get("trxstatus").equals("0000")) {
+            throw new RemoteServiceException("通联统一支付接口执行失败:" + resMap.get("errmsg"));
+        }
+
+        payOrder.setOrderNo(resMap.get("trxid"))
+                .insert();
+
+        PayDetail payDetail = new PayDetail();
+        payDetail.setCodeUrl(resMap.get("payinfo"));
+        payDetail.setId(payOrder.getId());
+        payDetail.setPayAmount(record.getTotalAmount());
+        payDetail.setTimeExpire(payOrder.getTimeExpire());
+        log.info("通联支付payDetail:{}", JSONObject.toJSONString(payDetail));
+        return payDetail;
+    }
+
+    public void changeCash(String id) {
+        WebsitPartsWorkerCreditRecord record = websitPartsWorkerCreditRecordService.getById(id);
+        AdminWebsit websit = adminWebsitService.getById(record.getWebsitId());
+        if (!websit.getPartsIsCash()) {
+            throw new RemoteServiceException("当前配件网点不支付现金方式");
+        }
+        if (record.getCreditStatus()) {
+            throw new RemoteServiceException("已收款记录");
+        }
+        record.setCreditStatus(PartsCreditEnum.END.getValue())
+                .setRecAmountMode(PayTypeEnum.CASH.getKey())
+                .updateById();
+
+        new WebsitSalesPayOrder()
+                .setCompanyWechatId(record.getCompanyWechatId())
+                .setCompanyWechatName(record.getCompanyWechatName())
+                .setGoodsType(WebsitGoodsTypeEnum.P.getKey())
+                .setWebsitId(record.getWebsitId())
+                .setWebsitName(record.getWebsitName())
+                .setOrderId(record.getId())
+                .setPayType(PayTypeEnum.CASH.getKey())
+                .setPayFlag(IsYesNoEnum.YES.getKey())
+                .setOrderCreateTime(record.getCreateTime())
+                .setPayValue(record.getTotalAmount())
+                .setPayTime(DateUtil.date())
+                .setOrderType(PayOrderTypeEnum.S.getKey())
+                .setOrderSource(SalesPayOrderSourceEnum.PARTS_CREDIT.getKey())
+                .insert();
+    }
+
+    public void update(String id, String remark) {
+        websitPartsWorkerCreditRecordService.lambdaUpdate()
+                .set(WebsitPartsWorkerCreditRecord::getRemark, remark)
+                .eq(WebsitPartsWorkerCreditRecord::getId, id)
+                .update();
+    }
+}

+ 2 - 2
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitPartsNewInLogic.java

@@ -135,8 +135,8 @@ public class WebsitPartsNewInLogic {
             String sendUnitArea = (String) row.get(20);
             String receiveUnitArea = (String) row.get(21);
             String repairCustomNo = (String) row.get(22);
-            if (StringUtils.isBlank(objectType) || !"新件申领".contains(objectType)) {
-                throw new RemoteServiceException("第" + (i + 2) + "行,事物类型格式不符,只能是“新件申领”");
+            if (StringUtils.isBlank(objectType) || !"新件申领,调整库存".contains(objectType)) {
+                throw new RemoteServiceException("第" + (i + 2) + "行,事物类型格式不符,只能是“新件申领“或”调整库存”");
             }
             if (StringUtils.isBlank(voucherNo)) {
                 throw new RemoteServiceException("第" + (i + 2) + "行,凭证号不能为空");

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

@@ -61,6 +61,7 @@ public class WebsitPartsSalesOrderLogic {
     private final AdminWebsitPayConfigService adminWebsitPayConfigService;
     private final AllInPayLogic allInPayLogic;
     private final MaterialGoodsStockLogic materialGoodsStockLogic;
+    private final WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
 
     public IPage<WebsitPartsSalesVO> list(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -590,6 +591,27 @@ public class WebsitPartsSalesOrderLogic {
         return partsSalesOrderBean;
     }
 
+    @Transactional
+    public Object changeCredit(String id) throws Exception {
+        WebsitPartsSalesBean partsSalesOrderBean = this.loadSalesOrderById(id);
+        AdminWebsit websit = adminWebsitService.getById(partsSalesOrderBean.getWebsitId());
+        if (!websit.getPartsIsCash()) {
+            throw new RemoteServiceException("当前配件网点不支付记账方式");
+        }
+
+        // 现金订单改为已支付未提货状态
+        partsSalesOrderBean.setStatus(PartsOrderStatusEnum.PAYED.getKey());
+        partsSalesOrderBean.setPayFlag(PartsPayFlagEnum.PAY_NOT_TAKE.getKey());
+        partsSalesOrderBean.setPayType(PayTypeEnum.CREDIT.getKey());
+
+        this.handleForwardWebsitAndWorkerStock(partsSalesOrderBean);
+
+
+        websitPartsSalesService.saveOrUpdate(partsSalesOrderBean);
+
+        return partsSalesOrderBean;
+    }
+
     private void handleForwardWebsitAndWorkerStock(WebsitPartsSalesBean partsSalesOrderBean) throws Exception {
         // 扣减网点库存
         List<WebsitStockDTO> shopStockDTOList = this.getWebsitStock(partsSalesOrderBean, DirectFlagEnum.SUB, PartsRefTypeEnum.SALES.getRemark());
@@ -675,17 +697,43 @@ public class WebsitPartsSalesOrderLogic {
     private void updateSalesItem(WebsitPartsSalesBean partsSalesOrderBean) {
         if(CollectionUtil.isNotEmpty(partsSalesOrderBean.getItemList())) {
             List<WebsitPartsSalesItem> itemList = new ArrayList<>();
+            List<WebsitPartsWorkerCreditRecord> recordList = new ArrayList<>();
             for(WebsitPartsSalesItemBean itemBean : partsSalesOrderBean.getItemList()) {
                 itemBean.setPushFlag(partsSalesOrderBean.getPushFlag());
                 itemBean.setExamineTime(partsSalesOrderBean.getExamineTime());
                 if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CASH.getKey())) {
                     itemBean.setRefundAmountMode(PayTypeEnum.CASH.getKey());
+                } else if (partsSalesOrderBean.getPayType().equals(PayTypeEnum.CREDIT.getKey())) {
+                    itemBean.setRefundAmountMode(PayTypeEnum.CREDIT.getKey());
+
+                    recordList.add(new WebsitPartsWorkerCreditRecord()
+                            .setId("PC" + IdWorker.getIdStr())
+                            .setCompanyWechatId(partsSalesOrderBean.getCompanyWechatId())
+                            .setCompanyWechatName(partsSalesOrderBean.getCompanyWechatName())
+                            .setWebsitId(partsSalesOrderBean.getWebsitId())
+                            .setWebsitName(partsSalesOrderBean.getWebsitName())
+                            .setMobile(partsSalesOrderBean.getMobile())
+                            .setSalesId(partsSalesOrderBean.getId())
+                            .setSalesItemId(itemBean.getId())
+                            .setPartsNumber(itemBean.getPartsNumber())
+                            .setPartsName(itemBean.getPartsName())
+                            .setSalesPrice(itemBean.getSalesPrice())
+                            .setMarketPrice(itemBean.getMarketPrice())
+                            .setSecondPrice(itemBean.getSecondPrice())
+                            .setQty(itemBean.getQty())
+                            .setTotalAmount(itemBean.getTotalAmount())
+                            .setCreditStatus(Boolean.FALSE)
+                            .setRecAmountMode(itemBean.getRefundAmountMode())
+                    );
                 } else {
                     itemBean.setRefundAmountMode(PayTypeEnum.WECHAT.getKey());
                 }
                 itemList.add(itemBean);
             }
             websitPartsSalesItemService.saveOrUpdateBatch(itemList);
+            if (CollectionUtil.isNotEmpty(recordList)) {
+                websitPartsWorkerCreditRecordService.saveBatch(recordList);
+            }
         }
     }
 

+ 5 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/manage/WebsitSalesLogic.java

@@ -561,8 +561,12 @@ public class WebsitSalesLogic {
                 .eq(WebsitSales::getSalesId, salesId)
                 .update();
 
-        if (sales.getSalesType().equals(WebsitSalesTypeEnum.ENGIN.getName())) {
+        websitSalesItemService.lambdaUpdate()
+                .set(WebsitSalesItem::getPayType, PayTypeEnum.CASH.getKey())
+                .eq(WebsitSalesItem::getSalesId, salesId)
+                .update();
 
+        if (sales.getSalesType().equals(WebsitSalesTypeEnum.ENGIN.getName())) {
             websitGoodsMangerLogic.givePrice(sales.getTotalAmount(), sales.getOrderEnginBaseId(), null, null, salesId, sales.getGoodsType());
             websitGoodsMangerLogic.upManage(sales.getOrderEnginBaseId(), sales.getGoodsType());
         }

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/report/ReportLogic.java

@@ -515,7 +515,7 @@ public class ReportLogic {
             List<Object> row = new ArrayList<>();
             row.add(bean.getYearMonth());
             row.add(bean.getWebsitId());
-            row.add(bean.getWebsiteName());
+            row.add(bean.getWebsitName());
             row.add(bean.getWorkerId());
             row.add(bean.getWorkerName());
             row.add(bean.getTgQty());

+ 11 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/stock/WorkerStockLogic.java

@@ -124,12 +124,21 @@ public class WorkerStockLogic {
             throw new RemoteServiceException("平台账号禁止操作");
         }
 
+        if (CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()) && adminUser.getAdminWebsitIds().size() > 1) {
+            throw new RemoteServiceException("账号绑定多网点编号,无法导入");
+        }
+
         List<WorkerStockDTO> workerStockDTOS = new ArrayList<>();
         final DateTime curDate = DateUtil.date();
         final String idStr = IdWorker.getIdStr();
 
         String tipsGoodsName = websitGoodsTypeEnum.getKey().equals(WebsitGoodsTypeEnum.M.getKey()) ? "辅材" : "配件";
 
+        final AdminWebsit websit = adminWebsitService.lambdaQuery()
+                .eq(AdminWebsit::getCompanyWechatId, adminUser.getCompanyWechatId())
+                .eq(AdminWebsit::getWebsitId, adminUser.getAdminWebsitIds().get(0))
+                .one();
+
         for (int i = 0; i < datas.size(); i++) {
             List<String> row = (List<String>) datas.get(i);
             CommonUtils.initList(row, 10);
@@ -169,6 +178,8 @@ public class WorkerStockLogic {
                 WorkerStockDTO workerStockDTO = new WorkerStockDTO();
                 workerStockDTO.setCompanyWechatId(adminUser.getCompanyWechatId());
                 workerStockDTO.setCompanyWechatName(adminUser.getCompanyName());
+                workerStockDTO.setWebsitId(websit.getWebsitId());
+                workerStockDTO.setWebsitName(websit.getName());
                 workerStockDTO.setIdentity(user.getIdCard());
                 workerStockDTO.setWorkerId(user.getWorkerNumber());
                 workerStockDTO.setWorkerName(user.getNickName());

+ 27 - 7
mall-server-api/src/main/java/com/gree/mall/manager/logic/material/worker/NewRefundManageLogic.java

@@ -33,10 +33,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -51,6 +50,7 @@ public class NewRefundManageLogic {
     private final MaterialGoodsStockLogic materialGoodsStockLogic;
     private final WebsitPartsRefundRecordService websitPartsRefundRecordService;
     private final StorageService storageService;
+    private final WebsitPartsWorkerCreditRecordService websitPartsWorkerCreditRecordService;
 
     public IPage<NewRefundManageVO> list(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -95,7 +95,7 @@ public class NewRefundManageLogic {
         if (flag.equals(PartsOrderFlagEnum.AGREE.toString())) {
             // 通过
 //            this.insertPartsMessageTip(partsNewRefundManage, curDate);
-        }else if (flag.equals(PartsOrderFlagEnum.REJECT.toString())) {
+        } else if (flag.equals(PartsOrderFlagEnum.REJECT.toString())) {
             // 驳回
             List<WebsitPartsNewRefundManageItem> partsNewRefundManageItems = websitPartsNewRefundManageItemService.lambdaQuery()
                     .eq(WebsitPartsNewRefundManageItem::getApplyNo, partsNewRefundManage.getApplyNo())
@@ -141,13 +141,33 @@ public class NewRefundManageLogic {
         List<WebsitStockDTO> shopStockDTOList = this.createWebsitStockDTO(partsNewRefundManage, partsNewRefundManageItems);
         materialGoodsStockLogic.handleWebsitStock(shopStockDTOList);
 
-        //TODO 插入退款记录
+        // 插入退款记录
         List<WebsitPartsNewRefundManageRecord> partsNewRefundManageRecords = websitPartsNewRefundManageRecordService.lambdaQuery()
                 .eq(WebsitPartsNewRefundManageRecord::getApplyNo, partsNewRefundManage.getApplyNo())
                 .list();
         List<WebsitPartsRefundRecord> partsRefundRecordList = this.createRefundRecord(partsNewRefundManage, partsNewRefundManageRecords);
-        if(CollectionUtil.isNotEmpty(partsRefundRecordList))
+        if (CollectionUtil.isNotEmpty(partsRefundRecordList)) {
             websitPartsRefundRecordService.saveBatch(partsRefundRecordList);
+
+            // 查询是否有记账记录
+            List<WebsitPartsWorkerCreditRecord> recordList = websitPartsWorkerCreditRecordService.lambdaQuery()
+                    .eq(WebsitPartsWorkerCreditRecord::getCompanyWechatId, partsNewRefundManage.getCompanyWechatId())
+                    .eq(WebsitPartsWorkerCreditRecord::getSalesId, partsNewRefundManage.getSalesId())
+                    .in(WebsitPartsWorkerCreditRecord::getSalesItemId, partsNewRefundManageRecords.stream()
+                            .map(WebsitPartsNewRefundManageRecord::getSalesItemId)
+                            .collect(Collectors.toList()))
+                    .list();
+            if (CollectionUtil.isNotEmpty(recordList)) {
+                Map<String, WebsitPartsNewRefundManageRecord> recordMap = partsNewRefundManageRecords.stream()
+                        .collect(Collectors.toMap(WebsitPartsNewRefundManageRecord::getSalesItemId, Function.identity()));
+                for (WebsitPartsWorkerCreditRecord creditRecord : recordList) {
+                    WebsitPartsNewRefundManageRecord record = recordMap.get(creditRecord.getSalesItemId());
+                    creditRecord.setQty(creditRecord.getQty().subtract(record.getQty()));
+                    creditRecord.setTotalAmount(creditRecord.getQty().multiply(creditRecord.getSalesPrice()));
+                }
+                websitPartsWorkerCreditRecordService.saveOrUpdateBatch(recordList);
+            }
+        }
     }
 
     private List<WebsitPartsRefundRecord> createRefundRecord(WebsitPartsNewRefundManage partsNewRefundManage, List<WebsitPartsNewRefundManageRecord> partsNewRefundManageRecords) {

+ 17 - 13
mall-server-api/src/main/java/com/gree/mall/manager/logic/websit/WebsitSalesRetLogic.java

@@ -91,15 +91,19 @@ public class WebsitSalesRetLogic {
             throw new RemoteServiceException("请选择退货仓库");
         }
 
-//        final Integer count = websitSalesRetService.lambdaQuery()
-//                .eq(WebsitSalesRet::getSalesId, websitSalesRetAddUP.getSalesId())
-//                .eq(WebsitSalesRet::get)
-//                .count();
+        final Integer count = websitSalesRetService.lambdaQuery()
+                .eq(WebsitSalesRet::getSalesId, websitSalesRetAddUP.getSalesId())
+                .isNull(WebsitSalesRet::getConfirmBy)
+                .count();
+
+        if (count > 0) {
+            throw new RemoteServiceException(websitSalesRetAddUP.getSalesId() + "销售订单发现未处理的退货单,请先处理");
+        }
 
         WebsitSales websitSales = websitSalesService.getById(websitSalesRetAddUP.getSalesId());
         if (!websitSales.getFlag().equals("PAY_TAKE"))
             throw new RemoteServiceException("未提货不能退货");
-        websitSalesRetAddUP.setPayType(websitSales.getPayType().equals(PayTypeEnum.ENGIN.getKey()) ? websitSales.getPayType() : "CASH");
+        websitSalesRetAddUP.setPayType(websitSales.getPayType());
         websitSalesRetAddUP.setWorkerWebsitId(websitSales.getWorkerWebsitId());
         websitSalesRetAddUP.setWorkerWebsitName(websitSales.getWorkerWebsitName());
         websitSalesRetAddUP.setPayNo(websitSales.getPayNo());
@@ -123,7 +127,7 @@ public class WebsitSalesRetLogic {
         for (WebsitSalesRetItem websitSalesRetItem : websitSalesRetAddUP.getWebsitSalesRetItems()) {
             websitSalesRetItem.setId(null);
 
-            WebsitSalesItem one = websitSalesItemService.lambdaQuery().eq(WebsitSalesItem::getSalesId, websitSales.getSalesId())
+            WebsitSalesItem salesItem = websitSalesItemService.lambdaQuery().eq(WebsitSalesItem::getSalesId, websitSales.getSalesId())
                     .eq(WebsitSalesItem::getGoodsId, websitSalesRetItem.getGoodsId()).last("limit 1")
                     .one();
 
@@ -131,23 +135,23 @@ public class WebsitSalesRetLogic {
                 throw new RemoteServiceException("销售数量不能小于1");
 
 
-            one.setRetQty(one.getRetQty().add(websitSalesRetItem.getRetQty()));
+            salesItem.setRetQty(salesItem.getRetQty().add(websitSalesRetItem.getRetQty()));
 
-            if (one.getRetQty().doubleValue() > one.getSalesQty().doubleValue()) {
+            if (salesItem.getRetQty().doubleValue() > salesItem.getSalesQty().doubleValue()) {
                 throw new RemoteServiceException(websitSalesRetItem.getGoodsName() + "超过销售数量");
             }
 
-            this.checkConvertRetQty(one, websitSalesRetItem);
+            this.checkConvertRetQty(salesItem, websitSalesRetItem);
 
-            one.updateById();
+            salesItem.updateById();
 
             websitSales.setRetAmount(websitSales.getRetAmount()
                     .add(websitSalesRetItem.getRetQty().multiply(websitSalesRetItem.getPrice())));
 
             websitSales.updateById();
             websitSalesRetItem.setSalesRetId(websitSalesRetAddUP.getSalesRetId());
-            websitSalesRetItem.setGoodsStockUnit(one.getGoodsStockUnit());
-            websitSalesRetItem.setConvertQty(one.getConvertQty());
+            websitSalesRetItem.setGoodsStockUnit(salesItem.getGoodsStockUnit());
+            websitSalesRetItem.setConvertQty(salesItem.getConvertQty());
             websitSalesRetItem.setExamineQty(websitSalesRetItem.getRetQty());
             if (websitSalesRetItem.getSaleAmount() != null)
                 allAmount = allAmount.add(websitSalesRetItem.getRetQty().multiply(websitSalesRetItem.getPrice()));
@@ -346,7 +350,7 @@ public class WebsitSalesRetLogic {
             websitStockDTO.setRemark(websitSalesRet.getRemark());
             websitStockDTO.setOperateBy(adminUser.getNickName());
             websitStockDTO.setOperateTime(new Date());
-            websitStockDTO.setObj("供应商");
+            websitStockDTO.setObj("师傅");
             websitStockDTO.setStorageId(websitSalesRet.getStorageId());
             websitStockDTOS.add(websitStockDTO);
         }

+ 1 - 1
mall-server-api/src/main/resources/bootstrap-test.properties

@@ -66,7 +66,7 @@ ali.sms.msg.code=SMS_284585310
 ali.cdn.url=
 
 #微信公众域名
-wechat.mp.url=https://jiasm.zfire.top//jsm-sxbh5/
+wechat.mp.url=https://jiasm.zfire.top/jsm-sxbh5/
 
 #通联支付回调地址
 allIn.payment.notifyUrl=${sys.url}/zfdminiapp/pay/allinpay/callback

+ 18 - 2
mall-server-api/src/main/resources/mapper/CommonMapper.xml

@@ -234,8 +234,16 @@
         left join websit_goods_category c on b.parent_category_id = c.category_id
         left join websit_goods_category d on b.goods_category_id = d.category_id
         left join user e on e.worker_number = a.worker_id
-          ${ex.query}
-          and a.goods_type='M'
+        ${ex.query}
+        and a.goods_type='M'
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND (
+            a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            )
+        </if>
         order by a.id desc
     </select>
 
@@ -542,6 +550,14 @@
           ${ex.selected}
         FROM user_wait a
         ${ex.query}
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND (
+            a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            )
+        </if>
         ${ex.orderBy}
     </select>
 

+ 57 - 7
mall-server-api/src/main/resources/mapper/MaterialMapper.xml

@@ -985,8 +985,8 @@
         SUM(t1.sales_qty) as sales_qty,
         t1.price,
         SUM(t1.sale_amount) as sale_amount,
-        t1.cost as cost,
-        SUM(t1.cost_value) as cost_value,
+        IFNULL(t1.cost, 0) as cost,
+        IFNULL(SUM(t1.cost_value), 0) as cost_value,
         SUM(t1.convert_qty) as convert_qty
         FROM
         (
@@ -1050,8 +1050,8 @@
             SUM(t1.sales_qty) as sales_qty,
             t1.price as price,
             SUM(t1.sale_amount) as sale_amount,
-            t1.cost as cost,
-            SUM(t1.cost_value) as cost_value,
+            IFNULL(t1.cost, 0) as cost,
+            IFNULL(SUM(t1.cost_value), 0) as cost_value,
             SUM(t1.convert_qty) as convert_qty
         FROM
         (
@@ -1116,7 +1116,7 @@
         t1.vender_name,
         t2.goods_id,
         t2.goods_name,
-        t4.goods_category_name,
+        t2.goods_category_name,
         <!-- SUM(t2.purchaseQty) AS purchaseQty, -->
         SUM(t2.rec_qty) AS rec_qty,
         SUM(t2.rec_gift_qty) AS rec_gift_qty,
@@ -1327,10 +1327,10 @@
             t1.purchase_id = t2.purchase_id
             AND t1.company_wechat_id = #{companyWechatId}
             <if test="websitId != null and websitId != ''">
-                AND a.websit_id = #{websitId}
+                AND t1.websit_id = #{websitId}
             </if>
             <if test="websitId == null and websits != null and websits.size > 0">
-                AND a.websit_id IN
+                AND t1.websit_id IN
                 <foreach item="item" index="index" collection="websits" open="(" separator=","
                          close=")">
                     #{item}
@@ -1461,4 +1461,54 @@
             a.worker_id,
             a.websit_id
     </select>
+
+    <select id="websitPartsCreditPage"
+            resultType="com.gree.mall.manager.bean.material.manage.WebsitPartsCreditVO">
+        SELECT a.* FROM (
+            SELECT
+                a.company_wechat_id,
+                a.websit_id,
+                a.websit_name,
+                a.worker_id,
+                a.worker_name,
+                a.identity,
+                a.mobile,
+                SUM(a.total_amount) AS total,
+                SUM(IF(a.credit_status = 1, a.total_amount, 0)) AS rec_total,
+                SUM(IF(a.credit_status = 0, a.total_amount, 0)) AS credit_total,
+                MAX(a.update_time) AS update_time
+            FROM
+                websit_parts_worker_credit_record a
+            GROUP BY
+                a.company_wechat_id, a.websit_id, a.worker_id
+        ) a
+        ${ex.query}
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        ORDER BY
+        a.update_time DESC
+    </select>
+
+    <select id="websitPartsCreditItemPage"
+            resultType="com.gree.mall.manager.bean.material.manage.WebsitPartsCreditItemVO">
+        SELECT
+            ${ex.selected}
+        FROM
+            websit_parts_worker_credit_record a LEFT JOIN websit_sales b ON a.sales_id = b.sales_id
+        ${ex.query}
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="ex.orderBy == null or ex.orderBy ==''">
+            ORDER BY a.create_time DESC
+        </if>
+        ${ex.orderBy}
+    </select>
 </mapper>