Browse Source

no message

FengChaoYu 1 year ago
parent
commit
00075a53dd
100 changed files with 5115 additions and 194 deletions
  1. 12 0
      src/main/java/com/zfire/mall/manager/bean/OrderExecBean.java
  2. 3 0
      src/main/java/com/zfire/mall/manager/bean/admin/AdminUserBean.java
  3. 3 0
      src/main/java/com/zfire/mall/manager/bean/admin/AdminUserCom.java
  4. 14 0
      src/main/java/com/zfire/mall/manager/bean/admin/respDto/AdminUserDto.java
  5. 103 0
      src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementAddParam.java
  6. 96 0
      src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementDetailVO.java
  7. 95 0
      src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementEditParam.java
  8. 76 0
      src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementListVO.java
  9. 47 0
      src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitAddParam.java
  10. 65 0
      src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitDetailVO.java
  11. 45 0
      src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitEditParam.java
  12. 64 0
      src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitListVO.java
  13. 31 0
      src/main/java/com/zfire/mall/manager/bean/config/TradeConfigAddParam.java
  14. 34 0
      src/main/java/com/zfire/mall/manager/bean/config/TradeConfigEditParam.java
  15. 26 0
      src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListLevelParam.java
  16. 52 0
      src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListLevelVO.java
  17. 30 0
      src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListParam.java
  18. 48 0
      src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListVO.java
  19. 29 8
      src/main/java/com/zfire/mall/manager/bean/engin/v2/deposit/DepositManageVO.java
  20. 4 0
      src/main/java/com/zfire/mall/manager/bean/front/CustomerCodeVO.java
  21. 5 3
      src/main/java/com/zfire/mall/manager/bean/invoice/InvoiceVO.java
  22. 4 0
      src/main/java/com/zfire/mall/manager/bean/k3/v2/KingDeePurchaseStockInVO.java
  23. 5 0
      src/main/java/com/zfire/mall/manager/bean/listV2/K3CustomerVO.java
  24. 2 0
      src/main/java/com/zfire/mall/manager/bean/listV2/K3ReceiptVO.java
  25. 4 0
      src/main/java/com/zfire/mall/manager/bean/listV2/StageK3CustomerVO.java
  26. 3 0
      src/main/java/com/zfire/mall/manager/bean/pick/PickManagerPushBean.java
  27. 6 3
      src/main/java/com/zfire/mall/manager/bean/record/order/exec/v2/OrderExecRecordVO.java
  28. 4 0
      src/main/java/com/zfire/mall/manager/bean/sale/SaleOrderVO.java
  29. 4 0
      src/main/java/com/zfire/mall/manager/bean/sale/SaleOrderVOV.java
  30. 123 0
      src/main/java/com/zfire/mall/manager/bean/stock/OrderFullCostDayVO.java
  31. 47 0
      src/main/java/com/zfire/mall/manager/bean/stock/OrderFullCostMonthVO.java
  32. 53 0
      src/main/java/com/zfire/mall/manager/bean/stock/OrderFullCostVO.java
  33. 108 0
      src/main/java/com/zfire/mall/manager/bean/stock/OrderFullDateVO.java
  34. 93 0
      src/main/java/com/zfire/mall/manager/bean/trade/DataLoginOrderVO.java
  35. 177 0
      src/main/java/com/zfire/mall/manager/bean/trade/HomeLoginOrderVO.java
  36. 179 0
      src/main/java/com/zfire/mall/manager/bean/trade/LoginOrderVO.java
  37. 13 0
      src/main/java/com/zfire/mall/manager/bean/trade/OrderTypeCountBean.java
  38. 30 0
      src/main/java/com/zfire/mall/manager/bean/trade/PositionProjectBean.java
  39. 178 0
      src/main/java/com/zfire/mall/manager/bean/trade/SpanLoginOrderVO.java
  40. 82 0
      src/main/java/com/zfire/mall/manager/bean/trade/TradeLoginOrderBean.java
  41. 40 0
      src/main/java/com/zfire/mall/manager/bean/trade/UpdateLoginStatusBean.java
  42. 177 0
      src/main/java/com/zfire/mall/manager/bean/trade/WorkLoginOrderVO.java
  43. 5 1
      src/main/java/com/zfire/mall/manager/commonmapper/AdminMapper.java
  44. 22 0
      src/main/java/com/zfire/mall/manager/commonmapper/CommonMapper.java
  45. 17 1
      src/main/java/com/zfire/mall/manager/commonmapper/CountMapper.java
  46. 2 0
      src/main/java/com/zfire/mall/manager/commonmapper/InvoiceMapper.java
  47. 52 0
      src/main/java/com/zfire/mall/manager/commonmapper/StockCostMapper.java
  48. 4 1
      src/main/java/com/zfire/mall/manager/commonmapper/listV2/CommonCMapper.java
  49. 4 0
      src/main/java/com/zfire/mall/manager/commonmapper/stock/StockCommonMapper.java
  50. 29 0
      src/main/java/com/zfire/mall/manager/commonmapper/trade/LoginOrderMapper.java
  51. 8 0
      src/main/java/com/zfire/mall/manager/config/GlobalDefaultExceptionHandler.java
  52. 1 2
      src/main/java/com/zfire/mall/manager/config/aop/ZfireFiledAop.java
  53. 10 1
      src/main/java/com/zfire/mall/manager/constant/Constant.java
  54. 75 1
      src/main/java/com/zfire/mall/manager/controller/admin/AdminUserController.java
  55. 8 1
      src/main/java/com/zfire/mall/manager/controller/common/CommonController.java
  56. 90 0
      src/main/java/com/zfire/mall/manager/controller/config/FirstPartyCustomerManagementController.java
  57. 92 0
      src/main/java/com/zfire/mall/manager/controller/config/MerchantLoginQuotaLimitController.java
  58. 70 0
      src/main/java/com/zfire/mall/manager/controller/config/TradeConfigController.java
  59. 2 2
      src/main/java/com/zfire/mall/manager/controller/customer/CustomerController.java
  60. 8 8
      src/main/java/com/zfire/mall/manager/controller/engin/order/EnginOrderController.java
  61. 74 74
      src/main/java/com/zfire/mall/manager/controller/engin/order/EnginSysController.java
  62. 21 1
      src/main/java/com/zfire/mall/manager/controller/pick/PickController.java
  63. 21 4
      src/main/java/com/zfire/mall/manager/controller/retail/RetailController.java
  64. 3 0
      src/main/java/com/zfire/mall/manager/controller/saletype/SaleOrderController.java
  65. 235 0
      src/main/java/com/zfire/mall/manager/controller/stock/StockCostController.java
  66. 451 0
      src/main/java/com/zfire/mall/manager/controller/trade/LoginOrderController.java
  67. 21 0
      src/main/java/com/zfire/mall/manager/convert/BaseConvert.java
  68. 55 0
      src/main/java/com/zfire/mall/manager/convert/CommonConvert.java
  69. 16 0
      src/main/java/com/zfire/mall/manager/convert/CommonMapperConfig.java
  70. 42 0
      src/main/java/com/zfire/mall/manager/convert/FirstPartyCustomerManagementConvert.java
  71. 22 0
      src/main/java/com/zfire/mall/manager/convert/MappingIgnore.java
  72. 23 0
      src/main/java/com/zfire/mall/manager/convert/MappingIgnoreCreate.java
  73. 35 0
      src/main/java/com/zfire/mall/manager/convert/MerchantLoginQuotaLimitConvert.java
  74. 56 0
      src/main/java/com/zfire/mall/manager/convert/TradeConfigConvert.java
  75. 195 0
      src/main/java/com/zfire/mall/manager/enums/BaseEnum.java
  76. 29 0
      src/main/java/com/zfire/mall/manager/enums/ConfirmResultEnum.java
  77. 33 0
      src/main/java/com/zfire/mall/manager/enums/CuseromtTypeEnum.java
  78. 32 0
      src/main/java/com/zfire/mall/manager/enums/OrderFullStatusEnum.java
  79. 19 0
      src/main/java/com/zfire/mall/manager/enums/TradeExamineNoteEnum.java
  80. 19 0
      src/main/java/com/zfire/mall/manager/enums/TradeFollowStatusEnum.java
  81. 19 0
      src/main/java/com/zfire/mall/manager/enums/TradeLoginCategoryEnum.java
  82. 18 0
      src/main/java/com/zfire/mall/manager/enums/TradeLoginOrderTypeEnum.java
  83. 23 0
      src/main/java/com/zfire/mall/manager/enums/TradeLoginStatusEnum.java
  84. 21 0
      src/main/java/com/zfire/mall/manager/enums/TradeLoginTypeEnum.java
  85. 31 0
      src/main/java/com/zfire/mall/manager/enums/TradeMachineTypeEnum.java
  86. 25 0
      src/main/java/com/zfire/mall/manager/enums/TradeOperTypeEnum.java
  87. 25 0
      src/main/java/com/zfire/mall/manager/enums/TradeOrderStatusEnum.java
  88. 18 0
      src/main/java/com/zfire/mall/manager/enums/TradeProjectAreaEnum.java
  89. 20 0
      src/main/java/com/zfire/mall/manager/enums/TradeSuccessRateEnum.java
  90. 15 0
      src/main/java/com/zfire/mall/manager/helper/ResponseHelper.java
  91. 237 17
      src/main/java/com/zfire/mall/manager/logic/admin/AdminUserLogic.java
  92. 36 2
      src/main/java/com/zfire/mall/manager/logic/common/CommonLogic.java
  93. 111 0
      src/main/java/com/zfire/mall/manager/logic/config/FirstPartyCustomerManagementLogic.java
  94. 80 0
      src/main/java/com/zfire/mall/manager/logic/config/MerchantLoginQuotaLimitLogic.java
  95. 133 0
      src/main/java/com/zfire/mall/manager/logic/config/TradeConfigLogic.java
  96. 9 0
      src/main/java/com/zfire/mall/manager/logic/customer/CustomerProductTypeLogic.java
  97. 30 11
      src/main/java/com/zfire/mall/manager/logic/customer/Stagek3CustomerLogic.java
  98. 14 2
      src/main/java/com/zfire/mall/manager/logic/displace/order/DisplaceOrderV2Logic.java
  99. 109 51
      src/main/java/com/zfire/mall/manager/logic/engin/deposit/DepositManageLogic.java
  100. 26 0
      src/main/java/com/zfire/mall/manager/logic/engin/info/EnginInfoOrderLogic.java

+ 12 - 0
src/main/java/com/zfire/mall/manager/bean/OrderExecBean.java

@@ -25,6 +25,12 @@ public class OrderExecBean {
     private Date theTime;
     @ApiModelProperty("销售订单号")
     private String id;
+
+    @ApiModelProperty("是否剔除仓储账单")
+    private String isCost;
+
+    @ApiModelProperty("使用单位")
+    private String refUseUnit;
     @ApiModelProperty("经销商编码")
     private String customerNumber;
     @ApiModelProperty("经销商名称")
@@ -142,5 +148,11 @@ public class OrderExecBean {
     @ApiModelProperty("审核状态")
     private String examineStatus;
 
+    @ApiModelProperty("项目说明")
+    private String refProjectNote;
+
+    @ApiModelProperty("货满有效期")
+    private String fullCostTime;
+
 
 }

+ 3 - 0
src/main/java/com/zfire/mall/manager/bean/admin/AdminUserBean.java

@@ -57,4 +57,7 @@ public class AdminUserBean extends AdminUser {
     @ApiModelProperty("当前权限名称")
     private String authority;
 
+    @ApiModelProperty("是否为商用登录审核员")
+    private Boolean isTradeExaminer;
+
 }

+ 3 - 0
src/main/java/com/zfire/mall/manager/bean/admin/AdminUserCom.java

@@ -65,4 +65,7 @@ public class AdminUserCom extends AdminUser {
     @ApiModelProperty("拥有的金蝶物料类型权限")
     private List<AdminUserCategoryRela> adminUserCategoryRelas;
 
+    @ApiModelProperty("是否为商用登录审核员")
+    private Boolean isTradeExaminer;
+
 }

+ 14 - 0
src/main/java/com/zfire/mall/manager/bean/admin/respDto/AdminUserDto.java

@@ -1,6 +1,7 @@
 package com.zfire.mall.manager.bean.admin.respDto;
 
 import com.zfire.mall.manager.plus.entity.AdminUser;
+import com.zfire.mall.manager.plus.entity.CustomerBillLimitConfig;
 import com.zfire.mall.manager.plus.entity.StockCorrespond;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -26,4 +27,17 @@ public class AdminUserDto extends AdminUser {
     @ApiModelProperty("绑定金蝶物料名称")
     private String bindCategoryName;
 
+
+    @ApiModelProperty(value = "工装登录名额限制")
+    private Integer workLoginLimit;
+
+    @ApiModelProperty(value = "家装登录名额限制")
+    private Integer homeLoginLimit;
+
+    @ApiModelProperty(value = "跨区登录名额限制")
+    private Integer spanLoginLimit;
+
+    @ApiModelProperty(value = "父级经销商id")
+    private String parentId;
+
 }

+ 103 - 0
src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementAddParam.java

@@ -0,0 +1,103 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:17 星期三
+ */
+@Data
+public class FirstPartyCustomerManagementAddParam {
+
+    @ApiModelProperty(value = "甲方客户名称")
+    @Length(max = 100, message = "甲方客户名称最大长度为100")
+    @NotBlank(message = "甲方客户名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "上级客户")
+    @Length(max = 100, message = "上级客户最大长度为100")
+    private String parentName;
+
+    @ApiModelProperty(value = "客户规模")
+    @Length(max = 20, message = "客户规模最大长度为20")
+    @NotBlank(message = "客户规模不能为空")
+    private String scale;
+
+    @ApiModelProperty(value = "客户类型")
+    @Length(max = 20, message = "客户类型最大长度为20")
+    @NotBlank(message = "客户类型不能为空")
+    private String type;
+
+    @ApiModelProperty(value = "行业大类")
+    @Length(max = 20, message = "行业大类最大长度为20")
+    @NotBlank(message = "行业大类不能为空")
+    private String tradeParentId;
+
+    @ApiModelProperty(value = "行业小类")
+    @Length(max = 20, message = "行业小类最大长度为20")
+    @NotBlank(message = "行业小类不能为空")
+    private String tradeId;
+
+    @ApiModelProperty(value = "省id")
+    @NotNull(message = "省不能为空")
+    private Long provinceRegionId;
+
+    @ApiModelProperty(value = "市id")
+    @NotNull(message = "市不能为空")
+    private Long cityRegionId;
+
+    @ApiModelProperty(value = "区id")
+    @NotNull(message = "区不能为空")
+    private Long areaId;
+
+    @ApiModelProperty(value = "详细地址")
+    @Length(max = 100, message = "详细地址最大长度为100")
+    @NotBlank(message = "详细地址不能为空")
+    private String address;
+
+    @ApiModelProperty(value = "客户关系")
+    @Length(max = 20, message = "客户关系最大长度为20")
+    @NotBlank(message = "客户关系不能为空")
+    private String rela;
+
+    @ApiModelProperty(value = "客户来源")
+    @Length(max = 20, message = "客户来源最大长度为20")
+    @NotBlank(message = "客户来源不能为空")
+    private String resource;
+
+    @ApiModelProperty(value = "联系人名称")
+    @Length(max = 20, message = "联系人名称最大长度为20")
+    @NotBlank(message = "联系人名称不能为空")
+    private String linkName;
+
+    @ApiModelProperty(value = "联系人职务")
+    @Length(max = 20, message = "联系人职务最大长度为20")
+    private String linkJob;
+
+    @ApiModelProperty(value = "联系人部门")
+    @Length(max = 20, message = "联系人部门最大长度为20")
+    private String linkDepartment;
+
+    @ApiModelProperty(value = "微信")
+    @Length(max = 50, message = "微信最大长度为50")
+    private String weXin;
+
+    @ApiModelProperty(value = "联系人角色")
+    @Length(max = 20, message = "联系人角色最大长度为20")
+    private String linkRole;
+
+    @ApiModelProperty(value = "邮箱")
+    @Length(max = 50, message = "邮箱最大长度为50")
+    private String email;
+
+    @ApiModelProperty(value = "QQ")
+    @Length(max = 50, message = "QQ最大长度为50")
+    private String qq;
+}

+ 96 - 0
src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementDetailVO.java

@@ -0,0 +1,96 @@
+package com.zfire.mall.manager.bean.config;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.zfire.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:16 星期三
+ */
+@Data
+public class FirstPartyCustomerManagementDetailVO {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "甲方客户名称")
+    private String name;
+
+    @ApiModelProperty(value = "上级客户")
+    private String parentName;
+
+    @ApiModelProperty(value = "客户规模")
+    private String scale;
+
+    @ApiModelProperty(value = "客户类型")
+    private String type;
+
+    @ApiModelProperty(value = "行业大类")
+    private String tradeParentId;
+
+    @ApiModelProperty(value = "行业小类")
+    private String tradeId;
+
+    @ApiModelProperty(value = "省id")
+    private Long provinceRegionId;
+
+    @ApiModelProperty(value = "市id")
+    private Long cityRegionId;
+
+    @ApiModelProperty(value = "区id")
+    private Long areaId;
+
+    @ApiModelProperty(value = "详细地址")
+    private String address;
+
+    @ApiModelProperty(value = "客户关系")
+    private String rela;
+
+    @ApiModelProperty(value = "客户来源")
+    private String resource;
+
+    @ApiModelProperty(value = "联系人名称")
+    private String linkName;
+
+    @ApiModelProperty(value = "联系人职务")
+    private String linkJob;
+
+    @ApiModelProperty(value = "联系人部门")
+    private String linkDepartment;
+
+    @ApiModelProperty(value = "微信")
+    private String weXin;
+
+    @ApiModelProperty(value = "联系人角色")
+    private String linkRole;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "QQ")
+    private String qq;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建人名称")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新人名称")
+    private String updateName;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 95 - 0
src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementEditParam.java

@@ -0,0 +1,95 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:16 星期三
+ */
+@Data
+public class FirstPartyCustomerManagementEditParam {
+
+    @NotBlank(message = "id不能为空")
+    @Length(max = 50, message = "id最大长度为50")
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "甲方客户名称")
+    @Length(max = 100, message = "甲方客户名称最大长度为100")
+    private String name;
+
+    @ApiModelProperty(value = "上级客户")
+    @Length(max = 100, message = "上级客户最大长度为100")
+    private String parentName;
+
+    @ApiModelProperty(value = "客户规模")
+    @Length(max = 20, message = "客户规模最大长度为20")
+    private String scale;
+
+    @ApiModelProperty(value = "客户类型")
+    @Length(max = 20, message = "客户类型最大长度为20")
+    private String type;
+
+    @ApiModelProperty(value = "行业大类")
+    @Length(max = 20, message = "行业大类最大长度为20")
+    private String tradeParentId;
+
+    @ApiModelProperty(value = "行业小类")
+    @Length(max = 20, message = "行业小类最大长度为20")
+    private String tradeId;
+
+    @ApiModelProperty(value = "省id")
+    private Long provinceRegionId;
+
+    @ApiModelProperty(value = "市id")
+    private Long cityRegionId;
+
+    @ApiModelProperty(value = "区id")
+    private Long areaId;
+
+    @ApiModelProperty(value = "详细地址")
+    @Length(max = 100, message = "详细地址最大长度为100")
+    private String address;
+
+    @ApiModelProperty(value = "客户关系")
+    @Length(max = 20, message = "客户关系最大长度为20")
+    private String rela;
+
+    @ApiModelProperty(value = "客户来源")
+    @Length(max = 20, message = "客户来源最大长度为20")
+    private String resource;
+
+    @ApiModelProperty(value = "联系人名称")
+    @Length(max = 20, message = "联系人名称最大长度为20")
+    private String linkName;
+
+    @ApiModelProperty(value = "联系人职务")
+    @Length(max = 20, message = "联系人职务最大长度为20")
+    private String linkJob;
+
+    @ApiModelProperty(value = "联系人部门")
+    @Length(max = 20, message = "联系人部门最大长度为20")
+    private String linkDepartment;
+
+    @ApiModelProperty(value = "微信")
+    @Length(max = 50, message = "微信最大长度为50")
+    private String weXin;
+
+    @ApiModelProperty(value = "联系人角色")
+    @Length(max = 20, message = "联系人角色最大长度为20")
+    private String linkRole;
+
+    @ApiModelProperty(value = "邮箱")
+    @Length(max = 50, message = "邮箱最大长度为50")
+    private String email;
+
+    @ApiModelProperty(value = "QQ")
+    @Length(max = 50, message = "QQ最大长度为50")
+    private String qq;
+}

+ 76 - 0
src/main/java/com/zfire/mall/manager/bean/config/FirstPartyCustomerManagementListVO.java

@@ -0,0 +1,76 @@
+package com.zfire.mall.manager.bean.config;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:15 星期三
+ */
+@Data
+public class FirstPartyCustomerManagementListVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "甲方客户名称")
+    private String name;
+
+    @ApiModelProperty(value = "上级客户")
+    private String parentName;
+
+    @ApiModelProperty(value = "客户规模")
+    private String scale;
+
+    @ApiModelProperty(value = "客户类型")
+    private String type;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "行业大类")
+    private String tradeParentName;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "行业小类")
+    private String tradeName;
+
+    @ApiModelProperty(value = "省")
+    private String provinceName;
+
+    @ApiModelProperty(value = "市")
+    private String cityName;
+
+    @ApiModelProperty(value = "区")
+    private String areaName;
+
+    @ApiModelProperty(value = "客户地址")
+    private String address;
+
+    @ApiModelProperty(value = "客户关系")
+    private String rela;
+
+    @ApiModelProperty(value = "客户来源")
+    private String resource;
+
+    @ApiModelProperty(value = "联系人")
+    private String linkName;
+
+    @ApiModelProperty(value = "联系人角色")
+    private String linkRole;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 47 - 0
src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitAddParam.java

@@ -0,0 +1,47 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:03 星期三
+ */
+@Data
+public class MerchantLoginQuotaLimitAddParam {
+
+    @ApiModelProperty(value = "商家信息")
+    @NotBlank(message = "商家信息不能为空")
+    @Length(max = 50, message = "商家信息id最大长度为50")
+    private String customerId;
+
+    @ApiModelProperty(value = "商家编号")
+    @Length(max = 50, message = "商家编号最大长度为50")
+    @NotBlank(message = "商家编号不能为空")
+    private String customerNumber;
+
+    @ApiModelProperty(value = "工装登录名额限制")
+    @Min(value = 0,message = "工装登录名额限制最小为0")
+    @NotNull(message = "工装登录名额限制不能为空")
+    private Integer workLoginLimit;
+
+    @ApiModelProperty(value = "家装登录名额限制")
+    @Min(value = 0,message = "家装登录名额限制最小为0")
+    @NotNull(message = "家装登录名额限制不能为空")
+    private Integer homeLoginLimit;
+
+    @ApiModelProperty(value = "跨区登录名额限制")
+    @Min(value = 0,message = "跨区登录名额限制最小为0")
+    @NotNull(message = "跨区登录名额限制不能为空")
+    private Integer spanLoginLimit;
+
+    @ApiModelProperty(value = "启用状态")
+    @NotNull(message = "状态不能为空")
+    private Boolean state;
+}

+ 65 - 0
src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitDetailVO.java

@@ -0,0 +1,65 @@
+package com.zfire.mall.manager.bean.config;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 10:57 星期三
+ */
+@Data
+public class MerchantLoginQuotaLimitDetailVO {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "商家信息Id")
+    private String customerId;
+
+    @ApiModelProperty(value = "商家编号")
+    private String customerNumber;
+
+    @ApiModelProperty(value = "工装登录名额限制")
+    private Integer workLoginLimit;
+
+    @ApiModelProperty(value = "家装登录名额限制")
+    private Integer homeLoginLimit;
+
+    @ApiModelProperty(value = "跨区登录名额限制")
+    private Integer spanLoginLimit;
+
+    @ApiModelProperty(value = "实际工装登录名额限制")
+    private Integer actuallyWorkLoginLimit;
+
+    @ApiModelProperty(value = "实际家装登录名额限制")
+    private Integer actuallyHomeLoginLimit;
+
+    @ApiModelProperty(value = "实际跨区登录名额限制")
+    private Integer actuallySpanLoginLimit;
+
+    @ApiModelProperty(value = "启用状态")
+    private Boolean state;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建人名称")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新人名称")
+    private String updateName;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 45 - 0
src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitEditParam.java

@@ -0,0 +1,45 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:02 星期三
+ */
+@Data
+public class MerchantLoginQuotaLimitEditParam {
+
+    @NotBlank(message = "id不能为空")
+    @Length(max = 50, message = "id最大长度为50")
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "商家信息")
+    @Length(max = 50, message = "商家信息id最大长度为64")
+    private String customerId;
+
+    @ApiModelProperty(value = "商家编号")
+    @Length(max = 50, message = "商家编号最大长度为50")
+    private String customerNumber;
+
+    @ApiModelProperty(value = "工装登录名额限制")
+    @Min(value = 0,message = "工装登录名额限制最小为0")
+    private Integer workLoginLimit;
+
+    @ApiModelProperty(value = "家装登录名额限制")
+    @Min(value = 0,message = "家装登录名额限制最小为0")
+    private Integer homeLoginLimit;
+
+    @ApiModelProperty(value = "跨区登录名额限制")
+    @Min(value = 0,message = "跨区登录名额限制最小为0")
+    private Integer spanLoginLimit;
+
+    @ApiModelProperty(value = "启用状态")
+    private Boolean state;
+}

+ 64 - 0
src/main/java/com/zfire/mall/manager/bean/config/MerchantLoginQuotaLimitListVO.java

@@ -0,0 +1,64 @@
+package com.zfire.mall.manager.bean.config;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 10:49 星期三
+ */
+
+@Data
+@ZfireField(tbName = "a")
+public class MerchantLoginQuotaLimitListVO {
+
+    @ZfireField(hide = true)
+    private String id;
+
+    @ZfireField(tbName = "b", colName = "name")
+    @ApiModelProperty(value = "商家信息")
+    private String customerName;
+
+    @ApiModelProperty(value = "商家编号")
+    private String customerNumber;
+
+    @ApiModelProperty(value = "工装登录名额数量")
+    private Integer workLoginLimit;
+
+    @ApiModelProperty(value = "家装登录名额数量")
+    private Integer homeLoginLimit;
+
+    @ApiModelProperty(value = "跨区登录名额数量")
+    private Integer spanLoginLimit;
+
+    @ApiModelProperty(value = "实际工装登录名额数量")
+    private Integer actuallyWorkLoginLimit;
+
+    @ApiModelProperty(value = "实际家装登录名额数量")
+    private Integer actuallyHomeLoginLimit;
+
+    @ApiModelProperty(value = "实际跨区登录名额数量")
+    private Integer actuallySpanLoginLimit;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建人账号")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新人账号")
+    private String updateName;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 31 - 0
src/main/java/com/zfire/mall/manager/bean/config/TradeConfigAddParam.java

@@ -0,0 +1,31 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 13:50 星期三
+ */
+@Data
+public class TradeConfigAddParam {
+
+    @ApiModelProperty(value = "分类名称")
+    @Length(max = 50, message = "分类名称最大长度为50")
+    @NotBlank(message = "分类名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "上级id, 为空或者0既是顶级")
+    @Length(max = 50, message = "上级id最大长度为50")
+    private String parentId;
+
+    @NotNull(message = "状态不能为空")
+    @ApiModelProperty(value = "状态 true=启用 false=停用")
+    private Boolean state;
+
+}

+ 34 - 0
src/main/java/com/zfire/mall/manager/bean/config/TradeConfigEditParam.java

@@ -0,0 +1,34 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 13:50 星期三
+ */
+
+@Data
+public class TradeConfigEditParam {
+
+    @NotBlank(message = "id不能为空")
+    @Length(max = 50, message = "id最大长度为50")
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "分类名称")
+    @Length(max = 50, message = "分类名称最大长度为50")
+    private String name;
+
+    @ApiModelProperty(value = "上级id, 为空或者0既是顶级")
+    @Length(max = 50, message = "上级id最大长度为50")
+    private String parentId;
+
+    @ApiModelProperty(value = "状态 true=启用 false=停用")
+    private Boolean state;
+
+}

+ 26 - 0
src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListLevelParam.java

@@ -0,0 +1,26 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Min;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 16:55 星期三
+ */
+@Data
+public class TradeConfigListLevelParam {
+    @ApiModelProperty("分类名称搜索")
+    @Length(max = 50, message = "最大长度为50")
+    private String keyword;
+
+    @ApiModelProperty("第几页")
+    @Min(value = 1, message = "页数最小为1")
+    private Long pageNum = 1L;
+
+    @ApiModelProperty("页大小")
+    private Long pageSize = 10L;
+}

+ 52 - 0
src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListLevelVO.java

@@ -0,0 +1,52 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 13:50 星期三
+ */
+@Data
+public class TradeConfigListLevelVO {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "分类名称")
+    private String name;
+
+    @ApiModelProperty(value = "上级id, 为空或者0既是顶级")
+    private String parentId;
+
+    @ApiModelProperty(value = "上级名称")
+    private String parentName;
+
+    @ApiModelProperty(value = "状态 true=启用 false=停用")
+    private Boolean state;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建人账号")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新人账号")
+    private String updateName;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "子级列表")
+    private List<TradeConfigListLevelVO> childList;
+}

+ 30 - 0
src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListParam.java

@@ -0,0 +1,30 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.Min;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 16:55 星期三
+ */
+@Data
+public class TradeConfigListParam {
+    @ApiModelProperty("分类名称搜索")
+    @Length(max = 50, message = "最大长度为50")
+    private String keyword;
+
+    @ApiModelProperty("父级id, 为空或者0既是查询顶级")
+    @Length(max = 50, message = "最大长度为50")
+    private String parentId;
+
+    @ApiModelProperty("第几页")
+    @Min(value = 1, message = "页数最小为1")
+    private Long pageNum;
+
+    @ApiModelProperty("页大小")
+    private Long pageSize;
+}

+ 48 - 0
src/main/java/com/zfire/mall/manager/bean/config/TradeConfigListVO.java

@@ -0,0 +1,48 @@
+package com.zfire.mall.manager.bean.config;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 13:50 星期三
+ */
+@Data
+public class TradeConfigListVO {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ApiModelProperty(value = "分类名称")
+    private String name;
+
+    @ApiModelProperty(value = "上级id, 为空或者0既是顶级")
+    private String parentId;
+
+    @ApiModelProperty(value = "上级名称")
+    private String parentName;
+
+    @ApiModelProperty(value = "状态 true=启用 false=停用")
+    private Boolean state;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "创建人账号")
+    private String createName;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新人账号")
+    private String updateName;
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 29 - 8
src/main/java/com/zfire/mall/manager/bean/engin/v2/deposit/DepositManageVO.java

@@ -2,10 +2,7 @@ package com.zfire.mall.manager.bean.engin.v2.deposit;
 
 import com.zfire.mall.manager.annotation.ZfireField;
 import com.zfire.mall.manager.annotation.ZfirePowerField;
-import com.zfire.mall.manager.enums.DepositDataStateEnum;
-import com.zfire.mall.manager.enums.ExamineStatusEnum;
-import com.zfire.mall.manager.enums.IsEnum;
-import com.zfire.mall.manager.enums.OrderTypeEnum;
+import com.zfire.mall.manager.enums.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -140,22 +137,38 @@ public class DepositManageVO {
     @ApiModelProperty(value = "规格型号")
     private String specification;
 
-    @ZfireField(tbName = "b")
+    @ZfireField(tbName = "b", hide = true)
     @ApiModelProperty(value = "实装产品名称")
     private String realMaterialName;
 
-    @ZfireField(tbName = "b")
+    @ZfireField(tbName = "b", hide = true)
     @ApiModelProperty(value = "实装物料编码")
     private String realMaterialNumber;
 
-    @ZfireField(tbName = "b")
+    @ZfireField(tbName = "b", hide = true)
     @ApiModelProperty(value = "实装厂产品编码")
     private String realMaterialOldNumber;
 
-    @ZfireField(tbName = "b")
+    @ZfireField(tbName = "b", hide = true)
     @ApiModelProperty(value = "实装规格型号")
     private String realSpecification;
 
+    @ZfireField(tbName = "b")
+    @ApiModelProperty(value = "实装产品名称")
+    private String depositMaterialName;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty(value = "实装物料编码")
+    private String depositMaterialNumber;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty(value = "实装厂产品编码")
+    private String depositMaterialOldNumber;
+
+    @ZfireField(tbName = "b")
+    @ApiModelProperty(value = "实装规格型号")
+    private String depositSpecification;
+
     @ZfireField(tbName = "a")
     @ApiModelProperty(value = "项目类别")
     private String refProjectCategory;
@@ -336,10 +349,12 @@ public class DepositManageVO {
     @ApiModelProperty(value = "是否退押")
     private IsEnum isRefundDeposit;
 
+    @ZfirePowerField
     @ZfireField(tbName = "a")
     @ApiModelProperty(value = "订单格力内部备注")
     private String orderGeLiInnerNote;
 
+    @ZfirePowerField
     @ZfireField(tbName = "a")
     @ApiModelProperty(value = "格力内部资料备注")
     private String geLiInnerDataNote;
@@ -360,6 +375,7 @@ public class DepositManageVO {
     @ApiModelProperty(value = "申请退押金备注")
     private String applyNote;
 
+    @ZfirePowerField
     @ZfireField(tbName = "a")
     @ApiModelProperty(value = "审批通过后备注")
     private String examineAfterRemark;
@@ -368,6 +384,7 @@ public class DepositManageVO {
     @ApiModelProperty(value = "补充资料备注")
     private String amendRemark;
 
+    @ZfirePowerField
     @ZfireField(tbName = "a")
     @ApiModelProperty(value = "复核备注")
     private String reviewRemark;
@@ -380,6 +397,10 @@ public class DepositManageVO {
     @ApiModelProperty(value = "单据状态")
     private ExamineStatusEnum examineStatus;
 
+    @ZfireField(tbName = "a")
+    @ApiModelProperty(value = "审核结果")
+    private ConfirmResultEnum confirmResult;
+
     @ZfireField(tbName = "b", hide = true)
     @ApiModelProperty(value = "id")
     private String id;

+ 4 - 0
src/main/java/com/zfire/mall/manager/bean/front/CustomerCodeVO.java

@@ -67,6 +67,10 @@ public class CustomerCodeVO  {
     @ApiModelProperty(value = "销售订单号")
     private String orderNumber;
 
+    @ApiModelProperty(value = "格匠订单号")
+    private String geJiangOrderCode;
+
+
     @ApiModelProperty(value = "收货人")
     private String receiptCompany;
 

+ 5 - 3
src/main/java/com/zfire/mall/manager/bean/invoice/InvoiceVO.java

@@ -315,6 +315,10 @@ public class InvoiceVO {
     @ApiModelProperty(value = "使用单位")
     private String refUseUnit;
 
+    @ZfireField(hide = false,tbName = "ia")
+    @ApiModelProperty(value = "项目说明")
+    private String refProjectNote;
+
 
 
 
@@ -540,9 +544,7 @@ public class InvoiceVO {
     @ZfireField(hide = false,tbName = "ia")
     @ApiModelProperty(value = "项目类型")
     private String refProjectType;
-    @ZfireField(hide = true)
-    @ApiModelProperty(value = "项目说明")
-    private String refProjectNote;
+
 
     @ZfireField(hide = true)
     @ApiModelProperty(value = "工程登录类型")

+ 4 - 0
src/main/java/com/zfire/mall/manager/bean/k3/v2/KingDeePurchaseStockInVO.java

@@ -169,6 +169,10 @@ public class KingDeePurchaseStockInVO {
     @ApiModelProperty(value = "规格型号")
     private String uom;
 
+    @ZfireField(tbName = "b")
+    @ApiModelProperty(value = "厂订单号")
+    private String cddhText;
+
     @ZfireField(tbName = "c", colName = "old_number")
     @ApiModelProperty(value = "物料代码")
     private String materialOldNumber;

+ 5 - 0
src/main/java/com/zfire/mall/manager/bean/listV2/K3CustomerVO.java

@@ -1,6 +1,7 @@
 package com.zfire.mall.manager.bean.listV2;
 
 import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.CuseromtTypeEnum;
 import com.zfire.mall.manager.enums.K3CommonStatusEnum;
 import com.zfire.mall.manager.enums.K3CustomerStatusEnum;
 import com.zfire.mall.manager.plus.entity.KingDeeCustomer;
@@ -33,6 +34,10 @@ public class K3CustomerVO   {
     @ApiModelProperty(value = "使用组织名称")
     private String useOrgName;
 
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "KING 金蝶经销商  JIAXIAN嘉贤二级经销商  GONGCHENG 商用经销商")
+    private CuseromtTypeEnum jiaxianType;
+
     @ZfireField(tbName = "b")
     @ApiModelProperty(value = "供应链账号状态")
     private K3CustomerStatusEnum status;

+ 2 - 0
src/main/java/com/zfire/mall/manager/bean/listV2/K3ReceiptVO.java

@@ -49,6 +49,8 @@ public class K3ReceiptVO {
     private String wlCompanyName;
     @ApiModelProperty(value = "备注")
     private String remark;
+    @ApiModelProperty("业务员名称")
+    private String serviceName;
 
 
 }

+ 4 - 0
src/main/java/com/zfire/mall/manager/bean/listV2/StageK3CustomerVO.java

@@ -1,6 +1,7 @@
 package com.zfire.mall.manager.bean.listV2;
 
 import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.CuseromtTypeEnum;
 import com.zfire.mall.manager.enums.K3CommonStatusEnum;
 import com.zfire.mall.manager.plus.entity.KingDeeCustomer;
 import io.swagger.annotations.ApiModel;
@@ -34,6 +35,9 @@ public class StageK3CustomerVO {
     @ApiModelProperty(value = "负责人")
     private String chargeName;
 
+    @ApiModelProperty(value = "经销商类型")
+    private CuseromtTypeEnum jiaxianType;
+
 
     @ApiModelProperty(value = "禁用状态")
     private K3CommonStatusEnum forbidStatus;

+ 3 - 0
src/main/java/com/zfire/mall/manager/bean/pick/PickManagerPushBean.java

@@ -86,4 +86,7 @@ public class PickManagerPushBean  {
     @ApiModelProperty(value = "经销商销售订单号")
     private String customerOrderId;
 
+    @ApiModelProperty(value = "销售出库单")
+    private String salesOrderNo;
+
 }

+ 6 - 3
src/main/java/com/zfire/mall/manager/bean/record/order/exec/v2/OrderExecRecordVO.java

@@ -66,9 +66,9 @@ public class OrderExecRecordVO {
     @ApiModelProperty("单价")
     private BigDecimal price;
 
-    @ZfireField(isQuery = false)
-    @ApiModelProperty("方向")
-    private Integer direction;
+//    @ZfireField(isQuery = false)
+//    @ApiModelProperty("方向")
+//    private Integer direction;
 
     @ZfireField(isQuery = false)
     @ApiModelProperty("数量")
@@ -117,4 +117,7 @@ public class OrderExecRecordVO {
     @ApiModelProperty("操作日期")
     private Date createTime;
 
+    @ApiModelProperty("订单制单日期")
+    private Date orderCreateTime;
+
 }

+ 4 - 0
src/main/java/com/zfire/mall/manager/bean/sale/SaleOrderVO.java

@@ -48,6 +48,10 @@ public class SaleOrderVO  {
     @ApiModelProperty(value = "出库单时间")
     private Date orderTime;
 
+    @ZfireField(tbName = "so",colName = "logistics_name")
+    @ApiModelProperty(value = "物流公司")
+    private String logisticsName;
+
     @ZfireField(type = "select",tbName = "iao",colName = "order_type")
     @ApiModelProperty(value = "订单类型")
     private OrderTypeEnum orderType;

+ 4 - 0
src/main/java/com/zfire/mall/manager/bean/sale/SaleOrderVOV.java

@@ -46,6 +46,10 @@ public class SaleOrderVOV {
     @ApiModelProperty(value = "出库单时间")
     private Date orderTime;
 
+    @ZfireField(tbName = "so",colName = "logistics_name")
+    @ApiModelProperty(value = "物流公司")
+    private String logisticsName;
+
     @ZfireField(type = "select",tbName = "iao",colName = "order_type")
     @ApiModelProperty(value = "订单类型")
     private OrderTypeEnum orderType;

+ 123 - 0
src/main/java/com/zfire/mall/manager/bean/stock/OrderFullCostDayVO.java

@@ -0,0 +1,123 @@
+package com.zfire.mall.manager.bean.stock;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.IsEnum;
+import com.zfire.mall.manager.enums.OrderFullStatusEnum;
+import com.zfire.mall.manager.enums.OrderTypeEnum;
+import com.zfire.mall.manager.plus.entity.OrderFullCost;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author change
+ */
+@ApiModel
+@Data
+@ZfireField(tbName = "a")
+public class OrderFullCostDayVO   {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "日账单id")
+    private String orderFullCostId;
+
+    @ApiModelProperty(value = "所属年份")
+    private String yearTime;
+
+    @ApiModelProperty(value = "所属月份")
+    private String monthTime;
+
+    @ApiModelProperty(value = "账单状态")
+    private OrderFullStatusEnum status;
+
+    @ApiModelProperty(value = "订单类型")
+    private OrderTypeEnum orderType;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单时间")
+    private Date orderTime;
+
+    @ApiModelProperty(value = "订单审核时间")
+    private Date examineTime;
+
+    @ApiModelProperty(value = "经销商编号")
+    private String customerNumber;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ApiModelProperty(value = "使用单位")
+    private String refUseUnit;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "金蝶物料id")
+    private String materialId;
+
+    @ApiModelProperty(value = "旧物料编码")
+    private String materialOldNumber;
+
+    @ApiModelProperty(value = "物料编号")
+    private String materialCode;
+
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+
+    @ApiModelProperty(value = "物料规格型号")
+    private String specification;
+
+    @ApiModelProperty(value = "仓储计算数量")
+    private String orderNum;
+
+    @ApiModelProperty(value = "金额")
+    private BigDecimal payAmount;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商现金钱包id")
+    private String customerWalletId;
+
+    @ApiModelProperty(value = "经销商现金钱包名称")
+    private String customerWalletName;
+
+    @ApiModelProperty(value = "经销商现金钱包编码")
+    private String customerWalletNumber;
+
+    @ApiModelProperty(value = "货满起算日期")
+    private String fullStartTime;
+
+    @ApiModelProperty(value = "货满结算日期")
+    private String fullEndTime;
+
+    @ApiModelProperty(value = "货满天数")
+    private Integer fullNum;
+
+    @ApiModelProperty(value = "实际逾期天数")
+    private Integer overdueNum;
+
+    @ApiModelProperty(value = "仓租金额")
+    private BigDecimal fullCost;
+
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "备注")
+    private String note;
+
+}

+ 47 - 0
src/main/java/com/zfire/mall/manager/bean/stock/OrderFullCostMonthVO.java

@@ -0,0 +1,47 @@
+package com.zfire.mall.manager.bean.stock;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.OrderFullStatusEnum;
+import com.zfire.mall.manager.enums.OrderTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author change
+ */
+@ApiModel
+@Data
+@ZfireField(tbName = "ofc")
+public class OrderFullCostMonthVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "日账单id")
+    private String orderFullCostId;
+
+    @ApiModelProperty(value = "所属年份")
+    private String yearTime;
+
+    @ApiModelProperty(value = "所属月份")
+    private String monthTime;
+
+    @ApiModelProperty(value = "经销商编号")
+    private String customerNumber;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ApiModelProperty(value = "计算天数")
+    private Integer fullDayNum;
+
+    @ApiModelProperty(value = "仓租金额")
+    private BigDecimal fullCost;
+
+}

+ 53 - 0
src/main/java/com/zfire/mall/manager/bean/stock/OrderFullCostVO.java

@@ -0,0 +1,53 @@
+package com.zfire.mall.manager.bean.stock;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.IsEnum;
+import com.zfire.mall.manager.enums.PickIsEnum;
+import com.zfire.mall.manager.plus.entity.RetailOrder;
+import com.zfire.mall.manager.plus.entity.RetailOrderItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author change
+ */
+@ApiModel
+@Data
+public class OrderFullCostVO   {
+
+
+    @ApiModelProperty(value = "订单号")
+    private String orderId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "金蝶物料id")
+    private String materialId;
+
+    @ApiModelProperty(value = "旧物料编码")
+    private String materialOldNumber;
+
+    @ApiModelProperty(value = "物料编号")
+    private String materialCode;
+
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+
+
+    @ApiModelProperty(value = "物料规格型号")
+    private String specification;
+
+    @ApiModelProperty(value = "货满时间")
+    private String fullTime;
+
+    @ApiModelProperty(value = "货满天数")
+    private Integer fullNum;
+
+    @ApiModelProperty(value = "是否收取仓租")
+    private PickIsEnum full;
+
+
+
+}

+ 108 - 0
src/main/java/com/zfire/mall/manager/bean/stock/OrderFullDateVO.java

@@ -0,0 +1,108 @@
+package com.zfire.mall.manager.bean.stock;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.OrderFullStatusEnum;
+import com.zfire.mall.manager.enums.OrderTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel
+@Data
+@ZfireField(tbName = "a")
+public class OrderFullDateVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "日账单id")
+    private String orderFullDateId;
+
+    @ApiModelProperty(value = "所属年份")
+    private String yearTime;
+
+    @ApiModelProperty(value = "所属月份")
+    private String monthTime;
+
+
+    @ApiModelProperty(value = "订单类型")
+    private OrderTypeEnum orderType;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单时间")
+    private Date orderTime;
+
+    @ApiModelProperty(value = "订单审核时间")
+    private Date examineTime;
+
+    @ApiModelProperty(value = "经销商编号")
+    private String customerNumber;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ApiModelProperty(value = "使用单位")
+    private String refUseUnit;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "金蝶物料id")
+    private String materialId;
+
+    @ApiModelProperty(value = "旧物料编码")
+    private String materialOldNumber;
+
+    @ApiModelProperty(value = "物料编号")
+    private String materialCode;
+
+    @ApiModelProperty(value = "物料名称")
+    private String materialName;
+
+    @ApiModelProperty(value = "物料规格型号")
+    private String specification;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "仓储计算数量")
+    private String orderNum;
+
+    @ApiModelProperty(value = "金额")
+    private BigDecimal payAmount;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商现金钱包id")
+    private String customerWalletId;
+
+    @ApiModelProperty(value = "经销商现金钱包名称")
+    private String customerWalletName;
+
+    @ApiModelProperty(value = "经销商现金钱包编码")
+    private String customerWalletNumber;
+
+    @ApiModelProperty(value = "货满起算日期")
+    private String fullStartTime;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "货满结算日期")
+    private String fullEndTime;
+
+    @ApiModelProperty(value = "货满天数")
+    private Integer fullNum;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "仓租金额")
+    private BigDecimal fullCost;
+
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+}

+ 93 - 0
src/main/java/com/zfire/mall/manager/bean/trade/DataLoginOrderVO.java

@@ -0,0 +1,93 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel
+public class DataLoginOrderVO {
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "登录时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "家装登录总数")
+    private Integer homeCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "家装登录成功数量")
+    private Integer homeSuccessCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "家装签约数量")
+    private Integer homeSignCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "家装签约率")
+    private BigDecimal homeSignRate;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "家装丢单数量")
+    private Integer homeLossCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "家装丢单率")
+    private BigDecimal homeLossRate;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程登录总数")
+    private Integer workCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程登录成功数量")
+    private Integer workSuccessCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程签约数量")
+    private Integer workSignCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程签约率")
+    private BigDecimal workSignRate;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程丢单数量")
+    private Integer workLossCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程丢单率")
+    private BigDecimal workLossRate;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "跨区登录总数")
+    private Integer spanCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "跨区登录成功数量")
+    private Integer spanSuccessCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "跨区签约数量")
+    private Integer spanSignCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "跨区签约率")
+    private BigDecimal spanSignRate;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "跨区丢单数量")
+    private Integer spanLossCount;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "跨区丢单率")
+    private BigDecimal spanLossRate;
+}

+ 177 - 0
src/main/java/com/zfire/mall/manager/bean/trade/HomeLoginOrderVO.java

@@ -0,0 +1,177 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.*;
+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 HomeLoginOrderVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "企业id")
+    private String adminCompanyId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "部门id")
+    private String adminWebsitId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "用户id")
+    private String adminUserId;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程类型")
+    private TradeLoginOrderTypeEnum orderType;
+
+//    @ApiModelProperty(value = "销售公司名称")
+//    private String salesCompanyName;
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "项目所在区域")
+    private TradeProjectAreaEnum projectArea;
+
+    @ApiModelProperty(value = "项目编号")
+    private String projectNo;
+
+    @ApiModelProperty(value = "工程项目名称")
+    private String projectName;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "登录时间")
+    private Date createTime;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "跟进人")
+    private String serviceId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "业务员编号")
+    private String serviceNumber;
+
+    @ApiModelProperty(value = "业务员")
+    private String serviceName;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商编码")
+    private String customerNumber;
+
+//    @ApiModelProperty(value = "经销商联系人")
+//    private String customerLinkName;
+//
+//    @ApiModelProperty(value = "经销商联系电话")
+//    private String customerLinkMobile;
+//
+//    @ApiModelProperty(value = "经销商办公地址")
+//    private String customerAddress;
+//
+//    @ApiModelProperty(value = "跟进经销商")
+//    private String followCustomer;
+//
+//    @ApiModelProperty(value = "跟进经销商电话")
+//    private String followCustomerMobile;
+//
+//    @ApiModelProperty(value = "工程联系人")
+//    private String enginLinkName;
+//
+//    @ApiModelProperty(value = "工程联系电话")
+//    private String enginLinkMobile;
+
+    @ApiModelProperty(value = "机组类型")
+    private TradeMachineTypeEnum machineType;
+
+    @ApiModelProperty(value = "工程地址")
+    private String joinAddress;
+
+//    @ApiModelProperty(value = "项目类别")
+//    private TradeLoginCategoryEnum projectCategory;
+//
+//    @ApiModelProperty(value = "类型")
+//    private TradeLoginTypeEnum type;
+//
+//    @ApiModelProperty(value = "建筑面积")
+//    private String extent;
+//
+//    @ApiModelProperty(value = "空调使用面积")
+//    private String useExtent;
+//
+//    @ApiModelProperty(value = "项目所在行业分类")
+//    private String tradeParentName;
+//
+//    @ApiModelProperty(value = "行业细分")
+//    private String tradeName;
+//
+//    @ApiModelProperty(value = "项目性质")
+//    private String projectMent;
+//
+//    @ApiModelProperty(value = "成功机率")
+//    private TradeSuccessRateEnum successRate;
+//
+//    @ApiModelProperty(value = "预计签定合同日期")
+//    private Date preSignDate;
+//
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "预计设备金额")
+    private BigDecimal preDeviceAmount;
+
+    @ApiModelProperty(value = "跟进状态")
+    private TradeFollowStatusEnum status;
+
+//    @ApiModelProperty(value = "备注")
+//    private String remark;
+//
+//    @ApiModelProperty(value = "其他相关信息")
+//    private String otherInfo;
+
+    @ApiModelProperty(value = "单据状态")
+    private TradeOrderStatusEnum orderStatus;
+
+    @ApiModelProperty(value = "登录状态")
+    private TradeLoginStatusEnum loginStatus;
+
+    @ApiModelProperty(value = "审核备注")
+    private TradeExamineNoteEnum examineNote;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "是否申请修改 true=是 false=否")
+    private BigDecimal isApplyUpdate;
+
+//    @ApiModelProperty(value = "创建人")
+//    private String createBy;
+//
+//    @ApiModelProperty(value = "更新人")
+//    private String updateBy;
+//
+//    @ApiModelProperty(value = "提交人")
+//    private String submitBy;
+//
+//    @ApiModelProperty(value = "提交时间")
+//    private Date submitTime;
+//
+//    @ApiModelProperty(value = "审核人")
+//    private String confirmBy;
+//
+//    @ApiModelProperty(value = "审核时间")
+//    private Date confirmTime;
+}

+ 179 - 0
src/main/java/com/zfire/mall/manager/bean/trade/LoginOrderVO.java

@@ -0,0 +1,179 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.*;
+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 LoginOrderVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "企业id")
+    private String adminCompanyId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "部门id")
+    private String adminWebsitId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "用户id")
+    private String adminUserId;
+
+    @ApiModelProperty(value = "是否跨区")
+    private IsEnum isSpan;
+
+    @ApiModelProperty(value = "工程类型")
+    private TradeLoginOrderTypeEnum orderType;
+
+    @ApiModelProperty(value = "销售公司名称")
+    private String salesCompanyName;
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "项目所在区域|业务所在区域")
+    private TradeProjectAreaEnum projectArea;
+
+    @ApiModelProperty(value = "项目编号")
+    private String projectNo;
+
+    @ApiModelProperty(value = "工程项目名称")
+    private String projectName;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "登录时间")
+    private Date createTime;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "跟进人")
+    private String serviceId;
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "业务员编号")
+    private String serviceNumber;
+
+    @ApiModelProperty(value = "业务员")
+    private String serviceName;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商编码")
+    private String customerNumber;
+
+    @ApiModelProperty(value = "经销商联系人")
+    private String customerLinkName;
+
+    @ApiModelProperty(value = "经销商联系电话")
+    private String customerLinkMobile;
+
+    @ApiModelProperty(value = "经销商办公地址")
+    private String customerAddress;
+
+    @ApiModelProperty(value = "跟进经销商")
+    private String followCustomer;
+
+    @ApiModelProperty(value = "跟进经销商电话")
+    private String followCustomerMobile;
+
+    @ApiModelProperty(value = "工程联系人")
+    private String enginLinkName;
+
+    @ApiModelProperty(value = "工程联系电话")
+    private String enginLinkMobile;
+
+    @ApiModelProperty(value = "机组类型")
+    private TradeMachineTypeEnum machineType;
+
+    @ApiModelProperty(value = "工程地址")
+    private String joinAddress;
+
+    @ApiModelProperty(value = "项目类别")
+    private TradeLoginCategoryEnum projectCategory;
+
+    @ApiModelProperty(value = "类型")
+    private TradeLoginTypeEnum type;
+
+    @ApiModelProperty(value = "建筑面积")
+    private String extent;
+
+    @ApiModelProperty(value = "空调使用面积")
+    private String useExtent;
+
+    @ApiModelProperty(value = "项目所在行业分类")
+    private String tradeParentName;
+
+    @ApiModelProperty(value = "行业细分")
+    private String tradeName;
+
+    @ApiModelProperty(value = "项目性质")
+    private String projectMent;
+
+    @ApiModelProperty(value = "成功机率")
+    private TradeSuccessRateEnum successRate;
+
+    @ApiModelProperty(value = "预计签定合同日期")
+    private Date preSignDate;
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "预计设备金额")
+    private BigDecimal preDeviceAmount;
+
+    @ApiModelProperty(value = "跟进状态")
+    private TradeFollowStatusEnum status;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "其他相关信息")
+    private String otherInfo;
+
+    @ApiModelProperty(value = "单据状态")
+    private TradeOrderStatusEnum orderStatus;
+
+    @ApiModelProperty(value = "登录状态")
+    private TradeLoginStatusEnum loginStatus;
+
+    @ApiModelProperty(value = "审核备注")
+    private TradeExamineNoteEnum examineNote;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "是否申请修改 true=是 false=否")
+    private BigDecimal isApplyUpdate;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+
+    @ApiModelProperty(value = "提交人")
+    private String submitBy;
+
+    @ApiModelProperty(value = "提交时间")
+    private Date submitTime;
+
+    @ApiModelProperty(value = "审核人")
+    private String confirmBy;
+
+    @ApiModelProperty(value = "审核时间")
+    private Date confirmTime;
+}

+ 13 - 0
src/main/java/com/zfire/mall/manager/bean/trade/OrderTypeCountBean.java

@@ -0,0 +1,13 @@
+package com.zfire.mall.manager.bean.trade;
+
+import lombok.Data;
+
+@Data
+public class OrderTypeCountBean {
+
+    private Integer workCount;
+
+    private Integer homeCount;
+
+    private Integer spanCount;
+}

+ 30 - 0
src/main/java/com/zfire/mall/manager/bean/trade/PositionProjectBean.java

@@ -0,0 +1,30 @@
+package com.zfire.mall.manager.bean.trade;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel
+public class PositionProjectBean {
+
+    @ApiModelProperty(value = "工程项目名称")
+    private String projectName;
+
+    @ApiModelProperty(value = "纬度")
+    private String lat;
+
+    @ApiModelProperty(value = "经度")
+    private String lnt;
+
+    @ApiModelProperty(value = "公里(单位)")
+    private BigDecimal distance;
+
+    @ApiModelProperty(value = "项目编号")
+    private String projectNo;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+}

+ 178 - 0
src/main/java/com/zfire/mall/manager/bean/trade/SpanLoginOrderVO.java

@@ -0,0 +1,178 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel
+public class SpanLoginOrderVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "企业id")
+    private String adminCompanyId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "部门id")
+    private String adminWebsitId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "用户id")
+    private String adminUserId;
+
+    @ApiModelProperty(value = "是否跨区")
+    private IsEnum isSpan;
+
+    @ApiModelProperty(value = "工程类型")
+    private TradeLoginOrderTypeEnum orderType;
+
+//    @ApiModelProperty(value = "销售公司名称")
+//    private String salesCompanyName;
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "业务所在区域")
+    private TradeProjectAreaEnum projectArea;
+
+    @ApiModelProperty(value = "项目编号")
+    private String projectNo;
+
+    @ApiModelProperty(value = "工程项目名称")
+    private String projectName;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "登录时间")
+    private Date createTime;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "跟进人")
+    private String serviceId;
+
+    @ApiModelProperty(value = "业务员")
+    private String serviceName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "业务员编号")
+    private String serviceNumber;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商编码")
+    private String customerNumber;
+
+//    @ApiModelProperty(value = "经销商联系人")
+//    private String customerLinkName;
+//
+//    @ApiModelProperty(value = "经销商联系电话")
+//    private String customerLinkMobile;
+//
+//    @ApiModelProperty(value = "经销商办公地址")
+//    private String customerAddress;
+//
+//    @ApiModelProperty(value = "跟进经销商")
+//    private String followCustomer;
+//
+//    @ApiModelProperty(value = "跟进经销商电话")
+//    private String followCustomerMobile;
+//
+//    @ApiModelProperty(value = "工程联系人")
+//    private String enginLinkName;
+//
+//    @ApiModelProperty(value = "工程联系电话")
+//    private String enginLinkMobile;
+
+    @ApiModelProperty(value = "机组类型")
+    private TradeMachineTypeEnum machineType;
+
+    @ApiModelProperty(value = "工程地址")
+    private String joinAddress;
+
+//    @ApiModelProperty(value = "项目类别")
+//    private TradeLoginCategoryEnum projectCategory;
+//
+//    @ApiModelProperty(value = "类型")
+//    private TradeLoginTypeEnum type;
+//
+//    @ApiModelProperty(value = "建筑面积")
+//    private String extent;
+//
+//    @ApiModelProperty(value = "空调使用面积")
+//    private String useExtent;
+//
+//    @ApiModelProperty(value = "项目所在行业分类")
+//    private String tradeParentName;
+//
+//    @ApiModelProperty(value = "行业细分")
+//    private String tradeName;
+//
+//    @ApiModelProperty(value = "项目性质")
+//    private String projectMent;
+//
+//    @ApiModelProperty(value = "成功机率")
+//    private TradeSuccessRateEnum successRate;
+//
+//    @ApiModelProperty(value = "预计签定合同日期")
+//    private Date preSignDate;
+//
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "预计设备金额")
+    private BigDecimal preDeviceAmount;
+
+    @ApiModelProperty(value = "跟进状态")
+    private TradeFollowStatusEnum status;
+
+//    @ApiModelProperty(value = "备注")
+//    private String remark;
+//
+//    @ApiModelProperty(value = "其他相关信息")
+//    private String otherInfo;
+
+    @ApiModelProperty(value = "单据状态")
+    private TradeOrderStatusEnum orderStatus;
+
+    @ApiModelProperty(value = "登录状态")
+    private TradeLoginStatusEnum loginStatus;
+
+    @ApiModelProperty(value = "审核备注")
+    private TradeExamineNoteEnum examineNote;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "是否申请修改 true=是 false=否")
+    private BigDecimal isApplyUpdate;
+
+//    @ApiModelProperty(value = "创建人")
+//    private String createBy;
+//
+//    @ApiModelProperty(value = "更新人")
+//    private String updateBy;
+//
+//    @ApiModelProperty(value = "提交人")
+//    private String submitBy;
+//
+//    @ApiModelProperty(value = "提交时间")
+//    private Date submitTime;
+//
+//    @ApiModelProperty(value = "审核人")
+//    private String confirmBy;
+//
+//    @ApiModelProperty(value = "审核时间")
+//    private Date confirmTime;
+}

+ 82 - 0
src/main/java/com/zfire/mall/manager/bean/trade/TradeLoginOrderBean.java

@@ -0,0 +1,82 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.enums.TradeLoginOrderTypeEnum;
+import com.zfire.mall.manager.plus.entity.TradeLoginOrder;
+import com.zfire.mall.manager.plus.entity.TradeLoginOrderFile;
+import com.zfire.mall.manager.plus.entity.TradeLoginOrderItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel
+public class TradeLoginOrderBean extends TradeLoginOrder {
+
+    @ApiModelProperty(value = "明细")
+    private List<TradeLoginOrderItem> items;
+
+    @ApiModelProperty(value = "审核附件")
+    private List<TradeLoginOrderFile> files;
+
+    @ApiModelProperty(value = "新旧数据结果(前端忽略)")
+    private String oldNewContent;
+
+    public void editParamsSetter(TradeLoginOrder order) {
+        if (order.getIsSpan()) {
+            order.setOrderType(this.getOrderType());
+        }
+        order.setProjectArea(this.getProjectArea());
+        order.setProjectNo(this.getProjectNo());
+        order.setServiceId(this.getServiceId());
+        order.setServiceNumber(this.getServiceNumber());
+        order.setServiceName(this.getServiceName());
+        order.setPartyAId(this.getPartyAId());
+        order.setPartyA(this.getPartyA());
+        order.setCustomerId(this.getCustomerId());
+        order.setCustomerNumber(this.getCustomerNumber());
+        order.setCustomerName(this.getCustomerName());
+        order.setCustomerLinkName(this.getCustomerLinkName());
+        order.setCustomerLinkMobile(this.getCustomerLinkMobile());
+        order.setCustomerAddress(this.getCustomerAddress());
+        order.setFollowCustomer(this.getFollowCustomer());
+        order.setFollowCustomerMobile(this.getFollowCustomerMobile());
+        order.setProjectName(this.getProjectName());
+        if (order.getOrderType().equals(TradeLoginOrderTypeEnum.HOME.getKey())) {
+            order.setHomeProjectNameRadio(this.getHomeProjectNameRadio());
+            order.setHomeProjectNameArea(this.getHomeProjectNameArea());
+            order.setHomeProjectNameSeat(this.getHomeProjectNameSeat());
+            order.setHomeProjectNameNumber(this.getHomeProjectNameNumber());
+        }
+        order.setEnginLinkName(this.getEnginLinkName());
+        order.setEnginLinkMobile(this.getEnginLinkMobile());
+        order.setProvinceId(this.getProvinceId());
+        order.setCityId(this.getCityId());
+        order.setAreaId(this.getAreaId());
+        order.setStreetId(this.getStreetId());
+        order.setAddress(this.getAddress());
+        order.setJoinAddress(this.getJoinAddress());
+        order.setPositionAddress(this.getPositionAddress());
+        order.setLat(this.getLat());
+        order.setLnt(this.getLnt());
+        order.setProjectCategory(this.getProjectCategory());
+        order.setDrawUpload(this.getDrawUpload());
+        order.setType(this.getType());
+        order.setExtent(this.getExtent());
+        order.setUseExtent(this.getUseExtent());
+        order.setTradeParentId(this.getTradeParentId());
+        order.setTradeParentName(this.getTradeParentName());
+        order.setTradeId(this.getTradeId());
+        order.setTradeName(this.getTradeName());
+        order.setMachineType(this.getMachineType());
+        order.setSuccessRate(this.getSuccessRate());
+        order.setPreSignDate(this.getPreSignDate());
+        order.setPreDeviceAmount(this.getPreDeviceAmount());
+        order.setStatus(this.getStatus());
+        order.setRemark(this.getRemark());
+        order.setOtherInfo(this.getOtherInfo());
+    }
+}

+ 40 - 0
src/main/java/com/zfire/mall/manager/bean/trade/UpdateLoginStatusBean.java

@@ -0,0 +1,40 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.enums.TradeFollowStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class UpdateLoginStatusBean {
+
+    @ApiModelProperty(value = "单据id")
+    private List<String> ids;
+
+    @ApiModelProperty(value = "申请人(仅展示)")
+    private String applyBy;
+
+    @ApiModelProperty(value = "所属公司(仅展示)")
+    private String applyCompany;
+
+    @ApiModelProperty(value = "申请原因(仅展示)")
+    private String applyReason;
+
+    @ApiModelProperty(value = "业务员id")
+    private String serviceId;
+
+    @ApiModelProperty(value = "业务员")
+    private String serviceName;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "审核确认 true=同意 false=拒绝")
+    private Boolean isSuccess;
+
+    @ApiModelProperty(value = "跟进状态")
+    private TradeFollowStatusEnum status;
+}

+ 177 - 0
src/main/java/com/zfire/mall/manager/bean/trade/WorkLoginOrderVO.java

@@ -0,0 +1,177 @@
+package com.zfire.mall.manager.bean.trade;
+
+import com.zfire.mall.manager.annotation.ZfireField;
+import com.zfire.mall.manager.enums.*;
+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 WorkLoginOrderVO {
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "企业id")
+    private String adminCompanyId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "部门id")
+    private String adminWebsitId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "用户id")
+    private String adminUserId;
+
+    @ZfireField(isQuery = false)
+    @ApiModelProperty(value = "工程类型")
+    private TradeLoginOrderTypeEnum orderType;
+
+//    @ApiModelProperty(value = "销售公司名称")
+//    private String salesCompanyName;
+
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "项目所在区域")
+    private TradeProjectAreaEnum projectArea;
+
+    @ApiModelProperty(value = "项目编号")
+    private String projectNo;
+
+    @ApiModelProperty(value = "工程项目名称")
+    private String projectName;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "登录时间")
+    private Date createTime;
+
+    @ZfireField(type = "date")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "跟进人")
+    private String serviceId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "业务员编号")
+    private String serviceNumber;
+
+    @ApiModelProperty(value = "业务员")
+    private String serviceName;
+
+    @ApiModelProperty(value = "经销商名称")
+    private String customerName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商id")
+    private String customerId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "经销商编码")
+    private String customerNumber;
+
+//    @ApiModelProperty(value = "经销商联系人")
+//    private String customerLinkName;
+//
+//    @ApiModelProperty(value = "经销商联系电话")
+//    private String customerLinkMobile;
+//
+//    @ApiModelProperty(value = "经销商办公地址")
+//    private String customerAddress;
+//
+//    @ApiModelProperty(value = "跟进经销商")
+//    private String followCustomer;
+//
+//    @ApiModelProperty(value = "跟进经销商电话")
+//    private String followCustomerMobile;
+//
+//    @ApiModelProperty(value = "工程联系人")
+//    private String enginLinkName;
+//
+//    @ApiModelProperty(value = "工程联系电话")
+//    private String enginLinkMobile;
+
+    @ApiModelProperty(value = "机组类型")
+    private TradeMachineTypeEnum machineType;
+
+    @ApiModelProperty(value = "工程地址")
+    private String joinAddress;
+
+    //    @ApiModelProperty(value = "项目类别")
+//    private TradeLoginCategoryEnum projectCategory;
+//
+//    @ApiModelProperty(value = "类型")
+//    private TradeLoginTypeEnum type;
+//
+//    @ApiModelProperty(value = "建筑面积")
+//    private String extent;
+//
+//    @ApiModelProperty(value = "空调使用面积")
+//    private String useExtent;
+//
+//    @ApiModelProperty(value = "项目所在行业分类")
+//    private String tradeParentName;
+//
+//    @ApiModelProperty(value = "行业细分")
+//    private String tradeName;
+//
+//    @ApiModelProperty(value = "项目性质")
+//    private String projectMent;
+//
+//    @ApiModelProperty(value = "成功机率")
+//    private TradeSuccessRateEnum successRate;
+//
+//    @ApiModelProperty(value = "预计签定合同日期")
+//    private Date preSignDate;
+//
+    @ZfireField(isShow = false)
+    @ApiModelProperty(value = "预计设备金额")
+    private BigDecimal preDeviceAmount;
+
+    @ApiModelProperty(value = "跟进状态")
+    private TradeFollowStatusEnum status;
+
+//    @ApiModelProperty(value = "备注")
+//    private String remark;
+//
+//    @ApiModelProperty(value = "其他相关信息")
+//    private String otherInfo;
+
+    @ApiModelProperty(value = "单据状态")
+    private TradeOrderStatusEnum orderStatus;
+
+    @ApiModelProperty(value = "登录状态")
+    private TradeLoginStatusEnum loginStatus;
+
+    @ApiModelProperty(value = "审核备注")
+    private TradeExamineNoteEnum examineNote;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "是否申请修改 true=是 false=否")
+    private BigDecimal isApplyUpdate;
+
+//    @ApiModelProperty(value = "创建人")
+//    private String createBy;
+//
+//    @ApiModelProperty(value = "更新人")
+//    private String updateBy;
+//
+//    @ApiModelProperty(value = "提交人")
+//    private String submitBy;
+//
+//    @ApiModelProperty(value = "提交时间")
+//    private Date submitTime;
+//
+//    @ApiModelProperty(value = "审核人")
+//    private String confirmBy;
+//
+//    @ApiModelProperty(value = "审核时间")
+//    private Date confirmTime;
+}

+ 5 - 1
src/main/java/com/zfire/mall/manager/commonmapper/AdminMapper.java

@@ -37,7 +37,8 @@ public interface AdminMapper {
                                        @Param("roleName") String roleName,
                                        @Param("websitNumber") String websitNumber,
                                        @Param("customerNumbers") List<String>  customerNumbers,
-                                       @Param("isJiaXian") Integer isJiaXian
+                                       @Param("isJiaXian") Integer isJiaXian,
+                                       @Param("isGongcheng") Integer isGongcheng
                                        );
 
 
@@ -54,4 +55,7 @@ public interface AdminMapper {
      */
     public List<String> queryChildServiceId(@Param("adminWebsitIds") List<String> adminWebsitIds,@Param("roleName") String roleName);
 
+    AdminUser selectByUserName(String userName);
+
+    void delByUserName(String userName);
 }

+ 22 - 0
src/main/java/com/zfire/mall/manager/commonmapper/CommonMapper.java

@@ -0,0 +1,22 @@
+package com.zfire.mall.manager.commonmapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.plus.entity.CustomerBillLimitConfig;
+import com.zfire.mall.manager.plus.entity.PartyAInfo;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:47 星期三
+ */
+@Mapper
+public interface CommonMapper {
+
+    IPage<CustomerBillLimitConfig> merchantLoginQuotaLimitList(Page page, @Param("ex")ZfireParamBean param);
+
+    IPage<PartyAInfo> firstPartyCustomerManagementList(Page page, @Param("ex")ZfireParamBean param);
+}

+ 17 - 1
src/main/java/com/zfire/mall/manager/commonmapper/CountMapper.java

@@ -22,6 +22,7 @@ public interface CountMapper {
     @SqlParser(filter = true)
     public IPage<OrderExecBean> queryRetailOrderExec(
             IPage page,
+            @Param("isCost") String isCost,
             @Param("materialOldNumber") String materialOldNumber,
             @Param("id") String id,
             @Param("customerName") String customerName,
@@ -55,6 +56,10 @@ public interface CountMapper {
      */
     @SqlParser(filter = true)
     public Integer queryRetailOrderExecCount(
+            @Param("costStartTime") String costStartTime,
+            @Param("costEndTime") String costEndTime,
+            @Param("refUseUnit") String refUseUnit,
+            @Param("isCost") String isCost,
             @Param("materialOldNumber") String materialOldNumber,
             @Param("id") String id,
             @Param("customerName") String customerName,
@@ -90,6 +95,7 @@ public interface CountMapper {
     @SqlParser(filter = true)
     public IPage<OrderExecBean> queryEnginOrderExec(
             IPage page,
+            @Param("isCost") String isCost,
             @Param("materialOldNumber") String materialOldNumber,
             @Param("id") String id,
             @Param("customerName") String customerName,
@@ -121,6 +127,10 @@ public interface CountMapper {
      */
     @SqlParser(filter = true)
     public Integer queryEnginOrderExecCount(
+            @Param("costStartTime") String costStartTime,
+            @Param("costEndTime") String costEndTime,
+            @Param("refUseUnit") String refUseUnit,
+            @Param("isCost") String isCost,
             @Param("materialOldNumber") String materialOldNumber,
             @Param("id") String id,
             @Param("customerName") String customerName,
@@ -160,6 +170,10 @@ public interface CountMapper {
     @SqlParser(filter = true)
     public IPage<OrderExecBean> queryOrderExecTotal(
             IPage page,
+            @Param("costStartTime") String costStartTime,
+            @Param("costEndTime") String costEndTime,
+            @Param("refUseUnit") String refUseUnit,
+            @Param("isCost") String isCost,
             @Param("materialOldNumber") String materialOldNumber,
             @Param("id") String id,
             @Param("customerName") String customerName,
@@ -185,7 +199,9 @@ public interface CountMapper {
             @Param("k3CategoryIds") List<String> k3CategoryIds,
             @Param("walletIds1") List<String> walletIds1,
             @Param("walletIds2") List<String> walletIds2,
-            @Param("priceType") String priceType
+            @Param("priceType") String priceType,
+            @Param("total2") Integer total2,
+            @Param("total") Integer total
     );
 
 

+ 2 - 0
src/main/java/com/zfire/mall/manager/commonmapper/InvoiceMapper.java

@@ -354,4 +354,6 @@ public interface InvoiceMapper {
                                          @Param("serviceIds") List<String> serviceIds,
                                          @Param("adminCompanyIds") List<String> adminCompanyIds,
                                          @Param("k3CategoryIds") List<String> k3CategoryIds);
+
+    List<String> detection();
 }

+ 52 - 0
src/main/java/com/zfire/mall/manager/commonmapper/StockCostMapper.java

@@ -0,0 +1,52 @@
+package com.zfire.mall.manager.commonmapper;
+
+import com.baomidou.mybatisplus.annotation.SqlParser;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.stock.OrderFullCostDayVO;
+import com.zfire.mall.manager.bean.stock.OrderFullCostMonthVO;
+import com.zfire.mall.manager.bean.stock.OrderFullCostVO;
+import com.zfire.mall.manager.bean.stock.OrderFullDateVO;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface StockCostMapper {
+
+    @SqlParser(filter = true)
+    IPage<OrderFullCostVO> list(IPage page,
+                                @Param("orderId") String orderId,
+                                @Param("materialName") String materialName,
+                                @Param("materialNumber") String materialNumber,
+                                @Param("specification") String specification,
+                                @Param("startTime") String startTime,
+                                @Param("endTime") String endTime,
+                                @Param("materialOldNumber") String materialOldNumber,
+                                @Param("customerId") String customerId);
+
+    @SqlParser(filter = true)
+    IPage<OrderFullCostDayVO> listFullCost(Page page,
+                                           @Param("ex") ZfireParamBean zfireParamBean,
+                                           @Param("customerId") String customerId,
+                                             @Param("serviceIds")List<String> serviceIds,
+                                           @Param("k3CategoryIds")List<String> k3CategoryIds);
+
+    IPage<OrderFullCostMonthVO> listMonthFullCost(Page page,
+                                                  @Param("ex") ZfireParamBean zfireParamBean,
+                                                  @Param("customerId") String customerId,
+                                                  @Param("serviceIds")List<String> serviceIds,
+                                                  @Param("k3CategoryIds")List<String> k3CategoryIds);
+
+
+    @SqlParser(filter = true)
+    IPage<OrderFullDateVO> listFullData(Page page,
+                                        @Param("ex")ZfireParamBean zfireParamBean,
+                                        @Param("customerId")String customerId,
+                                        @Param("serviceIds")List<String> serviceIds,
+                                        @Param("k3CategoryIds")List<String> k3CategoryIds);
+
+
+}

+ 4 - 1
src/main/java/com/zfire/mall/manager/commonmapper/listV2/CommonCMapper.java

@@ -66,7 +66,10 @@ public interface CommonCMapper {
     /**
      * 收款单列表
      */
-    public IPage<K3ReceiptVO> queryK3Receipt(IPage page,@Param("ex") ZfireParamBean zfireParamBean,@Param("customerId") String customerId);
+    public IPage<K3ReceiptVO> queryK3Receipt(IPage page,
+                                             @Param("ex") ZfireParamBean zfireParamBean,
+                                             @Param("customerId") String customerId,
+                                             @Param("serviceIds") List<String> serviceIds);
     /**
      * 其他应收单
      */

+ 4 - 0
src/main/java/com/zfire/mall/manager/commonmapper/stock/StockCommonMapper.java

@@ -197,4 +197,8 @@ public interface StockCommonMapper {
      */
     @SqlParser(filter = true)
     IPage<StockCustomerReserved> listCustomerV2(Page page, @Param("ex")  ZfireParamBean zfireParamBean, String customerId);
+
+
+    @SqlParser(filter = true)
+    StockBean listOne(@Param("correspondId") List<String> strings, @Param("materialId") String materialId);
 }

+ 29 - 0
src/main/java/com/zfire/mall/manager/commonmapper/trade/LoginOrderMapper.java

@@ -0,0 +1,29 @@
+package com.zfire.mall.manager.commonmapper.trade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.trade.*;
+import com.zfire.mall.manager.plus.entity.TradeLoginOrder;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface LoginOrderMapper {
+    IPage<WorkLoginOrderVO> workOrderList(Page page, @Param("ex") ZfireParamBean zfireParamBean, String adminUserId);
+
+    IPage<HomeLoginOrderVO> homeOrderList(Page page, @Param("ex") ZfireParamBean zfireParamBean, String adminUserId);
+
+    IPage<SpanLoginOrderVO> spanOrderList(Page page, @Param("ex") ZfireParamBean zfireParamBean, String adminUserId);
+
+    List<PositionProjectBean> queryPositionProject(@Param("id") String id, @Param("lnt") String lnt, @Param("lat") String lat, @Param("val") String val);
+
+    TradeLoginOrder syncLoginOrderRefCustomerId(@Param("projectNo") String projectNo, boolean isSpan);
+
+    OrderTypeCountBean orderCount(@Param("customerId") String customerId);
+
+    IPage<DataLoginOrderVO> dataListPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+
+    IPage<LoginOrderVO> list(Page page, @Param("ex") ZfireParamBean zfireParamBean, String adminUserId);
+}

+ 8 - 0
src/main/java/com/zfire/mall/manager/config/GlobalDefaultExceptionHandler.java

@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -31,6 +32,13 @@ public class GlobalDefaultExceptionHandler {
             return ResponseHelper.error(((RemoteServiceException) ex).getCode(),ex.getMessage());
         }
 
+        if(ex instanceof ConstraintViolationException){
+            //自定义错误就不抛出栈异常
+            //log.error("网络异常:",ex);
+            log.error("参数异常:"+ex.getMessage()+req.getRequestURI()+JSONObject.toJSONString(this.bodyParam(req)));
+            return ResponseHelper.error(ResponseHelper.ResponseCode_COMMON, ReUtil.delFirst("^\\w+\\.\\w+: ", ex.getMessage()));
+        }
+
         if (ex instanceof MethodArgumentNotValidException) {
             MethodArgumentNotValidException methodArgumentNotValidException = (MethodArgumentNotValidException) ex;
             BindingResult bindingResult = methodArgumentNotValidException.getBindingResult();

+ 1 - 2
src/main/java/com/zfire/mall/manager/config/aop/ZfireFiledAop.java

@@ -232,10 +232,9 @@ public class ZfireFiledAop {
             }
         }
 
-
         if(StringUtils.equals(typeName,"java.math.BigDecimal")){
             fieldBean.setType("amount");
-        }else if(StringUtils.equals(typeName,"java.util.Date")){
+        }else if(StringUtils.equals(typeName,"java.util.Date") && fieldBean.getType().equals("input")) {
             fieldBean.setType("datetime");
         }else if(StringUtils.equals(typeName,"java.lang.Integer")){
             fieldBean.setType("number");

+ 10 - 1
src/main/java/com/zfire/mall/manager/constant/Constant.java

@@ -1,6 +1,5 @@
 package com.zfire.mall.manager.constant;
 
-import java.io.Serializable;
 import java.math.BigDecimal;
 
 public class Constant {
@@ -10,6 +9,7 @@ public class Constant {
     //不可删除的角色
     public static final String NOT_DEL_ROLE_NAME = "经销商";
     public static final String NOT_DEL_ROLE_YWY = "业务员";
+    public static final String NOT_DEL_ROLE_SPY = "商用登录审核员";
     //业务员
     public static final String NOT_DEL_ROLE_NAME2 = "财务";
     //商用
@@ -93,8 +93,11 @@ public class Constant {
     public static final String SUPPLY_CHANGE_NUM = "SUPPLY_CHANGE_NUM";
 
 
+    //嘉贤子经销商权限
     public static final String SUPPLY_ROLE_CHILD_USER = "1646722256677675009";
 
+    //商户经销商权限
+    public static final String SUPPLY_ROLE_CHILD_GONGCHENG = "1685182772777353218";
 
     public class Ali {
         public final static String ACCESS_KEY_ID = "LTAI5tN5RSgMtdGDrNDAqMLT";
@@ -235,6 +238,12 @@ public class Constant {
         //信息单号每年流水
         public final static String INFO_ORDER_NUM = "supply:info:order:no:";
 
+
+        // 商用工程登录单锁
+        public final static String TRADE_LOGIN_ORDER = "supply:trade:login:order:";
+        // 商用工程引用登录单锁
+        public final static String TRADE_LOGIN_REF_ORDER = "supply:trade:login:ref:order";
+
     }
 
 

+ 75 - 1
src/main/java/com/zfire/mall/manager/controller/admin/AdminUserController.java

@@ -368,9 +368,10 @@ public class AdminUserController {
     public ResponseHelper updateChild(
             @ApiParam(value = "帐号id", required = true) @RequestParam String adminUserId,
             @ApiParam(value = "密码", required = false) @RequestParam(required = false) String password,
+            @ApiParam(value = "name", required = false) @RequestParam(required = false) String nickName,
             @ApiParam(value = "权限id", required = false) @RequestParam(required = false) List<String> adminModuleIds
     ) throws RemoteServiceException {
-        adminUserLogic.updateChildUser(adminUserId, password,adminModuleIds);
+        adminUserLogic.updateChildUser(adminUserId, password,adminModuleIds,nickName);
         return ResponseHelper.success();
     }
 
@@ -447,4 +448,77 @@ public class AdminUserController {
         adminUserLogic.addJiaXian(userName, password,customerId);
         return ResponseHelper.success();
     }
+
+
+    @GetMapping("/listGongCheng")
+    @ApiOperation(value = "工程子帐号列表")
+    public ResponseHelper<IPage<AdminUserDto>> listGongCheng(
+            @ApiParam(value = "部门id",required = false) @RequestParam(required = false) String adminWebsitId,
+            @ApiParam(value = "角色id",required = false) @RequestParam(required = false) String roleId,
+            @ApiParam(value = "经销商id",required = false) @RequestParam(required = false) String customerId,
+            @ApiParam(value = "1=经销商 0=业务员",required = false) @RequestParam(required = false) Boolean isCustomer,
+            @ApiParam(value = "true=主账号 false=子账号",required = false) @RequestParam(required = false) Boolean isMaster,
+            @ApiParam(value = "状态 true:正常 false:冻结",required = false) @RequestParam(required = false) Boolean status,
+            @ApiParam(value = "用户名",required = false) @RequestParam(required = false) String userName,
+            @ApiParam(value = "页号",required = true) @RequestParam(required = true) Integer pageNum,
+            @ApiParam(value = "页大小",required = true) @RequestParam(required = true) Integer pageSize,
+            HttpServletRequest request
+    ) throws RemoteServiceException {
+        IPage<AdminUserDto> page = adminUserLogic.listGongCheng(adminWebsitId,roleId,customerId,isCustomer,isMaster,status,userName,pageNum, pageSize,request);
+        return ResponseHelper.success(page);
+    }
+
+
+    @GetMapping("/detailGongCheng")
+    @ApiOperation(value = "工程子帐号详情")
+    public ResponseHelper<AdminUserDto> detailGongCheng(
+            @ApiParam(value = "id",required = false) @RequestParam(required = false) String adminUserId
+
+    ) throws RemoteServiceException {
+        AdminUserDto page = adminUserLogic.detailGongCheng(adminUserId);
+        return ResponseHelper.success(page);
+    }
+
+
+
+    @PostMapping("/user/child/addGongCheng")
+    @ApiOperation(value = "新建工程经销商子账号")
+    public ResponseHelper addGongCheng(
+            @ApiParam(value = "帐号", required = false) @RequestParam String userName,
+            @ApiParam(value = "账号名称", required = false) @RequestParam String nickName,
+            @ApiParam(value = "父经销商id", required = true) @RequestParam String parentId,
+            @ApiParam(value = "密码", required = true) @RequestParam String password,
+            @ApiParam(value = "工装登录名额限制", required = true) @RequestParam Integer workLoginLimit,
+            @ApiParam(value = "家装登录名额限制", required = true) @RequestParam Integer homeLoginLimit,
+            @ApiParam(value = "跨区登录名额限制", required = true) @RequestParam Integer spanLoginLimit
+    ) throws RemoteServiceException {
+        adminUserLogic.addGongCheng(userName, password,parentId,nickName,workLoginLimit,homeLoginLimit,spanLoginLimit);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/user/child/updateGongCheng")
+    @ApiOperation(value = "编辑工程经销商子账号")
+    public ResponseHelper updateGongCheng(
+            @ApiParam(value = "账号名称", required = false) @RequestParam String nickName,
+            @ApiParam(value = "adminUserId", required = false) @RequestParam String adminUserId,
+            @ApiParam(value = "工装登录名额限制", required = true) @RequestParam Integer workLoginLimit,
+            @ApiParam(value = "家装登录名额限制", required = true) @RequestParam Integer homeLoginLimit,
+            @ApiParam(value = "跨区登录名额限制", required = true) @RequestParam Integer spanLoginLimit
+    ) throws RemoteServiceException {
+        adminUserLogic.updateGongCheng(adminUserId,nickName,workLoginLimit,homeLoginLimit,spanLoginLimit);
+        return ResponseHelper.success();
+    }
+
+
+    @PostMapping("/user/child/delGongCheng")
+    @ApiOperation(value = "删除工程经销商子账号")
+    public ResponseHelper delGongCheng(
+
+            @ApiParam(value = "userName", required = false) @RequestParam String userName
+
+    ) throws RemoteServiceException {
+        adminUserLogic.delGongCheng(userName);
+        return ResponseHelper.success();
+    }
+
 }

+ 8 - 1
src/main/java/com/zfire/mall/manager/controller/common/CommonController.java

@@ -4,7 +4,6 @@ import com.aliyuncs.utils.StringUtils;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zfire.mall.manager.bean.direct.SysDictBean;
-import com.zfire.mall.manager.enums.SysDictEnum;
 import com.zfire.mall.manager.exception.RemoteServiceException;
 import com.zfire.mall.manager.helper.ResponseHelper;
 import com.zfire.mall.manager.logic.OperatorLogic;
@@ -236,5 +235,13 @@ public class CommonController {
         return ResponseHelper.success(operatorLogIPage);
     }
 
+    @PostMapping("/region")
+    @ApiOperation("高德省市区街道")
+    public ResponseHelper<List<LbsAmap>> regionList(
+            @ApiParam(value = "父级id,为空则返回省", required = false) @RequestParam(required = false) List<String> parentLbsId
+    ) {
+        List<LbsAmap> lbsAmaps = commonLogic.regionList(parentLbsId);
+        return ResponseHelper.success(lbsAmaps);
+    }
 
 }

+ 90 - 0
src/main/java/com/zfire/mall/manager/controller/config/FirstPartyCustomerManagementController.java

@@ -0,0 +1,90 @@
+package com.zfire.mall.manager.controller.config;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.annotation.ZfireList;
+import com.zfire.mall.manager.bean.config.*;
+import com.zfire.mall.manager.helper.ResponseHelper;
+import com.zfire.mall.manager.logic.common.CommonLogic;
+import com.zfire.mall.manager.logic.config.FirstPartyCustomerManagementLogic;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import com.zfire.mall.manager.zfire.util.FieldUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 11:14 星期三
+ */
+
+@RequiredArgsConstructor
+@Validated
+@RestController
+@Api(value = "甲方客户管理", tags = "甲方客户管理")
+@RequestMapping(value = "config/firstPartyCustomerManagement")
+public class FirstPartyCustomerManagementController {
+    private final FirstPartyCustomerManagementLogic firstPartyCustomerManagementLogic;
+    private final CommonLogic commonLogic;
+
+    @ZfireList
+    @PostMapping("list")
+    @ApiOperation(value = "列表")
+    public ResponseHelper<IPage<FirstPartyCustomerManagementListVO>> list(@RequestBody ZfireParamBean param) {
+        IPage<FirstPartyCustomerManagementListVO> page = firstPartyCustomerManagementLogic.list(FieldUtils.supplyParam(param));
+        return ResponseHelper.success(page, new TypeReference<FirstPartyCustomerManagementListVO>() {});
+    }
+
+    @PostMapping("detail")
+    @ApiOperation(value = "详情")
+    public ResponseHelper<FirstPartyCustomerManagementDetailVO> detail(
+            @ApiParam("商家登录名额限制Id")
+            @NotBlank(message = "id不能为空")
+            @Length(max = 64, message = "id最大长度为64")
+            @RequestParam String id) {
+        return ResponseHelper.success(firstPartyCustomerManagementLogic.detail(id));
+    }
+
+    @PostMapping("edit")
+    @ApiOperation(value = "编辑")
+    public ResponseHelper edit(@RequestBody @Valid FirstPartyCustomerManagementEditParam param) {
+        return ResponseHelper.toResult(firstPartyCustomerManagementLogic.edit(param, commonLogic.getAdminUser()));
+    }
+
+    @PostMapping("add")
+    @ApiOperation(value = "新增")
+    public ResponseHelper add(@RequestBody @Valid FirstPartyCustomerManagementAddParam param) {
+        return ResponseHelper.toResult(firstPartyCustomerManagementLogic.add(param, commonLogic.getAdminUser()));
+    }
+
+    @PostMapping("del")
+    @ApiOperation(value = "删除")
+    public ResponseHelper del(
+            @ApiParam("商家登录名额限制Id")
+            @NotEmpty(message = "id不能为空")
+            @RequestParam @Valid List<@Length(max = 64, message = "id最大长度为64")String> idList) {
+        return ResponseHelper.success(firstPartyCustomerManagementLogic.del(idList));
+    }
+
+    @PostMapping("export")
+    @ApiOperation(value = "导出")
+    public void export(@RequestBody ZfireParamBean zfireParamBean, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        IPage<FirstPartyCustomerManagementListVO> page = firstPartyCustomerManagementLogic.list(zfireParam);
+        FieldUtils.exportData(page.getRecords(), zfireParam.getExportFields(), request, response);
+    }
+}

+ 92 - 0
src/main/java/com/zfire/mall/manager/controller/config/MerchantLoginQuotaLimitController.java

@@ -0,0 +1,92 @@
+package com.zfire.mall.manager.controller.config;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.annotation.ZfireList;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitAddParam;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitDetailVO;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitEditParam;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitListVO;
+import com.zfire.mall.manager.helper.ResponseHelper;
+import com.zfire.mall.manager.logic.common.CommonLogic;
+import com.zfire.mall.manager.logic.config.MerchantLoginQuotaLimitLogic;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import com.zfire.mall.manager.zfire.util.FieldUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 10:46 星期三
+ */
+
+@RequiredArgsConstructor
+@Validated
+@RestController
+@Api(value = "商家登录名额限制", tags = "商家登录名额限制")
+@RequestMapping(value = "config/merchantLoginQuotaLimit")
+public class MerchantLoginQuotaLimitController {
+    private final MerchantLoginQuotaLimitLogic merchantLoginQuotaLimitLogic;
+    private final CommonLogic commonLogic;
+
+    @ZfireList
+    @PostMapping("list")
+    @ApiOperation(value = "列表")
+    public ResponseHelper<IPage<MerchantLoginQuotaLimitListVO>> list(@RequestBody ZfireParamBean param) {
+        IPage<MerchantLoginQuotaLimitListVO> page = merchantLoginQuotaLimitLogic.list(FieldUtils.supplyParam(param));
+        return ResponseHelper.success(page, new TypeReference<MerchantLoginQuotaLimitListVO>() {});
+    }
+
+    @PostMapping("detail")
+    @ApiOperation(value = "详情")
+    public ResponseHelper<MerchantLoginQuotaLimitDetailVO> detail(
+            @ApiParam("商家登录名额限制Id")
+            @NotBlank(message = "id不能为空")
+            @Length(max = 64, message = "id最大长度为64")
+            @RequestParam String id) {
+        return ResponseHelper.success(merchantLoginQuotaLimitLogic.detail(id));
+    }
+
+    @PostMapping("edit")
+    @ApiOperation(value = "编辑")
+    public ResponseHelper edit(@RequestBody @Valid MerchantLoginQuotaLimitEditParam param) {
+        return ResponseHelper.toResult(merchantLoginQuotaLimitLogic.edit(param, commonLogic.getAdminUser()));
+    }
+
+    @PostMapping("add")
+    @ApiOperation(value = "添加")
+    public ResponseHelper add(@RequestBody @Valid MerchantLoginQuotaLimitAddParam param) {
+        return ResponseHelper.toResult(merchantLoginQuotaLimitLogic.add(param, commonLogic.getAdminUser()));
+    }
+
+    @PostMapping("del")
+    @ApiOperation(value = "删除")
+    public ResponseHelper del(
+            @ApiParam("商家登录名额限制Id")
+            @NotEmpty(message = "id不能为空")
+            @RequestBody @Valid List<@Length(max = 64, message = "id最大长度为64")String> idList) {
+        return ResponseHelper.toResult(merchantLoginQuotaLimitLogic.del(idList));
+    }
+
+    @PostMapping("export")
+    @ApiOperation(value = "导出")
+    public void export(@RequestBody ZfireParamBean param, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(param);
+        IPage<MerchantLoginQuotaLimitListVO> page = merchantLoginQuotaLimitLogic.list(zfireParam);
+        FieldUtils.exportData(page.getRecords(), zfireParam.getExportFields(), request, response);
+    }
+}

+ 70 - 0
src/main/java/com/zfire/mall/manager/controller/config/TradeConfigController.java

@@ -0,0 +1,70 @@
+package com.zfire.mall.manager.controller.config;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zfire.mall.manager.bean.config.*;
+import com.zfire.mall.manager.helper.ResponseHelper;
+import com.zfire.mall.manager.logic.common.CommonLogic;
+import com.zfire.mall.manager.logic.config.TradeConfigLogic;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 13:44 星期三
+ */
+
+@RequiredArgsConstructor
+@Validated
+@RestController
+@Api(value = "行业配置", tags = "行业配置")
+@RequestMapping(value = "config/tradeConfig")
+public class TradeConfigController {
+    private final TradeConfigLogic tradeConfigLogic;
+    private final CommonLogic commonLogic;
+
+    @PostMapping("list")
+    @ApiOperation(value = "列表")
+    public ResponseHelper<IPage<TradeConfigListVO>> list(@RequestBody @Valid TradeConfigListParam param) {
+        return ResponseHelper.success(tradeConfigLogic.list(param));
+    }
+
+    @PostMapping("listLevel")
+    @ApiOperation(value = "列表级别")
+    public ResponseHelper<List<TradeConfigListLevelVO>> listLevel(
+            @RequestParam(required = false)
+            @ApiParam("搜索关键字") String keyword) {
+        return ResponseHelper.success(tradeConfigLogic.listLevel(keyword));
+    }
+
+    @PostMapping("edit")
+    @ApiOperation(value = "编辑")
+    public ResponseHelper edit(@RequestBody @Valid TradeConfigEditParam param) {
+        return ResponseHelper.toResult(tradeConfigLogic.edit(param, commonLogic.getAdminUser()));
+    }
+
+    @PostMapping("add")
+    @ApiOperation(value = "添加")
+    public ResponseHelper add(@RequestBody @Valid TradeConfigAddParam param) {
+        return ResponseHelper.toResult(tradeConfigLogic.add(param, commonLogic.getAdminUser()));
+    }
+
+    @PostMapping("del")
+    @ApiOperation(value = "删除")
+    public ResponseHelper del(
+            @ApiParam("行业配置id")
+            @NotBlank(message = "id不能为空")
+            @Length(max = 64, message = "id最大长度为64")
+            @RequestParam String id) {
+        return ResponseHelper.toResult(tradeConfigLogic.del(id));
+    }
+}

+ 2 - 2
src/main/java/com/zfire/mall/manager/controller/customer/CustomerController.java

@@ -95,7 +95,7 @@ public class CustomerController {
     public ResponseHelper<IPage<KingDeeCustomer>> list(
             @ApiParam(required = false, value = "经销商名称/经销商编号") @RequestParam(required = false) String keyword,
             @ApiParam(required = false, value = "地区") @RequestParam(required = false) String region,
-            @ApiParam(required = false, value = "KING 金蝶经销商  JIAXIAN嘉贤二级经销商") @RequestParam(required = false) String jiaxianType,
+            @ApiParam(required = false, value = "KING 金蝶经销商  JIAXIAN嘉贤二级经销商 GONGCHENG 商用经销商") @RequestParam(required = false) String jiaxianType,
             @ApiParam(required = false, value = "未被绑定的经销商列表 true=已绑定 false=未绑定") @RequestParam(required = false) Boolean bindUser,
             @ApiParam(required = false, value = "是否为集团客户 true=是 false=否") @RequestParam(required = false) Boolean isGroupCompany,
             @ApiParam(required = false, value = "GZ=广州  FS=佛山") @RequestParam(required = false) String websitNumber,
@@ -112,7 +112,7 @@ public class CustomerController {
     public void export(
             @ApiParam(required = false, value = "搜索内容") @RequestParam(required = false) String keyword,
             @ApiParam(required = false, value = "地区") @RequestParam(required = false) String region,
-            @ApiParam(required = false, value = "KING 金蝶经销商  JIAXIAN嘉贤二级经销商") @RequestParam(required = false) String jiaxianType,
+            @ApiParam(required = false, value = "KING 金蝶经销商  JIAXIAN嘉贤二级经销商 GONGCHENG 商用经销商") @RequestParam(required = false) String jiaxianType,
             @ApiParam(required = false, value = "未被绑定的经销商列表 true=已绑定 false=未绑定") @RequestParam(required = false) Boolean bindUser,
             @ApiParam(required = false, value = "是否为集团客户 true=是 false=否") @RequestParam(required = false) Boolean isGroupCompany,
             HttpServletRequest request, HttpServletResponse response

+ 8 - 8
src/main/java/com/zfire/mall/manager/controller/engin/order/EnginOrderController.java

@@ -16,7 +16,7 @@ import com.zfire.mall.manager.exception.RemoteServiceException;
 import com.zfire.mall.manager.helper.ResponseHelper;
 import com.zfire.mall.manager.logic.common.CommonLogic;
 import com.zfire.mall.manager.logic.engin.order.EnginOrderLogic;
-//import com.zfire.mall.manager.logic.engin.order.EnginSysLogic;
+import com.zfire.mall.manager.logic.engin.order.EnginSysLogic;
 import com.zfire.mall.manager.plus.entity.EnginOrder;
 import com.zfire.mall.manager.utils.excel.ExcelUtils;
 import io.swagger.annotations.Api;
@@ -50,8 +50,8 @@ public class EnginOrderController {
     EnginOrderLogic enginOrderLogic;
     @Resource
     RedisLockRegistry redisLockRegistry;
-//    @Resource
-//    EnginSysLogic enginSysLogic;
+    @Resource
+    EnginSysLogic enginSysLogic;
     @Resource
     CommonLogic commonLogic;
 
@@ -503,11 +503,11 @@ public class EnginOrderController {
                     } else {
                         if (orderType.equals(OrderTypeEnum.HOME.getKey())) {
                             EnginOrder enginOrder = enginOrderLogic.execHandlerHome(enginOrderBean, operType);
-//                            if (Objects.nonNull(enginOrder)
-//                                    && enginOrderBean.isExamineResult()
-//                                    && operType.equals(SysDictConstant.EXAMINE)) {
-//                                enginSysLogic.updEngineSystemBill(enginOrder, null);
-//                            }
+                            if (Objects.nonNull(enginOrder)
+                                    && enginOrderBean.isExamineResult()
+                                    && operType.equals(SysDictConstant.EXAMINE)) {
+                                enginSysLogic.updEngineSystemBill(enginOrder, null);
+                            }
                         } else {
                             //商用订单提交审核
                             enginOrderLogic.execHandlerTrade(enginOrderBean, operType);

+ 74 - 74
src/main/java/com/zfire/mall/manager/controller/engin/order/EnginSysController.java

@@ -6,7 +6,7 @@ import com.zfire.mall.manager.bean.engin.order.EnginOrderListBean;
 import com.zfire.mall.manager.datasource.engin.entity.AgencyBills;
 import com.zfire.mall.manager.datasource.engin.entity.AgencyBillsBean;
 import com.zfire.mall.manager.helper.ResponseHelper;
-//import com.zfire.mall.manager.logic.engin.order.EnginSysLogic;
+import com.zfire.mall.manager.logic.engin.order.EnginSysLogic;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -15,76 +15,76 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.constraints.NotBlank;
-//
-//@Slf4j
-//@RestController
-//@Api(value = "工程系统接口API", tags ={"工程系统接口API"} )
-//@RequestMapping(value = "/engin-sys/api", produces = "application/json; charset=utf-8")
-//public class EnginSysController {
-//
-//    @Resource
-//    EnginSysLogic enginSysLogic;
-//
-//    @ApiOperation(value = "工程订单列表")
-//    @GetMapping("/list")
-//    public ResponseHelper<IPage<AgencyBills>> list(
-//            @ApiParam(value = "工程登录编号") @RequestParam(required = false) String recordNo,
-//            @ApiParam(value = "工程项目") @RequestParam(required = false) String projectName,
-//            @ApiParam(value = "使用单位") @RequestParam(required = false) String useUnit,
-//            @ApiParam(value = "页号",required = true)@RequestParam Integer pageNum,
-//            @ApiParam(value = "页大小",required = true)@RequestParam Integer pageSize
-//    ) throws Exception {
-//        IPage<AgencyBills> listPage = enginSysLogic.listPage(recordNo, projectName, useUnit, pageNum, pageSize);
-//        return ResponseHelper.success(listPage);
-//    }
-//
-//    @ApiOperation(value = "工程订单详情")
-//    @GetMapping("/detail")
-//    public ResponseHelper<AgencyBillsBean> detail(
-//            @ApiParam(value = "销售类型") @NotBlank(message = "销售类型不能为空") @RequestParam String saleTypeId,
-//            @ApiParam(value = "工程登录编号") @RequestParam(required = false) String recordNo,
-//            @ApiParam(value = "工程登录用户编号") @RequestParam(required = false) String userId,
-//            @ApiParam(value = "家用工程订单号") @RequestParam(required = false) String enginOrderId,
-//            @ApiParam(value = "经销商id") @RequestParam(required = false) String customerId
-//    ) throws Exception {
-//        AgencyBillsBean bills = enginSysLogic.findBills(saleTypeId, recordNo, userId, enginOrderId, customerId);
-//        return ResponseHelper.success(bills);
-//    }
-//
-//    @ApiNotAuth
-//    @ApiOperation(value = "平台查询工程登录单列表")
-//    @PostMapping("/platform/query/list")
-//    public ResponseHelper<IPage<EnginOrderListBean>> platformQueryList(
-//            @ApiParam(value = "帐号",required = true) @RequestParam String userName,
-//            @ApiParam(value = "密码",required = true) @RequestParam String password,
-//            @ApiParam(value = "时间戳",required = true) @RequestParam String timestamp,
-//            @ApiParam(value = "签名",required = true) @RequestParam String sign,
-//            @ApiParam(value = "工程登录编号") @RequestParam(required = false) String recordNo,
-//            @ApiParam(value = "订单编号") @RequestParam(required = false) String orderNo,
-//            @ApiParam(value = "使用单位") @RequestParam(required = false) String useUnit,
-//            @ApiParam(value = "规格机型") @RequestParam(required = false) String specs,
-//            @ApiParam(value = "实装机型") @RequestParam(required = false) String realModel,
-//            @ApiParam(value = "客户地址") @RequestParam(required = false) String address,
-//            @ApiParam(value = "单据类型") @RequestParam(required = false) String orderType,
-//            @ApiParam(value = "页号",required = true) @RequestParam Integer pageNum,
-//            @ApiParam(value = "页大小",required = true) @RequestParam Integer pageSize
-//    ) throws Exception {
-//        IPage<EnginOrderListBean> listPage = enginSysLogic.platformQueryList(userName, password, timestamp, sign, recordNo,
-//                orderNo, useUnit, specs, realModel, address, orderType, pageNum, pageSize);
-//        return ResponseHelper.success(listPage);
-//    }
-//
-//    @ApiNotAuth
-//    @ApiOperation(value = "平台引用工程登录单")
-//    @PostMapping("/platform/ref")
-//    public ResponseHelper platformRef(
-//            @ApiParam(value = "工程登录编号",required = true) @RequestParam String recordNo,
-//            @ApiParam(value = "id",required = true) @RequestParam String itemId,
-//            @ApiParam(value = "引用状态 true=是 false=否",required = true) @RequestParam Boolean isRef,
-//            @ApiParam(value = "时间戳",required = true) @RequestParam String timestamp,
-//            @ApiParam(value = "签名",required = true) @RequestParam String sign
-//    ) throws Exception {
-//        enginSysLogic.platformRef(recordNo, itemId, isRef, timestamp, sign);
-//        return ResponseHelper.success();
-//    }
-//}
+
+@Slf4j
+@RestController
+@Api(value = "工程系统接口API", tags ={"工程系统接口API"} )
+@RequestMapping(value = "/engin-sys/api", produces = "application/json; charset=utf-8")
+public class EnginSysController {
+
+    @Resource
+    EnginSysLogic enginSysLogic;
+
+    @ApiOperation(value = "工程订单列表")
+    @GetMapping("/list")
+    public ResponseHelper<IPage<AgencyBills>> list(
+            @ApiParam(value = "工程登录编号") @RequestParam(required = false) String recordNo,
+            @ApiParam(value = "工程项目") @RequestParam(required = false) String projectName,
+            @ApiParam(value = "使用单位") @RequestParam(required = false) String useUnit,
+            @ApiParam(value = "页号",required = true)@RequestParam Integer pageNum,
+            @ApiParam(value = "页大小",required = true)@RequestParam Integer pageSize
+    ) throws Exception {
+        IPage<AgencyBills> listPage = enginSysLogic.listPage(recordNo, projectName, useUnit, pageNum, pageSize);
+        return ResponseHelper.success(listPage);
+    }
+
+    @ApiOperation(value = "工程订单详情")
+    @GetMapping("/detail")
+    public ResponseHelper<AgencyBillsBean> detail(
+            @ApiParam(value = "销售类型") @NotBlank(message = "销售类型不能为空") @RequestParam String saleTypeId,
+            @ApiParam(value = "工程登录编号") @RequestParam(required = false) String recordNo,
+            @ApiParam(value = "工程登录用户编号") @RequestParam(required = false) String userId,
+            @ApiParam(value = "家用工程订单号") @RequestParam(required = false) String enginOrderId,
+            @ApiParam(value = "经销商id") @RequestParam(required = false) String customerId
+    ) throws Exception {
+        AgencyBillsBean bills = enginSysLogic.findBills(saleTypeId, recordNo, userId, enginOrderId, customerId);
+        return ResponseHelper.success(bills);
+    }
+
+    @ApiNotAuth
+    @ApiOperation(value = "平台查询工程登录单列表")
+    @PostMapping("/platform/query/list")
+    public ResponseHelper<IPage<EnginOrderListBean>> platformQueryList(
+            @ApiParam(value = "帐号",required = true) @RequestParam String userName,
+            @ApiParam(value = "密码",required = true) @RequestParam String password,
+            @ApiParam(value = "时间戳",required = true) @RequestParam String timestamp,
+            @ApiParam(value = "签名",required = true) @RequestParam String sign,
+            @ApiParam(value = "工程登录编号") @RequestParam(required = false) String recordNo,
+            @ApiParam(value = "订单编号") @RequestParam(required = false) String orderNo,
+            @ApiParam(value = "使用单位") @RequestParam(required = false) String useUnit,
+            @ApiParam(value = "规格机型") @RequestParam(required = false) String specs,
+            @ApiParam(value = "实装机型") @RequestParam(required = false) String realModel,
+            @ApiParam(value = "客户地址") @RequestParam(required = false) String address,
+            @ApiParam(value = "单据类型") @RequestParam(required = false) String orderType,
+            @ApiParam(value = "页号",required = true) @RequestParam Integer pageNum,
+            @ApiParam(value = "页大小",required = true) @RequestParam Integer pageSize
+    ) throws Exception {
+        IPage<EnginOrderListBean> listPage = enginSysLogic.platformQueryList(userName, password, timestamp, sign, recordNo,
+                orderNo, useUnit, specs, realModel, address, orderType, pageNum, pageSize);
+        return ResponseHelper.success(listPage);
+    }
+
+    @ApiNotAuth
+    @ApiOperation(value = "平台引用工程登录单")
+    @PostMapping("/platform/ref")
+    public ResponseHelper platformRef(
+            @ApiParam(value = "工程登录编号",required = true) @RequestParam String recordNo,
+            @ApiParam(value = "id",required = true) @RequestParam String itemId,
+            @ApiParam(value = "引用状态 true=是 false=否",required = true) @RequestParam Boolean isRef,
+            @ApiParam(value = "时间戳",required = true) @RequestParam String timestamp,
+            @ApiParam(value = "签名",required = true) @RequestParam String sign
+    ) throws Exception {
+        enginSysLogic.platformRef(recordNo, itemId, isRef, timestamp, sign);
+        return ResponseHelper.success();
+    }
+}

+ 21 - 1
src/main/java/com/zfire/mall/manager/controller/pick/PickController.java

@@ -198,7 +198,7 @@ public class PickController {
     }
 
     @PostMapping("/delete")
-    @ApiOperation("提货单作废取消")
+    @ApiOperation("提货单取消")
     public ResponseHelper delete(
             @ApiParam(required = true, value = "提货单号") @RequestParam(required = true) String id
             , HttpServletRequest request) throws Exception {
@@ -216,6 +216,26 @@ public class PickController {
         return ResponseHelper.success();
     }
 
+
+    @PostMapping("/deleteDa")
+    @ApiOperation("提货单作废")
+    public ResponseHelper deleteDa(
+            @ApiParam(required = true, value = "提货单号") @RequestParam(required = true) String id
+            , HttpServletRequest request) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.INVOICE_APPLICATION + id);
+        try {
+            if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+                throw new RemoteServiceException("系统繁忙,请稍后再试");
+            }
+
+            pickLogic.deleteDa(id);
+
+        } finally {
+            obtain.unlock();
+        }
+        return ResponseHelper.success();
+    }
+
     @PostMapping("/update")
     @ApiOperation("修改提货预约")
     public ResponseHelper update(@RequestBody PickManagerRequest pickManagerRequest, HttpServletRequest request) throws InterruptedException {

+ 21 - 4
src/main/java/com/zfire/mall/manager/controller/retail/RetailController.java

@@ -538,10 +538,14 @@ public class RetailController {
             @ApiParam(value = "现金钱包",required = false) @RequestParam(required = false) List<String> walletIds1,
             @ApiParam(value = "返利钱包",required = false) @RequestParam(required = false) List<String> walletIds2,
             @ApiParam(value = "价格类型",required = false) @RequestParam(required = false) String priceType,
+            @ApiParam(value = "是否剔除仓储收费",required = false) @RequestParam(required = false) String isCost,
+            @ApiParam(value = "货满有效期开始",required = false) @RequestParam(required = false) String costStartTime,
+            @ApiParam(value = "货满有效期结束",required = false) @RequestParam(required = false) String costEndTime,
+            @ApiParam(value = "使用单位",required = false) @RequestParam(required = false) String refUseUnit,
             @ApiParam(value = "页号",required = true) @RequestParam(required = true) Integer pageNum,
             @ApiParam(value = "页大小",required = true) @RequestParam(required = true) Integer pageSize
     ){
-        IPage<OrderExecBean> orderExecBeanIPage = retailOrderLogic.queryRetailOrderExec(materialOldNumber, id, customerName, materialName,specification,
+        IPage<OrderExecBean> orderExecBeanIPage = retailOrderLogic.queryRetailOrderExec(costStartTime,costEndTime,refUseUnit,isCost,materialOldNumber, id, customerName, materialName,specification,
                 startTime, endTime, orderStartTime,orderEndTime, serviceName,itemServiceName,newServiceName, type,k3CategoryNumber,projectName,enginRecordNo,
                 policyCode,policyRemark,isOver,isDisplaceOrder,walletIds1,walletIds2,priceType, pageNum, pageSize);
         return ResponseHelper.success(orderExecBeanIPage);
@@ -574,10 +578,14 @@ public class RetailController {
             @ApiParam(value = "现金钱包",required = false) @RequestParam(required = false) List<String> walletIds1,
             @ApiParam(value = "返利钱包",required = false) @RequestParam(required = false) List<String> walletIds2,
             @ApiParam(value = "价格类型",required = false) @RequestParam(required = false) String priceType,
+            @ApiParam(value = "是否剔除仓储收费",required = false) @RequestParam(required = false) String isCost,
+            @ApiParam(value = "货满有效期开始",required = false) @RequestParam(required = false) String costStartTime,
+            @ApiParam(value = "货满有效期结束",required = false) @RequestParam(required = false) String costEndTime,
+            @ApiParam(value = "使用单位",required = false) @RequestParam(required = false) String refUseUnit,
             @ApiParam(value = "页号",required = true) @RequestParam(required = true) Integer pageNum,
             @ApiParam(value = "页大小",required = true) @RequestParam(required = true) Integer pageSize
     ){
-        IPage<OrderExecBean> orderExecBeanIPage = retailOrderLogic.queryRetailOrderExecTotal(materialOldNumber, id, customerName, materialName,specification,
+        IPage<OrderExecBean> orderExecBeanIPage = retailOrderLogic.queryRetailOrderExecTotal(costStartTime,costEndTime,refUseUnit,isCost,materialOldNumber, id, customerName, materialName,specification,
                 startTime, endTime,orderStartTime,orderEndTime, serviceName,itemServiceName,newServiceName, type,k3CategoryNumber,projectName,enginRecordNo,
                 policyCode,policyRemark,isOver,isDisplaceOrder,walletIds1,walletIds2,priceType, pageNum, pageSize);
         return ResponseHelper.success(orderExecBeanIPage);
@@ -610,9 +618,13 @@ public class RetailController {
             @ApiParam(value = "现金钱包",required = false) @RequestParam(required = false) List<String> walletIds1,
             @ApiParam(value = "返利钱包",required = false) @RequestParam(required = false) List<String> walletIds2,
             @ApiParam(value = "价格类型",required = false) @RequestParam(required = false) String priceType,
+            @ApiParam(value = "是否剔除仓储收费",required = false) @RequestParam(required = false) String isCost,
+            @ApiParam(value = "货满有效期开始",required = false) @RequestParam(required = false) String costStartTime,
+            @ApiParam(value = "货满有效期结束",required = false) @RequestParam(required = false) String costEndTime,
+            @ApiParam(value = "使用单位",required = false) @RequestParam(required = false) String refUseUnit,
             HttpServletRequest request, HttpServletResponse response
     )  throws  Exception{
-        IPage<OrderExecBean> list = retailOrderLogic.queryRetailOrderExecTotal(materialOldNumber, id, customerName, materialName,specification,
+        IPage<OrderExecBean> list = retailOrderLogic.queryRetailOrderExecTotal(costStartTime,costEndTime,refUseUnit,isCost,materialOldNumber, id, customerName, materialName,specification,
                 startTime, endTime,orderStartTime,orderEndTime, serviceName,itemServiceName,newServiceName, type,
                 k3CategoryNumber,projectName, enginRecordNo,policyCode,policyRemark,
                 isOver,isDisplaceOrder,walletIds1,walletIds2,priceType,1, -1);
@@ -649,9 +661,14 @@ public class RetailController {
             @ApiParam(value = "现金钱包",required = false) @RequestParam(required = false) List<String> walletIds1,
             @ApiParam(value = "返利钱包",required = false) @RequestParam(required = false) List<String> walletIds2,
             @ApiParam(value = "价格类型",required = false) @RequestParam(required = false) String priceType,
+            @ApiParam(value = "是否剔除仓储收费",required = false) @RequestParam(required = false) String isCost,
+            @ApiParam(value = "货满有效期开始",required = false) @RequestParam(required = false) String costStartTime,
+            @ApiParam(value = "货满有效期结束",required = false) @RequestParam(required = false) String costEndTime,
+            @ApiParam(value = "使用单位",required = false) @RequestParam(required = false) String refUseUnit,
+
             HttpServletRequest request, HttpServletResponse response
     )  throws  Exception{
-        IPage<OrderExecBean> list = retailOrderLogic.queryRetailOrderExec(materialOldNumber, id, customerName, materialName,specification,
+        IPage<OrderExecBean> list = retailOrderLogic.queryRetailOrderExec(costStartTime,costEndTime,refUseUnit,isCost,materialOldNumber, id, customerName, materialName,specification,
                 startTime, endTime,orderStartTime,orderEndTime,
                 serviceName,itemServiceName,newServiceName, type, k3CategoryNumber,projectName, enginRecordNo,policyCode,policyRemark,
                 isOver,isDisplaceOrder,walletIds1,walletIds2,priceType,1, -1);

+ 3 - 0
src/main/java/com/zfire/mall/manager/controller/saletype/SaleOrderController.java

@@ -241,6 +241,9 @@ public class SaleOrderController {
                 salesOrder.setExamineStatus(examineStatus);
                 salesOrder.setApprovalRemark(approvalRemark);
                 SalesOrder byId = salesOrderService.getById(id);
+
+                saleOrderLogic.approvalJudge(id);
+
                 if (byId.getType().equals(1))
                     saleOrderLogic.approval(salesOrder);
 

+ 235 - 0
src/main/java/com/zfire/mall/manager/controller/stock/StockCostController.java

@@ -0,0 +1,235 @@
+package com.zfire.mall.manager.controller.stock;
+
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zfire.mall.manager.annotation.ApiNotAuth;
+import com.zfire.mall.manager.annotation.ZfireList;
+import com.zfire.mall.manager.bean.ExcelData;
+import com.zfire.mall.manager.bean.displace.order.DisplaceOrderBean;
+import com.zfire.mall.manager.bean.invoice.StockStatusBean;
+import com.zfire.mall.manager.bean.k3.StockPositionStock;
+import com.zfire.mall.manager.bean.stock.*;
+import com.zfire.mall.manager.constant.Constant;
+import com.zfire.mall.manager.exception.RemoteServiceException;
+import com.zfire.mall.manager.helper.ResponseHelper;
+import com.zfire.mall.manager.logic.stock.StockCommonLogic;
+import com.zfire.mall.manager.logic.stock.StockCostLogic;
+import com.zfire.mall.manager.plus.entity.SysDict;
+import com.zfire.mall.manager.utils.excel.ExcelUtils;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import com.zfire.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.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+/**
+ * @author CHANGE
+ */
+@Slf4j
+@RestController
+@Api(value = "仓租费用接口", tags ={"仓租费用接口"} )
+@RequestMapping(value = "/stock/cost", produces = "application/json; charset=utf-8")
+public class StockCostController {
+
+    @Autowired
+    StockCostLogic stockCostLogic;
+
+
+
+    @ApiOperation(value = "订单满货通知")
+    @GetMapping("/list")
+    public ResponseHelper<IPage<OrderFullCostVO>> list(
+            @ApiParam(required = false, value = "物料名称") @RequestParam(required = false) String materialName,
+            @ApiParam(required = false, value = "物料编码") @RequestParam(required = false) String materialNumber,
+            @ApiParam(required = false, value = "物料代码") @RequestParam(required = false) String materialOldNumber,
+            @ApiParam(required = false, value = "规格型号") @RequestParam(required = false) String specification,
+            @ApiParam(required = false, value = "订单号") @RequestParam(required = false) String orderId,
+            @ApiParam(required = false, value = "货满时间开始") @RequestParam(required = false) String startTime,
+            @ApiParam(required = false, value = "货满时间结束") @RequestParam(required = false) String endTime,
+            @ApiParam(value = "页号",required = true)@RequestParam Integer pageNum,
+            @ApiParam(value = "页大小",required = true)@RequestParam Integer pageSize
+    ) throws Exception {
+        IPage<OrderFullCostVO> orderFullCostVOIPage = stockCostLogic.list(orderId,startTime,endTime,materialOldNumber,materialName,materialNumber,specification,pageNum,pageSize);
+        return ResponseHelper.success(orderFullCostVOIPage);
+    }
+
+
+    @ZfireList
+    @ApiOperation(value = "订单满货生成账单记录")
+    @PostMapping("/listFullDate")
+    public ResponseHelper<IPage<OrderFullDateVO>> listFullDate(
+            @RequestBody ZfireParamBean zfireParamBean
+
+    ) throws Exception {
+        IPage<OrderFullDateVO> orderFullCostVOIPage = stockCostLogic.listFullDate(zfireParamBean);
+        return ResponseHelper.success(orderFullCostVOIPage, new TypeReference<OrderFullDateVO>() {});
+    }
+
+
+
+
+    @ZfireList
+    @PostMapping("/listFullCost")
+    @ApiOperation("经销商仓储费日账单列表-列表V2")
+    public ResponseHelper<IPage<OrderFullCostDayVO>> listFullCost(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<OrderFullCostDayVO> list = stockCostLogic.listFullCost(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<OrderFullCostDayVO>() {});
+    }
+
+
+    @PostMapping("/listCustomerV2/export")
+    @ApiOperation("经销商仓储费日账单列表-列表V2导出")
+    public void listFullCostExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<OrderFullCostDayVO> list = stockCostLogic.listFullCost(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+
+    @ApiOperation(value = "剔除")
+    @PostMapping("/updateOrderFull")
+    public ResponseHelper updateOrderFull(
+            @ApiParam(value = "值") @RequestParam(required = true)  List<String> id
+    ) throws Exception {
+
+        stockCostLogic.updateOrderFull(id);
+        return ResponseHelper.success();
+
+    }
+
+
+
+    @GetMapping("/dict")
+    @ApiOperation("起始库存")
+    public ResponseHelper<SysDict> sysDict(
+    ) throws RemoteServiceException {
+        SysDict sysDicts = stockCostLogic.sysDict();
+        return ResponseHelper.success(sysDicts);
+    }
+
+
+    @ApiOperation(value = "改变起始库存")
+    @PostMapping("/update")
+    public ResponseHelper tradeAdd(
+            @ApiParam(value = "值") @RequestParam(required = true) String dictValue
+    ) throws Exception {
+
+        stockCostLogic.update(dictValue);
+        return ResponseHelper.success();
+
+    }
+
+
+   /* @GetMapping("/dictStock")
+    @ApiOperation("计算仓库列表")
+    public ResponseHelper<List<SysDict>> sysDictList(
+            @ApiParam(required = true, value = "GUANGZHOUCOST 广州 FOSHANCOST 佛山") String dictCode
+
+    ) throws RemoteServiceException {
+        List<SysDict> sysDicts = stockCostLogic.getSysDictList(dictCode);
+        return ResponseHelper.success(sysDicts);
+    }
+
+
+    @ApiOperation(value = "改变起始库存")
+    @PostMapping("/updateCost")
+    public ResponseHelper updateCost(
+            @ApiParam(required = true, value = "dictType传广州仓库GUANGZHOUCOST和佛山仓库FOSHANCOST") @RequestBody List<SysDict> sysDict
+    ) throws Exception {
+
+        stockCostLogic.updateCost(sysDict);
+        return ResponseHelper.success();
+
+    }*/
+
+
+
+    @ZfireList
+    @PostMapping("/listMonthFullCost")
+    @ApiOperation("仓储费月账单列表-列表V2")
+    public ResponseHelper<IPage<OrderFullCostMonthVO>> listMonthFullCost(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<OrderFullCostMonthVO> list = stockCostLogic.listMonthFullCost(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<OrderFullCostMonthVO>() {});
+    }
+
+
+    @PostMapping("/listMonthFullCost/export")
+    @ApiOperation("仓储费月账单列表-列表V2导出")
+    public void listMonthFullCostExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<OrderFullCostMonthVO> list = stockCostLogic.listMonthFullCost(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+
+
+    @ApiNotAuth
+    @ApiOperation(value = "生成账单,每次生成一天数据")
+    @GetMapping("/syncFullCost")
+    public ResponseHelper syncFullCost(
+    ) throws Exception {
+
+        stockCostLogic.syncFullCost();
+        return ResponseHelper.success();
+
+    }
+
+
+    @ApiNotAuth
+    @ApiOperation(value = "生成未来15天得账单,每次生成一天数据")
+    @GetMapping("/syncFullCostFive")
+    public ResponseHelper syncFullCostFive(
+    ) throws Exception {
+
+        stockCostLogic.syncFullCostFive();
+        return ResponseHelper.success();
+
+    }
+
+
+    @ApiOperation(value = "改变订单是否生成仓储账单")
+    @PostMapping("/updateOrderCost")
+    public ResponseHelper updateOrderCost(
+            @ApiParam(value = "销售订单") @RequestParam(required = true) List<String> orderId,
+            @ApiParam(value = "免仓日期") @RequestParam(required = true) Date time
+    ) throws Exception {
+
+        stockCostLogic.updateOrderCost(orderId,time);
+        return ResponseHelper.success();
+
+    }
+
+
+
+
+
+
+}
+

+ 451 - 0
src/main/java/com/zfire/mall/manager/controller/trade/LoginOrderController.java

@@ -0,0 +1,451 @@
+package com.zfire.mall.manager.controller.trade;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zfire.mall.manager.annotation.ZfireList;
+import com.zfire.mall.manager.bean.refund.v2.RetailRefundOrderVO;
+import com.zfire.mall.manager.bean.trade.*;
+import com.zfire.mall.manager.constant.Constant;
+import com.zfire.mall.manager.enums.IsEnum;
+import com.zfire.mall.manager.enums.TradeLoginOrderTypeEnum;
+import com.zfire.mall.manager.exception.RemoteServiceException;
+import com.zfire.mall.manager.helper.ResponseHelper;
+import com.zfire.mall.manager.logic.trade.LoginOrderLogic;
+import com.zfire.mall.manager.plus.entity.TradeLoginCustomerInfo;
+import com.zfire.mall.manager.plus.entity.TradeLoginOperRecord;
+import com.zfire.mall.manager.plus.entity.TradeLoginOrder;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import com.zfire.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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Slf4j
+@RestController
+@Api(value = "商用工程登录单", tags ={"商用工程登录单"} )
+@Validated
+@RequestMapping(value = "/trade/login/order", produces = "application/json; charset=utf-8")
+public class LoginOrderController {
+
+    @Resource
+    LoginOrderLogic loginOrderLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
+
+    @ZfireList
+    @ApiOperation(value = "商用工程登录单-列表")
+    @PostMapping("/list")
+    public ResponseHelper<IPage<LoginOrderVO>> listPage(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<LoginOrderVO> list = loginOrderLogic.listPage(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<WorkLoginOrderVO>() {});
+    }
+
+    @PostMapping("/export")
+    @ApiOperation("商用工程登录单-导出")
+    public void listPageExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<LoginOrderVO> list = loginOrderLogic.listPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+
+    @ZfireList
+    @ApiOperation(value = "商用工装工程登录单-列表")
+    @PostMapping("/work/list")
+    public ResponseHelper<IPage<WorkLoginOrderVO>> workListPage(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<WorkLoginOrderVO> list = loginOrderLogic.workListPage(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<WorkLoginOrderVO>() {});
+    }
+
+    @PostMapping("/work/list/export")
+    @ApiOperation("商用工装工程登录单-导出")
+    public void workListPageExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<WorkLoginOrderVO> list = loginOrderLogic.workListPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+
+    @ZfireList
+    @ApiOperation(value = "商用家装工程登录单-列表")
+    @PostMapping("/home/list")
+    public ResponseHelper<IPage<HomeLoginOrderVO>> homeListPage(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<HomeLoginOrderVO> list = loginOrderLogic.homeListPage(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<HomeLoginOrderVO>() {});
+    }
+
+    @PostMapping("/home/list/export")
+    @ApiOperation("商用家装工程登录单-导出")
+    public void homeListPageExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<HomeLoginOrderVO> list = loginOrderLogic.homeListPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+
+    @ZfireList
+    @ApiOperation(value = "跨区商用工程登录单-列表")
+    @PostMapping("/span/list")
+    public ResponseHelper<IPage<SpanLoginOrderVO>> spanListPage(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<SpanLoginOrderVO> list = loginOrderLogic.spanListPage(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<SpanLoginOrderVO>() {});
+    }
+
+    @PostMapping("/span/list/export")
+    @ApiOperation("跨区商用工程登录单-导出")
+    public void spanListPageExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<SpanLoginOrderVO> list = loginOrderLogic.spanListPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation("商用工程登录单-详情")
+    public ResponseHelper<TradeLoginOrderBean> detail(
+            @ApiParam(value = "id", required = true) @RequestParam String id
+    ) throws Exception {
+        TradeLoginOrderBean bean = loginOrderLogic.detail(id);
+        return ResponseHelper.success(bean);
+    }
+
+    @ApiOperation(value = "商用工装工程登录单-新增")
+    @PostMapping("/work-add")
+    public ResponseHelper workAdd(
+            @ApiParam(required = true, value = "商用工装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.TRADE_LOGIN_ORDER + bean.getCustomerId());
+        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("系统繁忙,请稍后再试");
+        }
+        try {
+            bean.setIsSpan(false);
+            bean.setOrderType(TradeLoginOrderTypeEnum.WORK.getKey());
+            loginOrderLogic.workAdd(bean, true);
+            return ResponseHelper.success();
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+    @ApiOperation(value = "商用家装工程登录单-新增")
+    @PostMapping("/home-add")
+    public ResponseHelper homeAdd(
+            @ApiParam(required = true, value = "商用家装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.TRADE_LOGIN_ORDER + bean.getCustomerId());
+        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("系统繁忙,请稍后再试");
+        }
+        try {
+            bean.setIsSpan(false);
+            bean.setOrderType(TradeLoginOrderTypeEnum.HOME.getKey());
+            loginOrderLogic.homeAdd(bean, true);
+            return ResponseHelper.success();
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+    @ApiOperation(value = "商用跨区工程登录单-新增")
+    @PostMapping("/span-add")
+    public ResponseHelper spanAdd(
+            @ApiParam(required = true, value = "商用跨区工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setIsSpan(IsEnum.YES.getKey());
+        if (bean.getOrderType().equals(TradeLoginOrderTypeEnum.WORK.getKey())) {
+            loginOrderLogic.workAdd(bean, true);
+        } else {
+            loginOrderLogic.homeAdd(bean, true);
+        }
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工装工程登录单-编辑")
+    @PostMapping("/work-edit")
+    public ResponseHelper workEdit(
+            @ApiParam(required = true, value = "商用工装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setOrderType(TradeLoginOrderTypeEnum.WORK.getKey());
+        loginOrderLogic.workEdit(bean, true);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用家装工程登录单-编辑")
+    @PostMapping("/home-edit")
+    public ResponseHelper homeEdit(
+            @ApiParam(required = true, value = "商用家装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setOrderType(TradeLoginOrderTypeEnum.HOME.getKey());
+        loginOrderLogic.homeEdit(bean, true);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用跨区工程登录单-编辑")
+    @PostMapping("/span-edit")
+    public ResponseHelper spanEdit(
+            @ApiParam(required = true, value = "商用跨区工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setIsSpan(IsEnum.YES.getKey());
+        if (bean.getOrderType().equals(TradeLoginOrderTypeEnum.WORK.getKey())) {
+            loginOrderLogic.workEdit(bean, true);
+        } else {
+            loginOrderLogic.homeEdit(bean, true);
+        }
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工装工程登录单-提交")
+    @PostMapping("/work-submit")
+    public ResponseHelper workSubmit(
+            @ApiParam(required = true, value = "商用工装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.TRADE_LOGIN_ORDER + bean.getCustomerId());
+        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("系统繁忙,请稍后再试");
+        }
+        try {
+            bean.setIsSpan(IsEnum.NO.getKey());
+            bean.setOrderType(TradeLoginOrderTypeEnum.WORK.getKey());
+            loginOrderLogic.workSubmit(bean);
+            return ResponseHelper.success();
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+    @ApiOperation(value = "商用家装工程登录单-提交")
+    @PostMapping("/home-submit")
+    public ResponseHelper homeSubmit(
+            @ApiParam(required = true, value = "商用家装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.TRADE_LOGIN_ORDER + bean.getCustomerId());
+        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("系统繁忙,请稍后再试");
+        }
+        try {
+            bean.setIsSpan(IsEnum.NO.getKey());
+            bean.setOrderType(TradeLoginOrderTypeEnum.HOME.getKey());
+            loginOrderLogic.homeSubmit(bean);
+            return ResponseHelper.success();
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+    @ApiOperation(value = "商用跨区工程登录单-提交")
+    @PostMapping("/span-submit")
+    public ResponseHelper spanSubmit(
+            @ApiParam(required = true, value = "商用跨区工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setIsSpan(IsEnum.YES.getKey());
+        if (bean.getOrderType().equals(TradeLoginOrderTypeEnum.WORK.getKey())) {
+            loginOrderLogic.workSubmit(bean);
+        } else {
+            loginOrderLogic.homeSubmit(bean);
+        }
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工装工程登录单-审核")
+    @PostMapping("/work-examine")
+    public ResponseHelper workExamine(
+            @ApiParam(required = true, value = "商用工装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setOrderType(TradeLoginOrderTypeEnum.WORK.getKey());
+        loginOrderLogic.workExamine(bean);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用家装工程登录单-审核")
+    @PostMapping("/home-examine")
+    public ResponseHelper homeExamine(
+            @ApiParam(required = true, value = "商用家装工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setOrderType(TradeLoginOrderTypeEnum.HOME.getKey());
+        loginOrderLogic.homeExamine(bean);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用跨区工程登录单-审核")
+    @PostMapping("/span-examine")
+    public ResponseHelper spanExamine(
+            @ApiParam(required = true, value = "商用跨区工程登录单") @RequestBody TradeLoginOrderBean bean
+    ) throws Exception {
+        bean.setIsSpan(IsEnum.YES.getKey());
+        if (bean.getOrderType().equals(TradeLoginOrderTypeEnum.WORK.getKey())) {
+            loginOrderLogic.workExamine(bean);
+        } else {
+            loginOrderLogic.homeExamine(bean);
+        }
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工程登录单-一键更新")
+    @PostMapping("/batch-update")
+    public ResponseHelper batchUpdate(
+            @ApiParam(required = true, value = "更新对象") @RequestBody UpdateLoginStatusBean bean) throws Exception {
+        loginOrderLogic.batchUpdate(bean);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工程登录单-删除")
+    @PostMapping("/del")
+    public ResponseHelper del(
+            @ApiParam(required = true, value = "单据id") @RequestBody List<String> ids
+    ) throws Exception {
+        loginOrderLogic.del(ids);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工程登录单-申请修改")
+    @PostMapping("/apply-update")
+    public ResponseHelper applyUpdate(
+            @ApiParam(required = true, value = "更新对象") @RequestBody UpdateLoginStatusBean bean) throws Exception {
+        loginOrderLogic.applyUpdate(bean);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/apply-update/query")
+    @ApiOperation("商用工程登录单-申请修改查询")
+    public ResponseHelper<UpdateLoginStatusBean> applyUpdateQuery(
+            @ApiParam(value = "id", required = true) @RequestParam String id
+    ) throws Exception {
+        UpdateLoginStatusBean bean = loginOrderLogic.applyUpdateQuery(id);
+        return ResponseHelper.success(bean);
+    }
+
+    @ApiOperation(value = "商用工程登录单-审核确认")
+    @PostMapping("/examine-update")
+    public ResponseHelper examineUpdate(
+            @ApiParam(required = true, value = "更新对象") @RequestBody UpdateLoginStatusBean bean) throws Exception {
+        loginOrderLogic.examineUpdate(bean);
+        return ResponseHelper.success();
+    }
+
+    @ApiOperation(value = "商用工程登录单-替换业务员")
+    @PostMapping("/replace-service")
+    public ResponseHelper replaceService(
+            @ApiParam(required = true, value = "更新对象") @RequestBody UpdateLoginStatusBean bean) throws Exception {
+        loginOrderLogic.replaceService(bean);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/position/project")
+    @ApiOperation("商用工程登录单-附近项目")
+    public ResponseHelper<List<PositionProjectBean>> positionProject(
+            @ApiParam(value = "id", required = true) @RequestParam String id
+    ) throws Exception {
+        List<PositionProjectBean> list = loginOrderLogic.positionProject(id);
+        return ResponseHelper.success(list);
+    }
+
+    @PostMapping("/operation/record")
+    @ApiOperation("商用工程登录单-操作记录")
+    public ResponseHelper<List<TradeLoginOperRecord>> operationRecord(
+            @ApiParam(value = "id", required = true) @RequestParam String id
+    ) throws Exception {
+        List<TradeLoginOperRecord> list = loginOrderLogic.operationRecord(id);
+        return ResponseHelper.success(list);
+    }
+
+    @PostMapping("/customer/history")
+    @ApiOperation("商用工程登录单-经销商填写历史")
+    public ResponseHelper<TradeLoginCustomerInfo> customerHistory(
+            @ApiParam(value = "经销商id", required = true) @RequestParam String customerId
+    ) throws Exception {
+        TradeLoginCustomerInfo info = loginOrderLogic.customerHistory(customerId);
+        return ResponseHelper.success(info);
+    }
+
+    @PostMapping("/ref")
+    @ApiOperation("商用工程登录单-引用")
+    public ResponseHelper<IPage<TradeLoginOrder>> ref(
+            @ApiParam(value = "项目编号") @RequestParam(required = false) String projectNo,
+            @ApiParam(value = "项目名称") @RequestParam(required = false) String projectName,
+            @ApiParam(value = "项目地址") @RequestParam(required = false) String address,
+            @ApiParam(value = "工程登录类型") @NotBlank(message = "工程登录类型不能为空") @RequestParam String orderType,
+            @ApiParam(value = "页号",required = true)@RequestParam Integer pageNum,
+            @ApiParam(value = "页大小",required = true)@RequestParam Integer pageSize
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.TRADE_LOGIN_REF_ORDER);
+        if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("系统繁忙,请稍后再试");
+        }
+        try {
+            IPage<TradeLoginOrder> list = loginOrderLogic.ref(projectNo, projectName, address, orderType, pageNum, pageSize);
+            return ResponseHelper.success(list);
+        } finally {
+            obtain.unlock();
+        }
+    }
+
+    @ZfireList
+    @ApiOperation(value = "商用工程登录单-数据分析")
+    @PostMapping("/data/list")
+    public ResponseHelper<IPage<DataLoginOrderVO>> dataListPage(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        IPage<DataLoginOrderVO> list = loginOrderLogic.dataListPage(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<RetailRefundOrderVO>() {});
+    }
+
+    @PostMapping("/data/list/export")
+    @ApiOperation("商用工程登录单-导出")
+    public void dataListPageExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<DataLoginOrderVO> list = loginOrderLogic.dataListPage(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(),zfireParam.getExportFields(),request,response);
+    }
+}

+ 21 - 0
src/main/java/com/zfire/mall/manager/convert/BaseConvert.java

@@ -0,0 +1,21 @@
+package com.zfire.mall.manager.convert;
+
+
+import org.apache.commons.lang3.BooleanUtils;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/6/16 14:04 星期五
+ */
+public interface BaseConvert {
+    /**
+     * bool类型字段转换为是否,true转换为是,false或者null转换为否
+     * @param bool 值
+     * @return 是或者否
+     */
+    default String boolToCN(Boolean bool) {
+        return BooleanUtils.isTrue(bool) ? "是" : "否";
+    }
+
+}

+ 55 - 0
src/main/java/com/zfire/mall/manager/convert/CommonConvert.java

@@ -0,0 +1,55 @@
+package com.zfire.mall.manager.convert;
+
+import com.google.common.collect.Lists;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.mapstruct.Named;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/5/11 11:32 星期四
+ */
+public interface CommonConvert {
+
+    /**
+     * 集合字符串转为逗号隔开的字符串
+     * @param imageList 集合字符串
+     * @return 逗号隔开的字符串
+     */
+    @Named("toStr")
+    static String toStr(List<String> imageList) {
+        if (CollectionUtils.isEmpty(imageList)) {
+            return null;
+        }
+        return String.join(",", imageList);
+    }
+
+    /**
+     * 逗号隔开的字符串转List
+     * @param imageList 逗号隔开的字符串
+     * @return 转换后的List
+     */
+    @Named("toList")
+    static List<String> toList(String imageList) {
+        if (StringUtils.isBlank(imageList)) {
+            return Collections.emptyList();
+        }
+        return Lists.newArrayList(imageList.split(","));
+    }
+
+    /**
+     * bool类型字段转换为是否,true转换为是,false或者null转换为否
+     * @param bool 值
+     * @return 是或者否
+     */
+    @Named("boolToCN")
+    static String boolToCN(Boolean bool) {
+        return BooleanUtils.isTrue(bool) ? "是" : "否";
+    }
+
+}

+ 16 - 0
src/main/java/com/zfire/mall/manager/convert/CommonMapperConfig.java

@@ -0,0 +1,16 @@
+package com.zfire.mall.manager.convert;
+
+import com.zfire.mall.manager.enums.BaseEnum;
+import org.apache.commons.lang3.StringUtils;
+import org.mapstruct.MapperConfig;
+
+import java.util.Optional;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/5/31 14:18 星期三
+ */
+@MapperConfig(uses = {BaseEnum.class, CommonConvert.class} , imports = {Optional.class, StringUtils.class})
+public interface CommonMapperConfig {
+}

+ 42 - 0
src/main/java/com/zfire/mall/manager/convert/FirstPartyCustomerManagementConvert.java

@@ -0,0 +1,42 @@
+package com.zfire.mall.manager.convert;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.config.*;
+import com.zfire.mall.manager.plus.entity.PartyAInfo;
+import org.mapstruct.Context;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Map;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:24 星期三
+ */
+@Mapper(config = CommonMapperConfig.class)
+public interface FirstPartyCustomerManagementConvert {
+    FirstPartyCustomerManagementConvert INSTANCE = Mappers.getMapper(FirstPartyCustomerManagementConvert.class);
+
+    @Mapping(target = "provinceName", expression = "java(regionNameByIdMap.get(var0.getProvinceRegionId()))")
+    @Mapping(target = "cityName", expression = "java(regionNameByIdMap.get(var0.getCityRegionId()))")
+    @Mapping(target = "areaName", expression = "java(regionNameByIdMap.get(var0.getAreaId()))")
+    @Mapping(target = "createName", source = "username")
+    PartyAInfo toDO(FirstPartyCustomerManagementAddParam var0,String username, @Context Map<Long, String> regionNameByIdMap);
+
+    @Mapping(target = "provinceName", expression = "java(regionNameByIdMap.get(var0.getProvinceRegionId()))")
+    @Mapping(target = "cityName", expression = "java(regionNameByIdMap.get(var0.getCityRegionId()))")
+    @Mapping(target = "areaName", expression = "java(regionNameByIdMap.get(var0.getAreaId()))")
+    @Mapping(target = "updateName", source = "username")
+    PartyAInfo toDO(FirstPartyCustomerManagementEditParam var0,String username, @Context Map<Long, String> regionNameByIdMap);
+
+    FirstPartyCustomerManagementDetailVO toVO(PartyAInfo var0);
+
+    @Mapping(target = "tradeParentName", expression = "java(tradeNameByIdMap.get(var0.getTradeParentId()))")
+    @Mapping(target = "tradeName", expression = "java(tradeNameByIdMap.get(var0.getTradeId()))")
+    FirstPartyCustomerManagementListVO toListVO(PartyAInfo var0, @Context Map<String, String> tradeNameByIdMap);
+
+    Page<FirstPartyCustomerManagementListVO> toPageVO(IPage<PartyAInfo> var0, @Context Map<String, String> tradeNameByIdMap);
+}

+ 22 - 0
src/main/java/com/zfire/mall/manager/convert/MappingIgnore.java

@@ -0,0 +1,22 @@
+package com.zfire.mall.manager.convert;
+
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author qinrongjun
+ * @description 转换字段忽略
+ * @date 2023/4/4 17:40 星期二
+ */
+@Retention(RetentionPolicy.CLASS)
+@Mappings(value = {
+        @Mapping(target = "createTime",ignore = true),
+        @Mapping(target = "createBy",ignore = true),
+        @Mapping(target = "updateTime",ignore = true),
+        @Mapping(target = "updateBy",ignore = true),
+})
+public @interface MappingIgnore {
+}

+ 23 - 0
src/main/java/com/zfire/mall/manager/convert/MappingIgnoreCreate.java

@@ -0,0 +1,23 @@
+package com.zfire.mall.manager.convert;
+
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author qinrongjun
+ * @description 转换字段忽略
+ * @date 2023/4/4 17:40 星期二
+ */
+@Retention(RetentionPolicy.CLASS)
+@Mappings(value = {
+        @Mapping(target = "id",ignore = true),
+        @Mapping(target = "createTime",ignore = true),
+        @Mapping(target = "createBy",ignore = true),
+        @Mapping(target = "updateTime",ignore = true),
+        @Mapping(target = "updateBy",ignore = true),
+})
+public @interface MappingIgnoreCreate {
+}

+ 35 - 0
src/main/java/com/zfire/mall/manager/convert/MerchantLoginQuotaLimitConvert.java

@@ -0,0 +1,35 @@
+package com.zfire.mall.manager.convert;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.admin.AdminUserCom;
+import com.zfire.mall.manager.bean.config.*;
+import com.zfire.mall.manager.plus.entity.CustomerBillLimitConfig;
+import org.mapstruct.Context;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Map;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:24 星期三
+ */
+@Mapper(config = CommonMapperConfig.class)
+public interface MerchantLoginQuotaLimitConvert {
+    MerchantLoginQuotaLimitConvert INSTANCE = Mappers.getMapper(MerchantLoginQuotaLimitConvert.class);
+
+    @Mapping(target = "createName", source = "username")
+    CustomerBillLimitConfig toDO(MerchantLoginQuotaLimitAddParam var0, String username);
+
+    @Mapping(target = "updateName", source = "username")
+    CustomerBillLimitConfig toDO(MerchantLoginQuotaLimitEditParam var0, String username);
+    MerchantLoginQuotaLimitDetailVO toVO(CustomerBillLimitConfig var0);
+
+    @Mapping(target = "customerName", expression = "java(nameByIdMap.get(var0.getCustomerId()))")
+    MerchantLoginQuotaLimitListVO toListVO(CustomerBillLimitConfig var0, @Context Map<String, String> nameByIdMap);
+
+    Page<MerchantLoginQuotaLimitListVO> toPageVO(IPage<CustomerBillLimitConfig> var0, @Context Map<String, String> nameByIdMap);
+}

+ 56 - 0
src/main/java/com/zfire/mall/manager/convert/TradeConfigConvert.java

@@ -0,0 +1,56 @@
+package com.zfire.mall.manager.convert;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.config.TradeConfigAddParam;
+import com.zfire.mall.manager.bean.config.TradeConfigEditParam;
+import com.zfire.mall.manager.bean.config.TradeConfigListLevelVO;
+import com.zfire.mall.manager.bean.config.TradeConfigListVO;
+import com.zfire.mall.manager.logic.config.TradeConfigLogic;
+import com.zfire.mall.manager.plus.entity.TradeCategoryConfig;
+import org.apache.commons.lang3.StringUtils;
+import org.mapstruct.Context;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:24 星期三
+ */
+@Mapper(config = CommonMapperConfig.class, imports = {TradeConfigLogic.class})
+public interface TradeConfigConvert {
+    TradeConfigConvert INSTANCE = Mappers.getMapper(TradeConfigConvert.class);
+
+    @Mapping(target = "parentId", expression = "java(StringUtils.defaultIfBlank(var0.getParentId(), TradeConfigLogic.DEFAULT_TOP_LEVEL_ID))")
+    @Mapping(target = "createName", source = "username")
+    TradeCategoryConfig toDO(TradeConfigAddParam var0, String username);
+
+    @Mapping(target = "parentId", expression = "java(StringUtils.defaultIfBlank(var0.getParentId(), TradeConfigLogic.DEFAULT_TOP_LEVEL_ID))")
+    @Mapping(target = "updateName", source = "username")
+    TradeCategoryConfig toDO(TradeConfigEditParam var0, String username);
+
+    @Mapping(target = "parentName", expression = "java(parentNameByIdMap.get(var0.getParentId()))")
+    TradeConfigListVO toVO(TradeCategoryConfig var0, @Context Map<String, String> parentNameByIdMap);
+
+    Page<TradeConfigListVO> toPageVO(IPage<TradeCategoryConfig> var0, @Context Map<String, String> parentNameByIdMap);
+
+    List<TradeConfigListLevelVO> toLevelVOList(List<TradeCategoryConfig> var0List, @Context Map<String, List<TradeCategoryConfig>> childByParentIdMap);
+
+    @Mapping(target = "childList", expression = "java(toVOList(childByParentIdMap.get(var0.getId()),var0.getName()))")
+    TradeConfigListLevelVO toLevelVO(TradeCategoryConfig var0, @Context Map<String, List<TradeCategoryConfig>> childByParentIdMap);
+
+
+    @Mapping(target = "parentName", expression = "java(parentName)")
+    TradeConfigListLevelVO toVO(TradeCategoryConfig var0, @Context String parentName);
+
+    List<TradeConfigListLevelVO> toVOList(List<TradeCategoryConfig> childList, @Context String parentName);
+    List<TradeConfigListLevelVO> toVOList(List<TradeCategoryConfig> var0List);
+
+
+
+}

+ 195 - 0
src/main/java/com/zfire/mall/manager/enums/BaseEnum.java

@@ -0,0 +1,195 @@
+package com.zfire.mall.manager.enums;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.zfire.mall.manager.exception.RemoteServiceException;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.mapstruct.Named;
+import org.mapstruct.TargetType;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+/**
+ * @description: 枚举基类
+ * @author: qinrongjun
+ * @date: 2023/3/10 15:34
+ **/
+public interface BaseEnum {
+
+    @ApiModelProperty("标识")
+    String getKey();
+
+    @ApiModelProperty("标识中文")
+    String getValue();
+
+
+    @JsonIgnore
+    default Integer getIntKey() {
+        return Optional.ofNullable(getKey())
+                .filter(NumberUtils::isCreatable)
+                .map(Integer::valueOf)
+                .orElse(null);
+    }
+
+    /**
+     * key转换为枚举,不存在抛出异常
+     * @param clazz 枚举类型
+     * @param key 枚举的key字段值
+     * @return
+     */
+    @Named("keyToEnumNotNull")
+    static <T extends BaseEnum> T keyToEnumNotNull(@TargetType Class<T> clazz, String key) {
+        return keyToEnumOpt(clazz, key).orElseThrow(() -> new RemoteServiceException(String.format("枚举值[%s]不存在", key)));
+    }
+
+    /**
+     * int类型key转换为枚举,不存在抛出异常
+     * @param clazz
+     * @param key
+     * @return
+     * @param <T>
+     */
+    @Named("intKeyToEnumNotNull")
+    static <T extends BaseEnum> T intKeyToEnumNotNull(@TargetType Class<T> clazz, Integer key) {
+        return intKeyToEnumOpt(clazz, key).orElseThrow(() -> new RemoteServiceException(String.format("枚举值[%s]不存在", key)));
+
+    }
+
+
+    /**
+     * 通用转换对应的枚举实例
+     * @param clazz 枚举类型
+     * @param key 枚举的key字段值
+     * @return
+     */
+    @Named("keyToEnum")
+    static <T extends BaseEnum> T keyToEnum(@TargetType Class<T> clazz, String key) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getKey().equals(key))
+                .findAny()
+                .orElse(null);
+
+    }
+
+    @Named("intKeyToEnum")
+    static <T extends BaseEnum> T intKeyToEnum(@TargetType Class<T> clazz, Integer key) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getIntKey().equals(key))
+                .findAny()
+                .orElse(null);
+
+    }
+
+    @Named("intKeyToEnumOpt")
+    static <T extends BaseEnum> Optional<T> intKeyToEnumOpt(@TargetType Class<T> clazz, Integer key) {
+        return Optional.ofNullable(intKeyToEnum(clazz, key));
+    }
+
+    @Named("intKeyToValue")
+    static String intKeyToValue(@TargetType Class<? extends BaseEnum> clazz, Integer key) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getIntKey().equals(key))
+                .findAny()
+                .map(BaseEnum::getValue)
+                .orElse(null);
+
+    }
+
+    @Named("intKeyToValueOpt")
+    static Optional<String> intKeyToValueOpt(@TargetType Class<? extends BaseEnum> clazz, Integer key) {
+        return Optional.ofNullable(intKeyToValue(clazz, key));
+
+    }
+
+    @Named("keyToValue")
+    static String keyToValue(@TargetType Class<? extends BaseEnum> clazz, String key) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getKey().equals(key))
+                .findAny()
+                .map(BaseEnum::getValue)
+                .orElse(null);
+
+    }
+
+    @Named("keyToValueOpt")
+    static Optional<String> keyToValueOpt(@TargetType Class<? extends BaseEnum> clazz, String key) {
+        return Optional.ofNullable(keyToValue(clazz,key));
+
+    }
+
+    @Named("keyToEnumOpt")
+    static <T extends BaseEnum> Optional<T> keyToEnumOpt(@TargetType Class<T> clazz, String key) {
+        return Optional.ofNullable(keyToEnum(clazz, key));
+    }
+
+    @Named("enumToKey")
+    static String enumToKey(BaseEnum baseEnum) {
+        if (baseEnum == null) {
+            return null;
+        }
+        return baseEnum.getKey();
+    }
+
+    @Named("enumToIntKey")
+    static Integer enumToIntKey(BaseEnum baseEnum) {
+        if (baseEnum == null) {
+            return null;
+        }
+        return baseEnum.getIntKey();
+    }
+
+    @Named("valueToEnum")
+    static <T extends BaseEnum> T valueToEnum(@TargetType Class<T> clazz, String value) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getValue().equals(value))
+                .findAny()
+                .orElse(null);
+
+    }
+
+    @Named("valueToKey")
+    static String valueToKey(@TargetType Class<? extends BaseEnum> clazz, String value) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getValue().equals(value))
+                .findAny()
+                .map(BaseEnum::getKey)
+                .orElse(null);
+
+    }
+
+    @Named("valueToIntKey")
+    static Integer valueToIntKey(@TargetType Class<? extends BaseEnum> clazz, String value) {
+        if (!clazz.isEnum() | !BaseEnum.class.isAssignableFrom(clazz)) {
+            return null;
+        }
+        return Arrays.stream(clazz.getEnumConstants())
+                .filter(item -> item.getValue().equals(value))
+                .findAny()
+                .map(BaseEnum::getIntKey)
+                .orElse(null);
+
+    }
+
+    static <T extends BaseEnum> Optional<T> valueToEnumOpt(@TargetType Class<T> clazz, String value) {
+        return Optional.ofNullable(valueToEnum(clazz, value));
+    }
+}

+ 29 - 0
src/main/java/com/zfire/mall/manager/enums/ConfirmResultEnum.java

@@ -0,0 +1,29 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ConfirmResultEnum {
+    YES(true,"通过"),
+    NO(false,"驳回");
+
+    @JsonValue
+    @EnumValue
+    private final Boolean key;
+    private final String value;
+
+
+    public static IsEnum findEnumByKey(Boolean key) {
+        IsEnum[] values = IsEnum.values();
+        for (IsEnum isEnum : values) {
+            if (isEnum.getKey().equals(key)) {
+                return isEnum;
+            }
+        }
+        return null;
+    }
+}

+ 33 - 0
src/main/java/com/zfire/mall/manager/enums/CuseromtTypeEnum.java

@@ -0,0 +1,33 @@
+package com.zfire.mall.manager.enums;
+
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum CuseromtTypeEnum {
+    KING("KING","金蝶经销商"),
+    JIAXIAN("JIAXIAN","嘉贤二级经销商"),
+    GONGCHENG("GONGCHENG","商用经销商")
+;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+
+
+    public static CuseromtTypeEnum findEnumByKey(String key) {
+        CuseromtTypeEnum[] values = CuseromtTypeEnum.values();
+        for (CuseromtTypeEnum isEnum : values) {
+            if (isEnum.getKey().equals(key)) {
+                return isEnum;
+            }
+        }
+        return null;
+    }
+
+}

+ 32 - 0
src/main/java/com/zfire/mall/manager/enums/OrderFullStatusEnum.java

@@ -0,0 +1,32 @@
+package com.zfire.mall.manager.enums;
+
+import cn.hutool.core.util.EnumUtil;
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Map;
+
+@Getter
+@AllArgsConstructor
+public enum OrderFullStatusEnum {
+    ENABLE("ENABLE", "有效"),
+    CLOSE("CLOSE", "失效"),
+    DEL("DEL", "剔除"),
+    ;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+
+    public static String getName(String orderType) {
+        if (StringUtils.isNotBlank(orderType)) {
+            Map<String, Object> enumMap = EnumUtil.getNameFieldMap(OrderFullStatusEnum.class, "value");
+            return enumMap.get(orderType).toString();
+        }
+        return "";
+    }
+}

+ 19 - 0
src/main/java/com/zfire/mall/manager/enums/TradeExamineNoteEnum.java

@@ -0,0 +1,19 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeExamineNoteEnum {
+    NOTE_1("NOTE_1","仅限此项目名称及地址登录成功"),
+    NOTE_2("NOTE_2","已有商家跟进,登录不成功"),
+    NOTE_3("NOTE_3","其他"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 19 - 0
src/main/java/com/zfire/mall/manager/enums/TradeFollowStatusEnum.java

@@ -0,0 +1,19 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeFollowStatusEnum {
+    ING("ING","跟进中"),
+    LOSS("LOSS","已丢单"),
+    SIGN("SIGN","签订合同"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 19 - 0
src/main/java/com/zfire/mall/manager/enums/TradeLoginCategoryEnum.java

@@ -0,0 +1,19 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeLoginCategoryEnum {
+    STRATEGY("STRATEGY","战略协议下属子项目"),
+    COMMON("COMMON","普通单体项目"),
+    RAIL("RAIL","铁路干线项目");
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 18 - 0
src/main/java/com/zfire/mall/manager/enums/TradeLoginOrderTypeEnum.java

@@ -0,0 +1,18 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeLoginOrderTypeEnum {
+    WORK("WORK","工装"),
+    HOME("HOME","家装"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 23 - 0
src/main/java/com/zfire/mall/manager/enums/TradeLoginStatusEnum.java

@@ -0,0 +1,23 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+@Getter
+public enum TradeLoginStatusEnum {
+    OK("OK","登录成功"),
+    FAIL("FAIL","登录不成功"),
+    REJECT("REJECT","驳回"),
+    ;
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+
+    TradeLoginStatusEnum(String key, String value){
+        this.key=key;
+        this.value = value;
+    }
+
+}

+ 21 - 0
src/main/java/com/zfire/mall/manager/enums/TradeLoginTypeEnum.java

@@ -0,0 +1,21 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeLoginTypeEnum {
+    DRAW("DRAW","图纸"),
+    MESSAGE("MESSAGE","竞品资料"),
+    SITE_IMG("SITE_IMG","现场图片"),
+    LICENSE("LICENSE","营业执照"),
+    OTHER("OTHER","其他照片"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 31 - 0
src/main/java/com/zfire/mall/manager/enums/TradeMachineTypeEnum.java

@@ -0,0 +1,31 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeMachineTypeEnum {
+    TYPE_0("TYPE_0","风管机"),
+    TYPE_1("TYPE_1","离心机"),
+    TYPE_2("TYPE_2","螺杆机"),
+    TYPE_3("TYPE_3","模块机"),
+    TYPE_4("TYPE_4","多联机"),
+    TYPE_5("TYPE_5","单元机"),
+    TYPE_6("TYPE_6","末端"),
+    TYPE_7("TYPE_7","特种机"),
+    TYPE_8("TYPE_8","冷冻冷藏"),
+    TYPE_9("TYPE_9","精密空调"),
+    TYPE_10("TYPE_10","清洁热水"),
+    TYPE_11("TYPE_11","户式机"),
+    TYPE_12("TYPE_12","新风净化"),
+    TYPE_13("TYPE_13","集成式冷站"),
+    TYPE_14("TYPE_14","直膨式空调"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 25 - 0
src/main/java/com/zfire/mall/manager/enums/TradeOperTypeEnum.java

@@ -0,0 +1,25 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeOperTypeEnum {
+    ADD("ADD","添加"),
+    EDIT("EDIT","编辑"),
+    SUBMIT("SUBMIT","提交"),
+    EXAMINE("EXAMINE","审核"),
+    UPDATE("UPDATE","更新"),
+    LOSS("LOSS","丢单"),
+    APPLY_UPDATE("APPLY_UPDATE","申请修改"),
+    EXAMINE_UPDATE("EXAMINE_UPDATE","审核修改"),
+    REPLACE_SERVICE("REPLACE_SERVICE","替换业务员"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 25 - 0
src/main/java/com/zfire/mall/manager/enums/TradeOrderStatusEnum.java

@@ -0,0 +1,25 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+@Getter
+public enum TradeOrderStatusEnum {
+    SAVE("SAVE","保存"),
+    WAIT("WAIT","待审核"),
+    OK("OK","已审核"),
+    FAIL("FAIL","已关闭"),
+    RETURN("RETURN","返回"),
+    ;
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+
+    TradeOrderStatusEnum(String key, String value){
+        this.key=key;
+        this.value = value;
+    }
+
+}

+ 18 - 0
src/main/java/com/zfire/mall/manager/enums/TradeProjectAreaEnum.java

@@ -0,0 +1,18 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeProjectAreaEnum {
+    G("G","广州(广清韶)"),
+    F("F","佛山(佛云肇)"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 20 - 0
src/main/java/com/zfire/mall/manager/enums/TradeSuccessRateEnum.java

@@ -0,0 +1,20 @@
+package com.zfire.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TradeSuccessRateEnum {
+    FIRST("FIRST","询价/初步报价"),
+    GELI_1("GELI_1","已报格力方案"),
+    GELI_2("GELI_2","有利格力的招标文件"),
+    RELA("RELA","已和项目决定方有一定的关系"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String value;
+}

+ 15 - 0
src/main/java/com/zfire/mall/manager/helper/ResponseHelper.java

@@ -34,6 +34,12 @@ public class ResponseHelper<T> {
         return object;
     }
 
+    public static ResponseHelper success(Object data,String message) {
+        ResponseHelper object = new ResponseHelper(ResponseCode_Success, message);
+        object.setData(data);
+        return object;
+    }
+
     public static ResponseHelper success(int code,Object data,String message) {
         ResponseHelper object = new ResponseHelper(ResponseCode_Success, "success");
         object.setData(data);
@@ -97,4 +103,13 @@ public class ResponseHelper<T> {
     }
 
 
+    public static ResponseHelper toResult(int rows) {
+        return rows > 0 ? ResponseHelper.success(null, "操作成功") : ResponseHelper.error("操作失败");
+    }
+
+    public static ResponseHelper toResult(boolean result) {
+        return result ? ResponseHelper.success(null, "操作成功") : ResponseHelper.error("操作失败");
+    }
+
+
 }

+ 237 - 17
src/main/java/com/zfire/mall/manager/logic/admin/AdminUserLogic.java

@@ -1,5 +1,6 @@
 package com.zfire.mall.manager.logic.admin;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
@@ -21,6 +22,8 @@ import com.zfire.mall.manager.bean.admin.respDto.AdminUserDto;
 import com.zfire.mall.manager.bean.k3.K3CustomerBean;
 import com.zfire.mall.manager.commonmapper.AdminMapper;
 import com.zfire.mall.manager.constant.Constant;
+import com.zfire.mall.manager.enums.CuseromtTypeEnum;
+import com.zfire.mall.manager.enums.ExamineStatusEnum;
 import com.zfire.mall.manager.enums.JiaXianStockEnum;
 import com.zfire.mall.manager.enums.SMSTypeEnum;
 import com.zfire.mall.manager.exception.RemoteServiceException;
@@ -36,11 +39,14 @@ import com.zfire.mall.manager.utils.JiaSMUtil;
 import com.zfire.mall.manager.utils.JwtUtils;
 import com.zfire.mall.manager.utils.RedisUtil;
 import com.zfire.mall.manager.utils.JiaSMUtil;
+import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import javax.imageio.ImageIO;
@@ -60,8 +66,8 @@ public class AdminUserLogic {
     DefaultKaptcha defaultKaptcha;
     @Autowired
     CommonLogic commonLogic;
-//    @Autowired
-//    ExternalEnginLogic externalEnginLogic;
+    @Autowired
+    ExternalEnginLogic externalEnginLogic;
     @Autowired
     AdminWebsitLogic adminWebsitLogic;
     @Autowired
@@ -102,6 +108,9 @@ public class AdminUserLogic {
     @Autowired
     KingDeeCategoryService kingDeeCategoryService;
 
+    @Autowired
+    CustomerBillLimitConfigService customerBillLimitConfigService;
+
 
     /**
      * 验证码
@@ -614,7 +623,7 @@ public class AdminUserLogic {
 
 
         IPage<AdminUserDto> adminUserIPage = adminMapper.mchList(new Page(pageNum, pageSize),adminUser.getAdminCompanyIds(),adminWebsitIds,
-                userName, null,null,null, status,roleId,isMaster,customerId,isCustomer,roleName,websitNumber,null,null);
+                userName, null,null,null, status,roleId,isMaster,customerId,isCustomer,roleName,websitNumber,null,null,null);
 
         return adminUserIPage;
     }
@@ -628,7 +637,7 @@ public class AdminUserLogic {
         List<String> adminWebsitIds = adminWebsitLogic.getAllAdminWebsitIds(adminWebsitId);
 
         IPage<AdminUserDto> adminUserIPage = adminMapper.mchList(new Page(pageNum, pageSize),adminUser.getAdminCompanyIds(),adminWebsitIds,
-                userName, nickName, linkPhone, email, status,null,true,null,null,null,null,null,null);
+                userName, nickName, linkPhone, email, status,null,true,null,null,null,null,null,null,null);
         return adminUserIPage;
     }
 
@@ -708,7 +717,7 @@ public class AdminUserLogic {
             AdminWebsit adminWebsit = adminWebsitService.getById(list.get(0).getAdminWebsitId());
             adminUserBean.setAdminWebsit(adminWebsit);
         }
-//        adminUserBean.setEnginSysUrl(externalEnginLogic.getLoginUrl());
+        adminUserBean.setEnginSysUrl(externalEnginLogic.getLoginUrl());
         if(detail != null) {
             adminUserBean.setIsZr(detail.getIsZr());
         }
@@ -745,6 +754,10 @@ public class AdminUserLogic {
         }
         adminUserBean.setDecodePwd(null);
         adminUserBean.setChangeNum(Convert.toInt(redisUtil.get(Constant.SUPPLY_CHANGE_NUM+adminUser.getAdminUserId())));
+
+        // 商用登录审核员
+        adminUserBean.setIsTradeExaminer(adminUser.getRoleName().equals(Constant.NOT_DEL_ROLE_SPY));
+
         return adminUserBean;
     }
 
@@ -778,11 +791,11 @@ public class AdminUserLogic {
      * 检查工程机系统是否合法
      */
     public void checkEnginUser(HttpServletRequest request){
-//        AdminUserCom adminUser = commonLogic.getAdminUser(request);
-//        Integer result = externalEnginLogic.checkEnginUser(adminUser.getEnginUserName(), adminUser.getEnginPassword());
-//        if(Objects.isNull(result)){
-//            throw new RemoteServiceException(4444,"帐号密码验证失败");
-//        }
+        AdminUserCom adminUser = commonLogic.getAdminUser(request);
+        Integer result = externalEnginLogic.checkEnginUser(adminUser.getEnginUserName(), adminUser.getEnginPassword());
+        if(Objects.isNull(result)){
+            throw new RemoteServiceException(4444,"帐号密码验证失败");
+        }
     }
 
 
@@ -813,10 +826,10 @@ public class AdminUserLogic {
 //            }
 //        }
 
-//        Integer result = externalEnginLogic.checkEnginUser(userName, password);
-//        if(Objects.isNull(result)){
-//            throw new RemoteServiceException(4444,"帐号密码验证失败");
-//        }
+        Integer result = externalEnginLogic.checkEnginUser(userName, password);
+        if(Objects.isNull(result)){
+            throw new RemoteServiceException(4444,"帐号密码验证失败");
+        }
 
 //        if (!isReset) {
 //            AdminUserBindEngin adminUserBindEngin = new AdminUserBindEngin();
@@ -848,7 +861,7 @@ public class AdminUserLogic {
         } else {
             if(adminUser.getIsCustomer() && !adminUser.getIsMaster()){
                 KingDeeCustomer kingDeeCustomer = kingDeeCustomerService.getById(adminUser.getCustomerId());
-                if (kingDeeCustomer.getJiaxianType().equals(JiaXianStockEnum.JIAXIAN.getKey()))
+                if (kingDeeCustomer.getJiaxianType().equals(JiaXianStockEnum.JIAXIAN.getKey()) || adminUser.getIsGongcheng())
                     return this.queryAdminModuleTree(adminUser.getRoleId(), false, null, flag);
 
                 return this.queryAdminModuleTree(adminUser.getAdminUserId(), false, null, flag);
@@ -1403,9 +1416,10 @@ public class AdminUserLogic {
      * 修改子账号
      */
     @Transactional
-    public void updateChildUser(String adminUserId,String password,List<String> adminModuleIds){
+    public void updateChildUser(String adminUserId,String password,List<String> adminModuleIds,String name){
         AdminUser adminUser = adminUserService.getById(adminUserId);
         adminUser.setPassword(SecureUtil.md5(password));
+        adminUser.setNickName(name);
         adminUser.updateById();
 
         //更新权限
@@ -1617,7 +1631,7 @@ public class AdminUserLogic {
 
         List<String> customerNumbers = (isCustomer != null && !isCustomer) || (isMaster!= null && isMaster)?null:customerNumberS;
         IPage<AdminUserDto> adminUserIPage = adminMapper.mchList(new Page(pageNum, pageSize),adminUser.getAdminCompanyIds(),adminWebsitIds,
-                userName, null,null,null, status,roleId,isMaster,null,isCustomer,roleName,websitNumber,customerNumbers,1);
+                userName, null,null,null, status,roleId,isMaster,null,isCustomer,roleName,websitNumber,customerNumbers,1,null);
 
         return adminUserIPage;
     }
@@ -1684,4 +1698,210 @@ public class AdminUserLogic {
         }
 
     }
+
+    public IPage<AdminUserDto> listGongCheng(String adminWebsitId, String roleId, String customerId, Boolean isCustomer, Boolean isMaster,
+                                             Boolean status, String userName, Integer pageNum, Integer pageSize, HttpServletRequest request) {
+        String roleName = "";
+
+        AdminUserCom adminUser = commonLogic.getAdminUser(true);
+        List<String> adminWebsitIds = new ArrayList<>();
+        if(StringUtils.isNotEmpty(adminWebsitId)) {
+            adminWebsitIds = adminWebsitLogic.getAllAdminWebsitIds(adminWebsitId);
+        }else{
+            adminWebsitIds = adminUser.getAdminWebsitIds();
+        }
+
+        if (adminUser.getIsCustomer()) {
+            String websitNumber = adminUser.getAdminWebsit().getWebsitNumber();
+            List<AdminWebsit> list = adminWebsitService.lambdaQuery().eq(AdminWebsit::getWebsitNumber, websitNumber).list();
+            adminWebsitIds = list.stream().map(AdminWebsit::getAdminWebsitId).collect(Collectors.toList());
+        }
+        String websitNumber = "";
+        if(isCustomer != null && !isCustomer){
+            roleName = Constant.NOT_DEL_ROLE_YWY;
+            if(adminUser.getAdminWebsit() != null) {
+                websitNumber = adminUser.getAdminWebsit().getWebsitNumber();
+            }
+        }
+
+        List<KingDeeCustomer> list = kingDeeCustomerService.lambdaQuery().eq(KingDeeCustomer::getHigherPrantNumber, adminUser.getCustomerNumber())
+                .select(KingDeeCustomer::getId).list();
+        List<String> customerNumberS=new ArrayList<>();
+        if (!CollectionUtils.isEmpty(list)) {
+            for (KingDeeCustomer kingDeeCustomer : list) {
+                customerNumberS.add(kingDeeCustomer.getId());
+            }
+        }
+        if (adminUser.getIsCustomer() && CollectionUtils.isEmpty(list) )
+            return new Page<AdminUserDto>();
+
+        List<String> customerNumbers = (isCustomer != null && !isCustomer) || (isMaster!= null && isMaster)?null:customerNumberS;
+        IPage<AdminUserDto> adminUserIPage = adminMapper.mchList(new Page(pageNum, pageSize),adminUser.getAdminCompanyIds(),null,
+                userName, null,null,null, status,roleId,isMaster,null,isCustomer,roleName,websitNumber,customerNumbers,0,1);
+
+        return adminUserIPage;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void addGongCheng(String userName, String password, String customerId,String nickName,
+                             Integer work_login_limit, Integer home_login_limit, Integer span_login_limit) {
+
+
+
+        AdminUserCom adminUserKing = commonLogic.getAdminUser();
+    /*    if (!adminUser.getIsCustomer())
+            throw new RemoteServiceException("非经销商账号不可创建二级经销商");*/
+        KingDeeCustomer byId = new KingDeeCustomer();
+        if (adminUserKing.getIsCustomer()) {
+            byId = kingDeeCustomerService.lambdaQuery().eq(KingDeeCustomer::getNumber, adminUserKing.getCustomerNumber()).last("limit 1").one();
+        }else {
+            byId = kingDeeCustomerService.lambdaQuery().eq(KingDeeCustomer::getId, customerId).last("limit 1").one();
+        }
+
+        byId.setHigherPrantNumber(byId.getNumber());
+        byId.setHigherPrantName(byId.getName());
+
+
+        Integer count = kingDeeCustomerService.lambdaQuery()
+                .like(KingDeeCustomer::getNumber, "CUST" + byId.getNumber())
+                .orderByDesc(KingDeeCustomer::getId).count();
+        int num = count+1;
+
+        byId.setNumber("CUST" + byId.getNumber()+(num>9?num:"0"+num));
+
+        byId.setJiaxianType(CuseromtTypeEnum.GONGCHENG.getKey());
+        byId.setId(IdWorker.getIdStr());
+        byId.setName(nickName);
+        byId.setExamineStatus(ExamineStatusEnum.OK.getKey());
+        byId.setChargeName(byId.getChargeName());
+        byId.setMobile(byId.getMobile());
+        byId.setInvoiceAddress(byId.getInvoiceAddress());
+        byId.setForbidStatus(byId.getForbidStatus());
+        byId.setUrl(byId.getUrl());
+        if (!com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(byId.getAfterNumber())) {
+            byId.setAfterNumber(byId.getAfterNumber());
+            byId.setBinding("YES");
+            byId.setBindingName(adminUserKing.getNickName());
+            byId.setBindingTime(new Date());
+        }
+        byId.insert();
+
+        CustomerBillLimitConfig customerBillLimitConfig = new CustomerBillLimitConfig();
+        customerBillLimitConfig.setCustomerId(byId.getId());
+        customerBillLimitConfig.setCustomerNumber(byId.getNumber());
+        customerBillLimitConfig.setWorkLoginLimit(work_login_limit);
+        customerBillLimitConfig.setHomeLoginLimit(home_login_limit);
+        customerBillLimitConfig.setSpanLoginLimit(span_login_limit);
+        customerBillLimitConfig.setState(true);
+        customerBillLimitConfig.insert();
+
+
+        AdminUser adminUser = adminUserService.lambdaQuery()
+                .eq(AdminUser::getCustomerNumber, byId.getNumber()).eq(AdminUser::getIsMaster, true).last("limit 1").one();
+        if (adminUser == null){
+             adminUser = adminUserService.lambdaQuery()
+                    .eq(AdminUser::getRoleName,"经销商").eq(AdminUser::getIsMaster, true).last("limit 1").one();
+        }
+
+        String oldUserId = adminUser.getAdminUserId();
+        String oldUserName = adminUser.getUserName();
+
+
+        AdminRole adminRole = adminRoleService.getById(Constant.SUPPLY_ROLE_CHILD_GONGCHENG);
+
+
+        //复制个小号出来
+        adminUser.setAdminUserId(IdWorker.getIdStr());
+
+        adminUser.setUserName(byId.getNumber());
+        adminUser.setNickName(nickName);
+
+        adminUser.setRoleName(adminRole.getName());
+        adminUser.setCustomerId(byId.getId());
+        adminUser.setCustomerName(byId.getHigherPrantName());
+        adminUser.setCustomerNumber(byId.getHigherPrantNumber());
+        adminUser.setRoleId(adminRole.getAdminRoleId());
+        adminUser.setPassword(SecureUtil.md5(password));
+        adminUser.setIsMaster(false);
+        adminUser.setDecodePwd(password);
+        adminUser.setIsGongcheng(true);
+        adminUser.insert();
+
+        //复制部门出来
+        List<AdminUserWebsitRela> list = adminUserWebsitRelaService.lambdaQuery().eq(AdminUserWebsitRela::getAdminUserId, oldUserId).list();
+        if(CollectionUtils.isNotEmpty(list)){
+            adminUserWebsitRelaService.lambdaUpdate().eq(AdminUserWebsitRela::getAdminUserId,adminUser.getAdminUserId()).remove();
+            for(AdminUserWebsitRela rela : list){
+                rela.setId(null);
+                rela.setAdminUserId(adminUser.getAdminUserId());
+                rela.insert();
+            }
+        }
+
+        //仓库权限
+        List<AdminUserStock> stocks = adminUserStockService.lambdaQuery().eq(AdminUserStock::getAdminUserId, oldUserId).list();
+        if(CollectionUtils.isNotEmpty(stocks)){
+            for (AdminUserStock stock : stocks) {
+                stock.setId(null);
+                stock.setAdminUserId(adminUser.getAdminUserId());
+                stock.insert();
+            }
+        }
+        //分类权限
+        List<AdminUserCategoryRela> categoryRelas = adminUserCategoryRelaService.lambdaQuery().eq(AdminUserCategoryRela::getAdminUserId, oldUserId).list();
+        if(CollectionUtils.isNotEmpty(categoryRelas)){
+            for(AdminUserCategoryRela rela:categoryRelas){
+                rela.setId(null);
+                rela.setAdminUserId(adminUser.getAdminUserId());
+                rela.insert();
+            }
+        }
+
+    }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public void updateGongCheng(String adminUserId, String nickName, Integer workLoginLimit, Integer homeLoginLimit,
+                                Integer spanLoginLimit) {
+        AdminUser adminUser = adminUserService.getById(adminUserId);
+        adminUser.setNickName(nickName);
+        adminUser.updateById();
+
+        customerBillLimitConfigService
+                .lambdaUpdate()
+                .eq(CustomerBillLimitConfig::getCustomerId,adminUser.getCustomerId())
+                .set(CustomerBillLimitConfig::getWorkLoginLimit,workLoginLimit)
+                .set(CustomerBillLimitConfig::getHomeLoginLimit,homeLoginLimit)
+                .set(CustomerBillLimitConfig::getSpanLoginLimit,spanLoginLimit)
+                .update();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public AdminUserDto detailGongCheng(String adminUserId) {
+        AdminUserDto adminUserDto = BeanUtil.toBean(adminUserService.getById(adminUserId), AdminUserDto.class);
+        CustomerBillLimitConfig customerBillLimitConfig = customerBillLimitConfigService
+                .lambdaQuery()
+                .eq(CustomerBillLimitConfig::getCustomerId, adminUserDto.getCustomerId())
+                .last("limit 1").one();
+
+        KingDeeCustomer kingDeeCustomer = kingDeeCustomerService.getById(adminUserDto.getCustomerId());
+        KingDeeCustomer kingCustomer = kingDeeCustomerService.lambdaQuery().
+                eq(KingDeeCustomer::getNumber,kingDeeCustomer.getHigherPrantNumber()).one();
+        if (customerBillLimitConfig != null) {
+            adminUserDto.setWorkLoginLimit(customerBillLimitConfig.getWorkLoginLimit());
+            adminUserDto.setHomeLoginLimit(customerBillLimitConfig.getHomeLoginLimit());
+            adminUserDto.setSpanLoginLimit(customerBillLimitConfig.getSpanLoginLimit());
+        }
+
+        adminUserDto.setParentId(kingCustomer.getId());
+        return adminUserDto;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void delGongCheng(String userName) {
+        AdminUser adminUser = adminMapper.selectByUserName(userName);
+        kingDeeCustomerService.lambdaUpdate().eq(KingDeeCustomer::getNumber,adminUser.getCustomerNumber()).remove();
+        adminMapper.delByUserName(userName);
+
+    }
 }

+ 36 - 2
src/main/java/com/zfire/mall/manager/logic/common/CommonLogic.java

@@ -2,12 +2,10 @@ package com.zfire.mall.manager.logic.common;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.net.Ipv4Util;
 import cn.hutool.extra.servlet.ServletUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.zfire.mall.manager.bean.MainBean;
-import com.zfire.mall.manager.bean.admin.AdminUserBean;
 import com.zfire.mall.manager.bean.admin.AdminUserCom;
 import com.zfire.mall.manager.bean.admin.respDto.AdminWebsitDto;
 import com.zfire.mall.manager.bean.direct.SysDictBean;
@@ -16,6 +14,7 @@ import com.zfire.mall.manager.commonmapper.AdminMapper;
 import com.zfire.mall.manager.commonmapper.manage.product.ProductUpdPriceBillReserveMapper;
 import com.zfire.mall.manager.constant.Constant;
 import com.zfire.mall.manager.constant.SysDictConstant;
+import com.zfire.mall.manager.enums.StatusEnum;
 import com.zfire.mall.manager.enums.SysDictEnum;
 import com.zfire.mall.manager.exception.RemoteServiceException;
 import com.zfire.mall.manager.logic.admin.AdminWebsitLogic;
@@ -34,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.ByteArrayOutputStream;
@@ -100,6 +100,8 @@ public class CommonLogic {
     OperatorLogService operatorLogService;
     @Autowired
     WalletLogic walletLogic;
+    @Resource
+    LbsAmapService lbsAmapService;
 
 
     public String getIp(){
@@ -165,6 +167,7 @@ public class CommonLogic {
         //财务
         adminUserCom.setIsCw(adminUserCom.getRoleName().equals(Constant.NOT_DEL_ROLE_NAME2));
         adminUserCom.setIsService(adminUserCom.getRoleName().equals(Constant.NOT_DEL_ROLE_YWY));
+        adminUserCom.setIsTradeExaminer(adminUserCom.getRoleName().equals(Constant.NOT_DEL_ROLE_SPY));
         //部门帐号
         if(adminUserCom.getType() == 0){
             adminUserCom = this.websitAccount(adminUserCom, request);
@@ -605,6 +608,28 @@ public class CommonLogic {
         return number.toString();
     }
 
+    /**
+     * 生成商用登录项目编号
+     * @param orderType 订单类型
+     * @param length 一般 8 位
+     * @return
+     */
+    public String generateTradeLoginNo(String orderType, int length) {
+        Date curDate = new Date();
+        String yearFmt = DateUtil.format(curDate, "yyyy");
+        String yearMonthFmt = DateUtil.format(curDate, "yy");
+        String tNumKey = Constant.RedisPrefix.INFO_ORDER_NUM + orderType + yearFmt;
+        StringBuffer number = new StringBuffer();
+        number.append(yearMonthFmt);
+        number.append("-");
+        int ramainLen = length - number.toString().length();
+        //自增 填充位数
+        Object value = redisUtil.incr(tNumKey, 1);
+        redisUtil.expire(tNumKey, 375 * 24 * 60 * 60);
+        number.append(String.format("%0" + ramainLen + "d", Integer.parseInt(value.toString())));
+        return number.toString();
+    }
+
 
     /**
      * 根据物料id获取品类
@@ -772,6 +797,15 @@ public class CommonLogic {
         return operatorLog;
     }
 
+    public List<LbsAmap> regionList(List<String> parentLbsId) {
+        List<LbsAmap> list = lbsAmapService.lambdaQuery()
+                .eq(LbsAmap::getStatus, StatusEnum.ON.getKey())
+                .eq(org.springframework.util.CollectionUtils.isEmpty(parentLbsId),LbsAmap::getLevel,"province")
+                .in(!org.springframework.util.CollectionUtils.isEmpty(parentLbsId), LbsAmap::getParentLbsId, parentLbsId)
+                .list();
+        return list;
+    }
+
 //    @Autowired
 //    WalletLogic walletLogic;
 //

+ 111 - 0
src/main/java/com/zfire/mall/manager/logic/config/FirstPartyCustomerManagementLogic.java

@@ -0,0 +1,111 @@
+package com.zfire.mall.manager.logic.config;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.zfire.mall.manager.bean.admin.AdminUserCom;
+import com.zfire.mall.manager.bean.config.FirstPartyCustomerManagementAddParam;
+import com.zfire.mall.manager.bean.config.FirstPartyCustomerManagementDetailVO;
+import com.zfire.mall.manager.bean.config.FirstPartyCustomerManagementEditParam;
+import com.zfire.mall.manager.bean.config.FirstPartyCustomerManagementListVO;
+import com.zfire.mall.manager.commonmapper.CommonMapper;
+import com.zfire.mall.manager.convert.FirstPartyCustomerManagementConvert;
+import com.zfire.mall.manager.exception.RemoteServiceException;
+import com.zfire.mall.manager.logic.common.CommonLogic;
+import com.zfire.mall.manager.plus.entity.PartyAInfo;
+import com.zfire.mall.manager.plus.entity.Region;
+import com.zfire.mall.manager.plus.service.PartyAInfoService;
+import com.zfire.mall.manager.plus.service.RegionService;
+import com.zfire.mall.manager.zfire.bean.QueryParamBean;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import com.zfire.mall.manager.zfire.util.FieldUtils;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:10 星期三
+ */
+@RequiredArgsConstructor
+@Service
+public class FirstPartyCustomerManagementLogic {
+    private final PartyAInfoService partyAInfoService;
+    private final CommonMapper commonMapper;
+    private final RegionService regionService;
+    private final TradeConfigLogic tradeConfigLogic;
+    private final CommonLogic commonLogic;
+
+    public IPage<FirstPartyCustomerManagementListVO> list(ZfireParamBean param) {
+        AdminUserCom adminUser = commonLogic.getAdminUser(true);
+        if (adminUser.getIsCustomer()) {
+            param.getParams().add(new QueryParamBean().setParam("a.create_name")
+                    .setCompare("=")
+                    .setValue(adminUser.getUserName()));
+        }
+        if (adminUser.getIsService()) {
+            param.getParams().add(new QueryParamBean().setParam("a.create_name")
+                    .setCompare("=")
+                    .setValue(adminUser.getUserName()));
+        }
+        FieldUtils.supplyParam(param);
+        IPage<PartyAInfo> page = commonMapper.firstPartyCustomerManagementList(new Page<>(param.getPageNum(), param.getPageSize()), param);
+        return buildPageVO(page);
+    }
+
+    public FirstPartyCustomerManagementDetailVO detail(String id) {
+        return partyAInfoService.lambdaQuery()
+                .eq(PartyAInfo::getId, id)
+                .oneOpt()
+                .map(FirstPartyCustomerManagementConvert.INSTANCE::toVO)
+                .orElseThrow(() -> new RemoteServiceException("查询信息不存在"));
+    }
+
+    public boolean edit(FirstPartyCustomerManagementEditParam param, AdminUserCom adminUser) {
+        ArrayList<Long> regionIdLIst = Lists.newArrayList(param.getProvinceRegionId(), param.getCityRegionId(), param.getAreaId());
+        Map<Long, String> regionNameByIdMap = Collections.emptyMap();
+        if (CollectionUtils.isNotEmpty(regionIdLIst)) {
+            regionNameByIdMap = regionService.lambdaQuery()
+                    .select(Region::getId, Region::getName)
+                    .in(Region::getId, regionIdLIst)
+                    .list()
+                    .stream()
+                    .collect(Collectors.toMap(Region::getId, Region::getName));
+        }
+        PartyAInfo partyAInfo = FirstPartyCustomerManagementConvert.INSTANCE.toDO(param,adminUser.getUserName(), regionNameByIdMap);
+        return partyAInfoService.updateById(partyAInfo);
+    }
+
+    public boolean add(FirstPartyCustomerManagementAddParam param, AdminUserCom adminUser) {
+        Map<Long, String> regionNameByIdMap = regionService.lambdaQuery()
+                .select(Region::getId, Region::getName)
+                .in(Region::getId, Lists.newArrayList(param.getProvinceRegionId(), param.getCityRegionId(), param.getAreaId()))
+                .list()
+                .stream()
+                .collect(Collectors.toMap(Region::getId, Region::getName));
+
+        PartyAInfo partyAInfo = FirstPartyCustomerManagementConvert.INSTANCE.toDO(param,adminUser.getUserName(), regionNameByIdMap);
+        return partyAInfoService.save(partyAInfo);
+    }
+
+    public boolean del(List<String> idList) {
+        return partyAInfoService.removeByIds(idList);
+    }
+
+    private IPage<FirstPartyCustomerManagementListVO> buildPageVO(IPage<PartyAInfo> page) {
+        if (CollectionUtils.isEmpty(page.getRecords())) {
+            return new Page<>(page.getCurrent(), page.getSize());
+        }
+        List<String> tradeIdList = page.getRecords()
+                .stream()
+                .map(item -> Lists.newArrayList(item.getTradeId(), item.getTradeParentId()))
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList());
+        Map<String, String> tradeNameByIdMap = tradeConfigLogic.nameByIdMap(tradeIdList);
+        return FirstPartyCustomerManagementConvert.INSTANCE.toPageVO(page, tradeNameByIdMap);
+    }
+}

+ 80 - 0
src/main/java/com/zfire/mall/manager/logic/config/MerchantLoginQuotaLimitLogic.java

@@ -0,0 +1,80 @@
+package com.zfire.mall.manager.logic.config;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.admin.AdminUserCom;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitAddParam;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitDetailVO;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitEditParam;
+import com.zfire.mall.manager.bean.config.MerchantLoginQuotaLimitListVO;
+import com.zfire.mall.manager.commonmapper.CommonMapper;
+import com.zfire.mall.manager.convert.MerchantLoginQuotaLimitConvert;
+import com.zfire.mall.manager.exception.RemoteServiceException;
+import com.zfire.mall.manager.plus.entity.CustomerBillLimitConfig;
+import com.zfire.mall.manager.plus.entity.KingDeeCustomer;
+import com.zfire.mall.manager.plus.service.CustomerBillLimitConfigService;
+import com.zfire.mall.manager.plus.service.KingDeeCustomerService;
+import com.zfire.mall.manager.zfire.bean.ZfireParamBean;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:13 星期三
+ */
+@RequiredArgsConstructor
+@Service
+public class MerchantLoginQuotaLimitLogic {
+    private final KingDeeCustomerService kingDeeCustomerService;
+    private final CustomerBillLimitConfigService customerBillLimitConfigService;
+    private final CommonMapper commonMapper;
+
+    public IPage<MerchantLoginQuotaLimitListVO> list(ZfireParamBean param) {
+        IPage<CustomerBillLimitConfig> page = commonMapper.merchantLoginQuotaLimitList(new Page<>(param.getPageNum(), param.getPageSize()), param);
+        return buildPageVO(page);
+    }
+
+    public boolean del(List<String> idList) {
+        return customerBillLimitConfigService.removeByIds(idList);
+    }
+
+    public boolean add(MerchantLoginQuotaLimitAddParam param, AdminUserCom adminUser) {
+        CustomerBillLimitConfig customerBillLimitConfig = MerchantLoginQuotaLimitConvert.INSTANCE.toDO(param,adminUser.getUserName());
+        return customerBillLimitConfigService.save(customerBillLimitConfig);
+    }
+
+    public boolean edit(MerchantLoginQuotaLimitEditParam param, AdminUserCom adminUser) {
+        CustomerBillLimitConfig customerBillLimitConfig = MerchantLoginQuotaLimitConvert.INSTANCE.toDO(param, adminUser.getUserName());
+        return customerBillLimitConfigService.updateById(customerBillLimitConfig);
+    }
+
+    public MerchantLoginQuotaLimitDetailVO detail(String id) {
+        return customerBillLimitConfigService.lambdaQuery()
+                .eq(CustomerBillLimitConfig::getId, id)
+                .oneOpt()
+                .map(MerchantLoginQuotaLimitConvert.INSTANCE::toVO)
+                .orElseThrow(() -> new RemoteServiceException("查询信息不存在"));
+    }
+
+    private Page<MerchantLoginQuotaLimitListVO> buildPageVO(IPage<CustomerBillLimitConfig> page) {
+        if (CollectionUtils.isEmpty(page.getRecords())) {
+            return new Page<>(page.getCurrent(), page.getSize());
+        }
+        List<String> customerIdList = page.getRecords()
+                .stream()
+                .map(CustomerBillLimitConfig::getCustomerId)
+                .collect(Collectors.toList());
+        Map<String, String> nameByIdMap = kingDeeCustomerService.lambdaQuery()
+                .in(KingDeeCustomer::getId, customerIdList)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(KingDeeCustomer::getId, KingDeeCustomer::getName));
+        return MerchantLoginQuotaLimitConvert.INSTANCE.toPageVO(page, nameByIdMap);
+    }
+}

+ 133 - 0
src/main/java/com/zfire/mall/manager/logic/config/TradeConfigLogic.java

@@ -0,0 +1,133 @@
+package com.zfire.mall.manager.logic.config;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zfire.mall.manager.bean.admin.AdminUserCom;
+import com.zfire.mall.manager.bean.config.*;
+import com.zfire.mall.manager.convert.TradeConfigConvert;
+import com.zfire.mall.manager.exception.RemoteServiceException;
+import com.zfire.mall.manager.plus.entity.TradeCategoryConfig;
+import com.zfire.mall.manager.plus.service.TradeCategoryConfigService;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author qinrongjun
+ * @description
+ * @date 2023/7/26 14:18 星期三
+ */
+@RequiredArgsConstructor
+@Service
+public class TradeConfigLogic {
+    private final TradeCategoryConfigService tradeCategoryConfigService;
+
+    public final static String DEFAULT_TOP_LEVEL_ID = "0";
+
+    public boolean del(String id) {
+        Integer count = tradeCategoryConfigService.lambdaQuery()
+                .eq(TradeCategoryConfig::getParentId, id)
+                .count();
+        if (count > 0) {
+            throw new RemoteServiceException("当前节点存在下级不能删除");
+        }
+        return tradeCategoryConfigService.removeById(id);
+    }
+
+    public boolean add(TradeConfigAddParam param, AdminUserCom adminUser) {
+        TradeCategoryConfig tradeCategoryConfig = TradeConfigConvert.INSTANCE.toDO(param, adminUser.getUserName());
+        return tradeCategoryConfigService.save(tradeCategoryConfig);
+    }
+
+    public boolean edit(TradeConfigEditParam param, AdminUserCom adminUser) {
+        TradeCategoryConfig tradeCategoryConfig = TradeConfigConvert.INSTANCE.toDO(param, adminUser.getUserName());
+        return tradeCategoryConfigService.updateById(tradeCategoryConfig);
+    }
+
+    public IPage<TradeConfigListVO> list(TradeConfigListParam param) {
+        Page<TradeCategoryConfig> page = tradeCategoryConfigService.lambdaQuery()
+                .like(StringUtils.isNotBlank(param.getKeyword()),TradeCategoryConfig::getName, param.getKeyword())
+                .eq(StringUtils.isBlank(param.getKeyword()), TradeCategoryConfig::getParentId, StringUtils.isNotBlank(param.getParentId()) ? param.getParentId() : "0")
+                .page(new Page<>(param.getPageNum(), param.getPageSize()));
+        return buildPageVO(page);
+    }
+
+    /**
+     * 根据id查询名称
+     * @param idList
+     * @return
+     */
+    public Map<String, String> nameByIdMap(List<String> idList) {
+        return tradeCategoryConfigService.lambdaQuery()
+                .select(TradeCategoryConfig::getName, TradeCategoryConfig::getId)
+                .in(TradeCategoryConfig::getId, idList)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(TradeCategoryConfig::getId, TradeCategoryConfig::getName));
+
+    }
+
+    private Page<TradeConfigListVO> buildPageVO(Page<TradeCategoryConfig> page) {
+        if (CollectionUtils.isEmpty(page.getRecords())) {
+            return new Page<>(page.getCurrent(), page.getSize());
+        }
+        Set<String> parentIdList = page.getRecords()
+                .stream()
+                .map(TradeCategoryConfig::getParentId)
+                .filter(parentId -> !DEFAULT_TOP_LEVEL_ID.equals(parentId))
+                .collect(Collectors.toSet());
+        Map<String, String> parentNameByIdMap = Collections.emptyMap();
+        if (CollectionUtils.isNotEmpty(parentIdList)) {
+             parentNameByIdMap = tradeCategoryConfigService.lambdaQuery()
+                    .select(TradeCategoryConfig::getId, TradeCategoryConfig::getName)
+                    .in(TradeCategoryConfig::getId, parentIdList)
+                    .list()
+                    .stream()
+                    .collect(Collectors.toMap(TradeCategoryConfig::getId, TradeCategoryConfig::getName));
+        }
+        return TradeConfigConvert.INSTANCE.toPageVO(page, parentNameByIdMap);
+    }
+
+    public List<TradeConfigListLevelVO> listLevel(String keyword) {
+        List<TradeCategoryConfig> tradeCategoryConfigList = tradeCategoryConfigService.lambdaQuery()
+                .like(StringUtils.isNotBlank(keyword),TradeCategoryConfig::getName, keyword)
+                .list();
+        return buildLevelPageVO(tradeCategoryConfigList, StringUtils.isNotBlank(keyword));
+
+    }
+
+    private List<TradeConfigListLevelVO> buildLevelPageVO(List<TradeCategoryConfig> records, boolean isSearch) {
+        if (CollectionUtils.isEmpty(records)) {
+            return Collections.emptyList();
+        }
+        Map<String, List<TradeCategoryConfig>> childByParentIdMap = records.stream().collect(Collectors.groupingBy(TradeCategoryConfig::getParentId));
+        List<TradeCategoryConfig> levelOneList = childByParentIdMap.remove(DEFAULT_TOP_LEVEL_ID);
+        // 1. 不是搜索,直接组装上下级
+        if (!isSearch) {
+            return CollectionUtils.isEmpty(levelOneList) ? Collections.emptyList() : TradeConfigConvert.INSTANCE.toLevelVOList(levelOneList, childByParentIdMap);
+        }
+        // 2. 搜索
+        // 没有子级, 直接返回父级
+        if (MapUtils.isEmpty(childByParentIdMap)) {
+            return CollectionUtils.isEmpty(levelOneList) ? Collections.emptyList() : TradeConfigConvert.INSTANCE.toVOList(levelOneList);
+        }
+        // 有子级, 拿子级的父级
+        Set<String> parentIdList = childByParentIdMap.keySet();
+        List<TradeCategoryConfig> parentList = tradeCategoryConfigService.lambdaQuery()
+                .in(TradeCategoryConfig::getId, parentIdList)
+                .list();
+        // 搜索得到的父级,添加进父级集合,得到完整的树形结构父级数据
+        if (CollectionUtils.isNotEmpty(levelOneList)) {
+            parentList.addAll(levelOneList);
+        }
+        return TradeConfigConvert.INSTANCE.toLevelVOList(parentList, childByParentIdMap);
+    }
+}

+ 9 - 0
src/main/java/com/zfire/mall/manager/logic/customer/CustomerProductTypeLogic.java

@@ -118,6 +118,10 @@ public class CustomerProductTypeLogic {
         if(count > 0){
             throw new RemoteServiceException("请勿重复设置相同的关系");
         }
+        CustomerWallet customerWallet = customerWalletService.getById(customerProductTypeRela.getCustomerWalletId());
+        if(customerWallet != null) {
+            customerProductTypeRela.setWalletId(customerWallet.getWalletRebateId());
+        }
         customerProductTypeRela.insert();
     }
 
@@ -136,6 +140,10 @@ public class CustomerProductTypeLogic {
         if(count > 0){
             throw new RemoteServiceException("请勿重复设置相同的关系");
         }
+        CustomerWallet customerWallet = customerWalletService.getById(customerProductTypeRela.getCustomerWalletId());
+        if(customerWallet != null) {
+            customerProductTypeRela.setWalletId(customerWallet.getWalletRebateId());
+        }
         customerProductTypeRela.updateById();
         commonLogic.saveLog(customerProductTypeRela.getId());
     }
@@ -240,6 +248,7 @@ public class CustomerProductTypeLogic {
                 customerProductTypeRela.setCustomerId(customer.getId());
                 customerProductTypeRela.setCustomerName(customer.getName());
                 customerProductTypeRela.setCustomerNumber(customer.getNumber());
+                customerProductTypeRela.setWalletId(customerWallet.getWalletRebateId());
                 customerProductTypeRela.setServiceId(adminUser.getAdminUserId());
                 customerProductTypeRela.setServiceName(adminUser.getNickName());
                 customerProductTypeRela.setCustomerWalletId(customerWallet.getCustomerWalletId());

+ 30 - 11
src/main/java/com/zfire/mall/manager/logic/customer/Stagek3CustomerLogic.java

@@ -12,6 +12,7 @@ import com.zfire.mall.manager.bean.listV2.K3CustomerVO;
 import com.zfire.mall.manager.bean.listV2.StageK3CustomerVO;
 import com.zfire.mall.manager.commonmapper.CommonCountMapper;
 import com.zfire.mall.manager.commonmapper.listV2.CommonCMapper;
+import com.zfire.mall.manager.enums.CuseromtTypeEnum;
 import com.zfire.mall.manager.exception.RemoteServiceException;
 import com.zfire.mall.manager.logic.common.CommonLogic;
 import com.zfire.mall.manager.plus.entity.KingDeeCustomer;
@@ -50,19 +51,36 @@ public class Stagek3CustomerLogic {
 
     public void add(KingDeeCustomer kingDeeCustomer, HttpServletRequest request) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
-        if (!adminUser.getIsCustomer())
-            throw new RemoteServiceException("非经销商账号不可创建二级经销商");
-        KingDeeCustomer byId = kingDeeCustomerService.lambdaQuery().eq(KingDeeCustomer::getNumber,adminUser.getCustomerNumber()).last("limit 1").one();
-        byId.setNumber("CUST"+ IdWorker.getIdStr().substring(6));
-        byId.setJiaxianType("JIAXIAN");
+    /*    if (!adminUser.getIsCustomer())
+            throw new RemoteServiceException("非经销商账号不可创建二级经销商");*/
+        KingDeeCustomer byId = new KingDeeCustomer();
+        if (adminUser.getIsCustomer()) {
+             byId = kingDeeCustomerService.lambdaQuery().eq(KingDeeCustomer::getNumber, adminUser.getCustomerNumber()).last("limit 1").one();
+        }else {
+            byId = kingDeeCustomerService.lambdaQuery().eq(KingDeeCustomer::getNumber, kingDeeCustomer.getHigherPrantNumber()).last("limit 1").one();
+        }
+
+        byId.setHigherPrantNumber(byId.getNumber());
+        byId.setHigherPrantName(byId.getName());
+
+
+
+        Integer count = kingDeeCustomerService.lambdaQuery()
+                .like(KingDeeCustomer::getNumber, "CUST" + byId.getNumber())
+                .orderByDesc(KingDeeCustomer::getId).count();
+        int num = count+1;
+
+        byId.setNumber("CUST" + byId.getNumber()+(num>9?num:"0"+num));
+
+        byId.setJiaxianType(kingDeeCustomer.getJiaxianType().equals(CuseromtTypeEnum.GONGCHENG.getKey())
+                ?CuseromtTypeEnum.GONGCHENG.getKey():CuseromtTypeEnum.JIAXIAN.getKey());
         byId.setId(IdWorker.getIdStr());
-        byId.setHigherPrantNumber(adminUser.getCustomerNumber());
-        byId.setHigherPrantName(adminUser.getCustomerName());
         byId.setName(kingDeeCustomer.getName());
         byId.setChargeName(kingDeeCustomer.getChargeName());
         byId.setMobile(kingDeeCustomer.getMobile());
         byId.setInvoiceAddress(kingDeeCustomer.getInvoiceAddress());
         byId.setForbidStatus(kingDeeCustomer.getForbidStatus());
+        byId.setUrl(kingDeeCustomer.getUrl());
         if (!StringUtils.isBlank(kingDeeCustomer.getAfterNumber())) {
             byId.setAfterNumber(kingDeeCustomer.getAfterNumber());
             byId.setBinding("YES");
@@ -70,13 +88,14 @@ public class Stagek3CustomerLogic {
             byId.setBindingTime(new Date());
         }
         byId.insert();
+
+
     }
 
     public void update(KingDeeCustomer kingDeeCustomer, HttpServletRequest request) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-        if (!adminUser.getIsCustomer())
-            throw new RemoteServiceException("非经销商账号不可创建二级经销商");
-        kingDeeCustomer.setJiaxianType("JIAXIAN");
+
+        kingDeeCustomer.setJiaxianType(kingDeeCustomer.getJiaxianType().equals(CuseromtTypeEnum.GONGCHENG.getKey())
+                ?CuseromtTypeEnum.GONGCHENG.getKey():CuseromtTypeEnum.JIAXIAN.getKey());
         kingDeeCustomer.updateById();
     }
 

+ 14 - 2
src/main/java/com/zfire/mall/manager/logic/displace/order/DisplaceOrderV2Logic.java

@@ -20,6 +20,7 @@ import com.zfire.mall.manager.logic.common.CommonLogic;
 import com.zfire.mall.manager.logic.engin.order.EnginOrderLogic;
 import com.zfire.mall.manager.logic.retail.RetailOrderLogic;
 import com.zfire.mall.manager.logic.saletype.SaleTypeLogic;
+import com.zfire.mall.manager.logic.wallet.RebateOrderLogic;
 import com.zfire.mall.manager.logic.wallet.WalletLogic;
 import com.zfire.mall.manager.plus.entity.*;
 import com.zfire.mall.manager.plus.service.*;
@@ -84,6 +85,8 @@ public class DisplaceOrderV2Logic {
     DepositManageItemCollectService depositManageItemCollectService;
     @Resource
     DepositManageItemBakService depositManageItemBakService;
+    @Autowired
+    RebateOrderLogic rebateOrderLogic;
 
 
     public List<List<OrderDisplaceRecord>> recordList(String orderId){
@@ -247,6 +250,8 @@ public class DisplaceOrderV2Logic {
             rebateRate = oldItem.getRebateRate();
             discAmount = oldItem.getDiscAmount();
         }
+        //是否有红字未确认的返利单
+        rebateOrderLogic.checkNeedAck(oldItem.getCustomerWalletId2());
 
         //置换扣新的金额
         BigDecimal payAmount = price.multiply(qty);
@@ -469,6 +474,7 @@ public class DisplaceOrderV2Logic {
                 .setOrderOperationType(OrderOperationTypeEnum.ORDER_DISPLACE.getKey())
                 .setDirection(1)
                 .setRefType("订单置换")
+                .setOrderCreateTime(DateUtil.date())
                 .setCreateBy(null)
                 .setCreateTime(null));
 
@@ -497,6 +503,7 @@ public class DisplaceOrderV2Logic {
                 .setOrderOperationType(OrderOperationTypeEnum.ORDER_DISPLACE.getKey())
                 .setDirection(-1)
                 .setRefType("订单置换")
+                .setOrderCreateTime(oldOrder.getCreateTime())
                 .setCreateBy(null)
                 .setCreateTime(null));
         OrderExecRecord newExecRecord = new OrderExecRecord();
@@ -518,6 +525,7 @@ public class DisplaceOrderV2Logic {
                 .setOrderOperationType(OrderOperationTypeEnum.ORDER_DISPLACE.getKey())
                 .setDirection(1)
                 .setRefType("订单置换")
+                .setOrderCreateTime(DateUtil.date())
                 .setCreateBy(null)
                 .setCreateTime(null));
 
@@ -612,6 +620,10 @@ public class DisplaceOrderV2Logic {
             payAmount = BigDecimal.valueOf(0);
         //TODO 如果是家用工程扣押金订单
         BigDecimal depositRate = enginOrderLogic.queryOrderTakeDeposit(oldOrder);
+        int depositCompare = depositRate.compareTo(BigDecimal.ZERO);
+
+        //是否有红字未确认的返利单
+        rebateOrderLogic.checkNeedAck(oldItem.getCustomerWalletId2());
 
         //部分置换
         //1.退掉被置换的明细数量和金额
@@ -659,8 +671,8 @@ public class DisplaceOrderV2Logic {
         newItem.setSingleRebateAmount(oldItem.getSingleRebateAmount());
         newItem.setSinglePayPrice(payAmount.divide(qty,2,BigDecimal.ROUND_HALF_DOWN));
         newItem.setSingleDiscAmount(totalDiscAmount.divide(qty,2,BigDecimal.ROUND_HALF_DOWN));
-        newItem.setSingleDepositAmount(newItem.getSinglePayPrice().multiply(depositRate).setScale(2, BigDecimal.ROUND_DOWN));
-        newItem.setTotalDepositAmount(newItem.getSingleDepositAmount().multiply(qty));
+        newItem.setSingleDepositAmount(depositCompare >= 0 ? newItem.getSinglePayPrice().multiply(depositRate).setScale(2, BigDecimal.ROUND_DOWN) : BigDecimal.ZERO);
+        newItem.setTotalDepositAmount(depositCompare >= 0 ? newItem.getSingleDepositAmount().multiply(qty) : BigDecimal.ZERO);
         newItem.setTax(oldItem.getTax());
         newItem.setRemark(oldItem.getRemark());
         newItem.setHistoryHasOrderQty(oldItem.getHistoryHasOrderQty());

+ 109 - 51
src/main/java/com/zfire/mall/manager/logic/engin/deposit/DepositManageLogic.java

@@ -25,11 +25,13 @@ import com.zfire.mall.manager.bean.wallet.CustomerWalletAmountBean;
 import com.zfire.mall.manager.bean.wallet.CustomerWalletBean;
 import com.zfire.mall.manager.commonmapper.engin.deposit.DepositMangeReserveMapper;
 import com.zfire.mall.manager.constant.Constant;
+import com.zfire.mall.manager.datasource.engin.entity.AgencyBills;
 import com.zfire.mall.manager.datasource.engin.logic.AgencyBillsLogic;
 import com.zfire.mall.manager.enums.*;
 import com.zfire.mall.manager.exception.RemoteServiceException;
 import com.zfire.mall.manager.logic.common.CommonLogic;
 import com.zfire.mall.manager.logic.engin.deposit.bacth.ExamineHomeLogic;
+import com.zfire.mall.manager.logic.engin.order.EnginSysLogic;
 import com.zfire.mall.manager.logic.retail.RetailOrderLogic;
 import com.zfire.mall.manager.logic.wallet.WalletLogic;
 import com.zfire.mall.manager.plus.entity.*;
@@ -90,8 +92,8 @@ public class DepositManageLogic {
     RedisLockRegistry redisLockRegistry;
     @Autowired
     OSSUtil ossUtil;
-//    @Resource
-//    EnginSysLogic enginSysLogic;
+    @Resource
+    EnginSysLogic enginSysLogic;
     @Resource
     ExamineHomeLogic examineHomeLogic;
     @Resource
@@ -237,13 +239,13 @@ public class DepositManageLogic {
         detail.setDataList(dataList);
         detail.setCheckRecordItems(checkRecords);
 
-//        List<AgencyBills> sysAgencyBills = enginSysLogic.queryBills(new ArrayList<String>() {{ this.add(detail.getRefEnginRecordNo()); }});
-//        if (CollectionUtil.isNotEmpty(sysAgencyBills)) {
-//            AgencyBills agencyBill = sysAgencyBills.get(0);
-//            if (Objects.isNull(detail.getInstallDate()) && Objects.nonNull(agencyBill.getInstallDate())) {
-//                detail.setInstallDate(agencyBill.getInstallDate());
-//            }
-//        }
+        List<AgencyBills> sysAgencyBills = enginSysLogic.queryBills(new ArrayList<String>() {{ this.add(detail.getRefEnginRecordNo()); }});
+        if (CollectionUtil.isNotEmpty(sysAgencyBills)) {
+            AgencyBills agencyBill = sysAgencyBills.get(0);
+            if (Objects.isNull(detail.getInstallDate()) && Objects.nonNull(agencyBill.getInstallDate())) {
+                detail.setInstallDate(agencyBill.getInstallDate());
+            }
+        }
 
         List<EnginOrderItem> orderItems = depositMangeReserveMapper.queryOrderHasSendQty(new ArrayList<String>() {{ this.add(detail.getRefEnginRecordNo()); }});
         Map<String, EnginOrderItem> orderItemMap = orderItems.stream()
@@ -296,14 +298,20 @@ public class DepositManageLogic {
         }
 
         depositManage.setExamineStatus(ExamineStatusEnum.WAIT.toString())
+//                .setRemark(depositManageBean.getRemark())
                 .setInstallDate(depositManageBean.getInstallDate())
                 .setApplyNote(depositManageBean.getApplyNote())
                 .setUpdateBy(CommonUtils.getUsername())
                 .setUpdateName(CommonUtils.getNickName())
                 .setSubmitBy(CommonUtils.getUsername())
                 .setSubmitName(CommonUtils.getNickName())
-                .setSubmitTime(DateUtil.date());
+                .setSubmitTime(DateUtil.date())
+                .setConfirmResult(null);
         depositManage.updateById();
+        depositManageService.lambdaUpdate()
+                .set(DepositManage::getConfirmResult, null)
+                .eq(DepositManage::getDepositManageId, depositManage.getDepositManageId())
+                .update();
 
         List<DepositManageItem> depositManageItems = depositManageItemService.lambdaQuery()
                 .eq(DepositManageItem::getParentId, depositManage.getDepositManageId())
@@ -365,7 +373,12 @@ public class DepositManageLogic {
             depositManageItem.setDiffPolicyPrice(priceBean.getBatchPrice())
                     .setDiffPrice(diffPrice)
                     .setDiffAmount(diffAmount)
-                    .setDataQty(depositMangeItemBean.getDataQty());
+                    .setDataQty(depositMangeItemBean.getDataQty())
+                    .setDepositMaterialId(StringUtils.isNotBlank(depositMangeItemBean.getDepositMaterialId()) ? depositMangeItemBean.getDepositMaterialId() : depositManageItem.getDepositMaterialId())
+                    .setDepositMaterialName(StringUtils.isNotBlank(depositMangeItemBean.getDepositMaterialName()) ? depositMangeItemBean.getDepositMaterialName() : depositManageItem.getDepositMaterialName())
+                    .setDepositMaterialNumber(StringUtils.isNotBlank(depositMangeItemBean.getDepositMaterialNumber()) ? depositMangeItemBean.getDepositMaterialNumber() : depositManageItem.getDepositMaterialNumber())
+                    .setDepositMaterialOldNumber(StringUtils.isNotBlank(depositMangeItemBean.getDepositMaterialOldNumber()) ? depositMangeItemBean.getDepositMaterialOldNumber() : depositManageItem.getDepositMaterialOldNumber())
+                    .setDepositSpecification(StringUtils.isNotBlank(depositMangeItemBean.getDepositSpecification()) ? depositMangeItemBean.getDepositSpecification() : depositManageItem.getDepositSpecification());
         }
 
         this.computeOrderSalesQtyData(depositManageItems);
@@ -420,7 +433,9 @@ public class DepositManageLogic {
                 .eq(adminUser.getIsCustomer(), DepositManage::getCustomerId, adminUser.getCustomerId())
                 .in(CollectionUtil.isNotEmpty(adminUser.getAdminCompanyIds()), DepositManage::getAdminCompanyId, adminUser.getAdminCompanyIds())
                 .one();
-
+        if (adminUser.getIsCustomer()) {
+            throw new RemoteServiceException("经销商没有权限");
+        }
         if (Objects.isNull(depositManage)) {
             throw new RemoteServiceException("单据内容已发生变化,处理失败");
         }
@@ -489,7 +504,12 @@ public class DepositManageLogic {
                     .setDataQty(itemBean.getDataQty())
                     .setContractQty(itemBean.getContractQty())
                     .setContractPrice(itemBean.getContractPrice())
-                    .setContractAmount(itemBean.getContractAmount());
+                    .setContractAmount(itemBean.getContractAmount())
+                    .setDepositMaterialId(StringUtils.isNotBlank(itemBean.getDepositMaterialId()) ? itemBean.getDepositMaterialId() : depositManageItem.getDepositMaterialId())
+                    .setDepositMaterialName(StringUtils.isNotBlank(itemBean.getDepositMaterialName()) ? itemBean.getDepositMaterialName() : depositManageItem.getDepositMaterialName())
+                    .setDepositMaterialNumber(StringUtils.isNotBlank(itemBean.getDepositMaterialNumber()) ? itemBean.getDepositMaterialNumber() : depositManageItem.getDepositMaterialNumber())
+                    .setDepositMaterialOldNumber(StringUtils.isNotBlank(itemBean.getDepositMaterialOldNumber()) ? itemBean.getDepositMaterialOldNumber() : depositManageItem.getDepositMaterialOldNumber())
+                    .setDepositSpecification(StringUtils.isNotBlank(itemBean.getDepositSpecification()) ? itemBean.getDepositSpecification() : depositManageItem.getDepositSpecification());
 
             // 单据收差总计
             totalDiffAmount = totalDiffAmount.add(depositManageItem.getDiffAmount());
@@ -532,7 +552,8 @@ public class DepositManageLogic {
                 .setConfirmBy(confirmBy)
                 .setConfirmName(confirmName)
                 .setConfirmTime(confirmTime)
-                .setExamineStatus(depositManageBean.isExamineResult() ? ExamineStatusEnum.OK.toString() : ExamineStatusEnum.SAVE.toString());
+                .setExamineStatus(depositManageBean.isExamineResult() ? ExamineStatusEnum.OK.toString() : ExamineStatusEnum.SAVE.toString())
+                .setConfirmResult(depositManageBean.isExamineResult());
         // 更新主表
         depositManage.updateById();
 
@@ -597,6 +618,9 @@ public class DepositManageLogic {
                 .eq(adminUser.getIsCustomer(), DepositManage::getCustomerId, adminUser.getCustomerId())
                 .in(CollectionUtil.isNotEmpty(adminUser.getAdminCompanyIds()), DepositManage::getAdminCompanyId, adminUser.getAdminCompanyIds())
                 .one();
+        if (adminUser.getIsCustomer()) {
+            throw new RemoteServiceException("经销商没有权限");
+        }
         if (Objects.isNull(depositManage)) {
             throw new RemoteServiceException("当前押金单审批状态不是”审核通过“,不允许二次退押");
         }
@@ -659,17 +683,40 @@ public class DepositManageLogic {
                 .one();
 
         if (Objects.nonNull(depositManage)) {
-            if (depositManage.getExamineStatus().equals(ExamineStatusEnum.OK.toString())) {
+            if (depositManage.getExamineStatus().equals(ExamineStatusEnum.OK.toString()) && !adminUser.getIsCustomer()) {
                 depositManage.setRealUseUnit(depositManageBean.getRealUseUnit())
                         .setRealInstallAddress(depositManageBean.getRealInstallAddress())
                         .setRefBuyUnitName(depositManageBean.getRefBuyUnitName())
                         .setGeLiInerNote(depositManageBean.getGeLiInerNote())
                         .setGeLiInnerDataNote(depositManageBean.getGeLiInnerDataNote())
                         .setExamineAfterRemark(depositManageBean.getExamineAfterRemark())
+                        .setRemark(depositManageBean.getRemark())
                         .setUpdateBy(CommonUtils.getNickName())
                         .setUpdateName(CommonUtils.getUsername())
                         .setUpdateTime(DateUtil.date());
                 depositManage.updateById();
+                // 更新明细
+                List<DepositManageItem> depositManageItems = depositManageItemService.lambdaQuery()
+                        .eq(DepositManageItem::getParentId, depositManage.getDepositManageId())
+                        .list();
+
+                Map<String, DepositMangeItemBean> beanMap = depositManageBean.getItems().stream()
+                        .collect(Collectors.toMap(v -> v.getMaterialId() + v.getPrice().setScale(6) + v.getRealMaterialId(), Function.identity(), (key1, key2) -> key2));
+
+                for (DepositManageItem depositManageItem : depositManageItems) {
+                    DepositMangeItemBean itemBean = beanMap.get( depositManageItem.getMaterialId() + depositManageItem.getPrice().setScale(6) + depositManageItem.getRealMaterialId());
+                    if (Objects.isNull(itemBean)) {
+                        continue;
+                    }
+                    depositManageItem.setDataQty(itemBean.getDataQty())
+                            .setDiffAmount(itemBean.getDiffAmount())
+                            .setDepositMaterialId(StringUtils.isNotBlank(itemBean.getDepositMaterialId()) ? itemBean.getDepositMaterialId() : depositManageItem.getDepositMaterialId())
+                            .setDepositMaterialName(StringUtils.isNotBlank(itemBean.getDepositMaterialName()) ? itemBean.getDepositMaterialName() : depositManageItem.getDepositMaterialName())
+                            .setDepositMaterialNumber(StringUtils.isNotBlank(itemBean.getDepositMaterialNumber()) ? itemBean.getDepositMaterialNumber() : depositManageItem.getDepositMaterialNumber())
+                            .setDepositMaterialOldNumber(StringUtils.isNotBlank(itemBean.getDepositMaterialOldNumber()) ? itemBean.getDepositMaterialOldNumber() : depositManageItem.getDepositMaterialOldNumber())
+                            .setDepositSpecification(StringUtils.isNotBlank(itemBean.getDepositSpecification()) ? itemBean.getDepositSpecification() : depositManageItem.getDepositSpecification());
+                }
+                depositManageItemService.saveOrUpdateBatch(depositManageItems);
             } else if(depositManage.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())
                     || depositManage.getExamineStatus().equals(ExamineStatusEnum.SAVE.toString()) ) {
                 if (Objects.isNull(depositManageBean.getIsRefundDeposit())) {
@@ -678,24 +725,24 @@ public class DepositManageLogic {
 
                 // 更新主表
                 depositManageService.update(depositManage, new LambdaUpdateWrapper<DepositManage>()
-                        .set(DepositManage::getRefFactoryNo, depositManageBean.getRefFactoryNo())
-                        .set(DepositManage::getSendFactoryDate, depositManageBean.getSendFactoryDate())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getRefFactoryNo, depositManageBean.getRefFactoryNo())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getSendFactoryDate, depositManageBean.getSendFactoryDate())
                         .set(DepositManage::getInstallDate, depositManageBean.getInstallDate())
                         .set(DepositManage::getApplyNote, depositManageBean.getApplyNote())
                         .set(DepositManage::getCheckBy, depositManageBean.getCheckBy())
                         .set(DepositManage::getCheckDate, depositManageBean.getCheckDate())
                         .set(DepositManage::getCheckNote, depositManageBean.getCheckNote())
-                        .set(DepositManage::getIsRefundDeposit, depositManageBean.getIsRefundDeposit())
-                        .set(DepositManage::getRealUseUnit, depositManageBean.getRealUseUnit())
-                        .set(DepositManage::getRealInstallAddress, depositManageBean.getRealInstallAddress())
-                        .set(DepositManage::getRefBuyUnitName, depositManageBean.getRefBuyUnitName())
-                        .set(DepositManage::getGeLiInerNote, depositManageBean.getGeLiInerNote())
-                        .set(DepositManage::getGeLiInnerDataNote, depositManageBean.getGeLiInnerDataNote())
-                        .set(DepositManage::getIsRefundDeposit, depositManageBean.getIsRefundDeposit())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getIsRefundDeposit, depositManageBean.getIsRefundDeposit())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getRealUseUnit, depositManageBean.getRealUseUnit())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getRealInstallAddress, depositManageBean.getRealInstallAddress())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getRefBuyUnitName, depositManageBean.getRefBuyUnitName())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getGeLiInerNote, depositManageBean.getGeLiInerNote())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getGeLiInnerDataNote, depositManageBean.getGeLiInnerDataNote())
+                        .set(!adminUser.getIsCustomer(), DepositManage::getIsRefundDeposit, depositManageBean.getIsRefundDeposit())
+                        .set(DepositManage::getRemark, depositManageBean.getRemark())
                         .set(DepositManage::getUpdateBy, CommonUtils.getUsername())
                         .set(DepositManage::getUpdateName, CommonUtils.getNickName())
                         .eq(DepositManage::getDepositManageId, depositManage.getDepositManageId()));
-
                 // 更新明细
                 List<DepositManageItem> depositManageItems = depositManageItemService.lambdaQuery()
                         .eq(DepositManageItem::getParentId, depositManage.getDepositManageId())
@@ -710,7 +757,12 @@ public class DepositManageLogic {
                         continue;
                     }
                     depositManageItem.setDataQty(itemBean.getDataQty())
-                            .setDiffAmount(itemBean.getDiffAmount());
+                            .setDiffAmount(itemBean.getDiffAmount())
+                            .setDepositMaterialId(StringUtils.isNotBlank(itemBean.getDepositMaterialId()) ? itemBean.getDepositMaterialId() : depositManageItem.getDepositMaterialId())
+                            .setDepositMaterialName(StringUtils.isNotBlank(itemBean.getDepositMaterialName()) ? itemBean.getDepositMaterialName() : depositManageItem.getDepositMaterialName())
+                            .setDepositMaterialNumber(StringUtils.isNotBlank(itemBean.getDepositMaterialNumber()) ? itemBean.getDepositMaterialNumber() : depositManageItem.getDepositMaterialNumber())
+                            .setDepositMaterialOldNumber(StringUtils.isNotBlank(itemBean.getDepositMaterialOldNumber()) ? itemBean.getDepositMaterialOldNumber() : depositManageItem.getDepositMaterialOldNumber())
+                            .setDepositSpecification(StringUtils.isNotBlank(itemBean.getDepositSpecification()) ? itemBean.getDepositSpecification() : depositManageItem.getDepositSpecification());
                 }
                 depositManageItemService.saveOrUpdateBatch(depositManageItems);
             }
@@ -1215,30 +1267,30 @@ public class DepositManageLogic {
     }
 
     public void syncEnginData(DepositManage depositManage) {
-//        List<AgencyBills> sysAgencyBills = enginSysLogic.queryBills(new ArrayList<String>() {{ this.add(depositManage.getRefEnginRecordNo()); }});
-//        if (CollectionUtil.isNotEmpty(sysAgencyBills)) {
-//            AgencyBills agencyBill = sysAgencyBills.get(0);
-//            depositManage.setRefPromiseProvide(Optional.ofNullable(agencyBill.getPromiseProvide()).orElse(0) == 0 ? "未保证" : "已保证")
-//                    .setRefPromiseAcceptStatus(agencyBill.getPromiseAcceptStatus())
-//                    .setRefPromisePriceRemark(agencyBill.getPromisePriceRemark())
-//                    .setRefFollowAcceptRemark(agencyBill.getFollowAcceptRemark())
-//                    .setRefFjShenPiRemark(agencyBill.getFjShenPiRemark())
-//                    .setRefDatumProvide(Optional.ofNullable(agencyBill.getDatumProvide()).orElse(0) == 0 ? "未提供" : "已提供")
-//                    .setRefDatumProvideDate(Objects.nonNull(agencyBill.getDatumProvideDate()) ? DateUtil.date(agencyBill.getDatumProvideDate().getTime()) : null)
-//                    .setRefDatumAcceptStatus(agencyBill.getDatumAcceptStatus())
-//                    .setRefIsBigAmounts(Optional.ofNullable(agencyBill.getIsBigAmount()).orElse(0) == 0 ? "否" : "是")
-//                    .setRefContractResult(agencyBill.getContractResult())
-//                    .setRefContractIdea(agencyBill.getContractIdea())
-//                    .setRefToRetailResult(agencyBill.getToRetailResult())
-//                    .setRefToRetailIdea(agencyBill.getToRetailIdea())
-//                    .setRefDataDelayResult(agencyBill.getDataDelayResult())
-//                    .setRefDataDelayIdea(agencyBill.getDataDelayIdea())
-//                    .setRefOtherAnnexResult(agencyBill.getOtherAnnexResult())
-//                    .setRefOtherAnnexIdea(agencyBill.getOtherAnnexIdea())
-//                    .setRefDatumAcceptDate(agencyBill.getDatumAcceptDate());
-//
-//            depositManage.updateById();
-//        }
+        List<AgencyBills> sysAgencyBills = enginSysLogic.queryBills(new ArrayList<String>() {{ this.add(depositManage.getRefEnginRecordNo()); }});
+        if (CollectionUtil.isNotEmpty(sysAgencyBills)) {
+            AgencyBills agencyBill = sysAgencyBills.get(0);
+            depositManage.setRefPromiseProvide(Optional.ofNullable(agencyBill.getPromiseProvide()).orElse(0) == 0 ? "未保证" : "已保证")
+                    .setRefPromiseAcceptStatus(agencyBill.getPromiseAcceptStatus())
+                    .setRefPromisePriceRemark(agencyBill.getPromisePriceRemark())
+                    .setRefFollowAcceptRemark(agencyBill.getFollowAcceptRemark())
+                    .setRefFjShenPiRemark(agencyBill.getFjShenPiRemark())
+                    .setRefDatumProvide(Optional.ofNullable(agencyBill.getDatumProvide()).orElse(0) == 0 ? "未提供" : "已提供")
+                    .setRefDatumProvideDate(Objects.nonNull(agencyBill.getDatumProvideDate()) ? DateUtil.date(agencyBill.getDatumProvideDate().getTime()) : null)
+                    .setRefDatumAcceptStatus(agencyBill.getDatumAcceptStatus())
+                    .setRefIsBigAmounts(Optional.ofNullable(agencyBill.getIsBigAmount()).orElse(0) == 0 ? "否" : "是")
+                    .setRefContractResult(agencyBill.getContractResult())
+                    .setRefContractIdea(agencyBill.getContractIdea())
+                    .setRefToRetailResult(agencyBill.getToRetailResult())
+                    .setRefToRetailIdea(agencyBill.getToRetailIdea())
+                    .setRefDataDelayResult(agencyBill.getDataDelayResult())
+                    .setRefDataDelayIdea(agencyBill.getDataDelayIdea())
+                    .setRefOtherAnnexResult(agencyBill.getOtherAnnexResult())
+                    .setRefOtherAnnexIdea(agencyBill.getOtherAnnexIdea())
+                    .setRefDatumAcceptDate(agencyBill.getDatumAcceptDate());
+
+            depositManage.updateById();
+        }
 
 //        List<DepositManage> depositManageList = depositManageService.lambdaQuery()
 //                .eq(DepositManage::getEnginOrderType, OrderTypeEnum.HOME.getKey())
@@ -1304,13 +1356,16 @@ public class DepositManageLogic {
     }
 
     public String bachConditionExamineHome(List<String> ids) throws InterruptedException {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
         List<DepositManage> depositManages = depositManageService.lambdaQuery()
                 .eq(DepositManage::getEnginOrderType, OrderTypeEnum.HOME.getKey())
                 .in(DepositManage::getExamineStatus, ExamineStatusEnum.SAVE.toString(), ExamineStatusEnum.WAIT.toString())
                 .in(DepositManage::getDepositManageId, ids.stream().distinct().collect(Collectors.toList()))
 //                .isNotNull(DepositManage::getRefDatumAcceptDate)
                 .list();
-
+        if (adminUser.getIsCustomer()) {
+            throw new RemoteServiceException("经销商没有权限");
+        }
         String confirmBy = CommonUtils.getUsername();
         String confirmName = CommonUtils.getNickName();
         DateTime confirmTime = DateUtil.date();
@@ -1727,6 +1782,9 @@ public class DepositManageLogic {
                 .in(CollectionUtil.isNotEmpty(adminUser.getAdminCompanyIds()), DepositManage::getAdminCompanyId, adminUser.getAdminCompanyIds())
                 .one();
 
+        if (adminUser.getIsCustomer()) {
+            throw new RemoteServiceException("经销商没有权限");
+        }
         if (Objects.isNull(depositManage)) {
             throw new RemoteServiceException("当前单据状态不是“补充资料”,处理失败");
         }

+ 26 - 0
src/main/java/com/zfire/mall/manager/logic/engin/info/EnginInfoOrderLogic.java

@@ -3,6 +3,8 @@ package com.zfire.mall.manager.logic.engin.info;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.EnumUtil;
+import cn.hutool.core.util.ReUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,6 +14,7 @@ import com.zfire.mall.manager.bean.engin.info.EnginInfoOrderBean;
 import com.zfire.mall.manager.bean.engin.info.EnginInfoOrderListBean;
 import com.zfire.mall.manager.bean.engin.info.EnginInfoSaleExecBean;
 import com.zfire.mall.manager.commonmapper.engin.info.EnginInfoOrderReserveMapper;
+import com.zfire.mall.manager.commonmapper.trade.LoginOrderMapper;
 import com.zfire.mall.manager.constant.SysDictConstant;
 import com.zfire.mall.manager.enums.ExamineStatusEnum;
 import com.zfire.mall.manager.exception.RemoteServiceException;
@@ -54,6 +57,10 @@ public class EnginInfoOrderLogic {
     KingDeeMaterialService kingDeeMaterialService;
     @Resource
     EnginOrderItemService enginOrderItemService;
+    @Resource
+    TradeLoginOrderService tradeLoginOrderService;
+    @Resource
+    LoginOrderMapper loginOrderMapper;
 
     public IPage<EnginInfoOrderListBean> listPage(String enginInfoNo, String productCategoryId, String customerKeyword,
                                                   String projectName, String machineType, String useUnit, String installAddress,
@@ -103,6 +110,25 @@ public class EnginInfoOrderLogic {
         enginInfoOrderBean.setEnginInfoNo(commonLogic.generateInfoNo("EIO" ,"enginInfoOrder",12));
         enginInfoOrderBean.setOrderDate(DateUtil.date());
 
+        // 引用登录单号逻辑处理
+        if (!StrUtil.trimToEmpty(enginInfoOrderBean.getProjectNo()).equals("无")
+                && ReUtil.isMatch("^\\d{2}-\\d{5}$", enginInfoOrderBean.getProjectNo())) {
+            boolean isSpan = "跨区登录".equals(enginInfoOrderBean.getEnginSignType());
+            TradeLoginOrder order = loginOrderMapper.syncLoginOrderRefCustomerId(StrUtil.trimToEmpty(enginInfoOrderBean.getProjectNo()), isSpan);
+
+            // 单号为空或引用经销商不匹配时抛错
+//            if (Objects.isNull(order)
+//                    || (StringUtils.isNotBlank(order.getRefCustomerId()) && !order.getRefCustomerId().equals(enginInfoOrderBean.getCustomerId()))) {
+//                throw new RemoteServiceException("引用商用登录单号不存在");
+//            }
+            if (Objects.nonNull(order) && StringUtils.isBlank(order.getRefCustomerId())) {
+                tradeLoginOrderService.lambdaUpdate()
+                        .set(TradeLoginOrder::getRefCustomerId, enginInfoOrderBean.getCustomerId())
+                        .eq(TradeLoginOrder::getId, order.getId())
+                        .update();
+            }
+        }
+
         // 保存主表
         EnginInfoOrder enginInfoOrder = enginInfoOrderBean.handleTargetInfo(adminUser);
         enginInfoOrder.insert();

Some files were not shown because too many files changed in this diff