浏览代码

Merge remote-tracking branch 'origin/master'

xian 5 年之前
父节点
当前提交
bcc8d7f6cf
共有 86 个文件被更改,包括 4086 次插入430 次删除
  1. 69 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/PostageInfo.java
  2. 10 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java
  3. 18 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrderItem.java
  4. 11 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/StoreInfo.java
  5. 78 4
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/ClaimOrder.java
  6. 72 8
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerChannel.java
  7. 51 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerChannelStore.java
  8. 23 3
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerProduct.java
  9. 46 4
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerProductStore.java
  10. 10 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DmDealer.java
  11. 11 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/dm/FinancialReceipt.java
  12. 10 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/fm/ComplaintDetectInfo.java
  13. 125 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/fm/DetectStatistics.java
  14. 9 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/fm/SignclosedProductInfo.java
  15. 19 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/ProductColor.java
  16. 6 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/StoreInfoService.java
  17. 32 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/DealerChannelStoreService.java
  18. 6 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/DealerProductService.java
  19. 6 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/DmDealerService.java
  20. 11 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/FinancialReceiptService.java
  21. 55 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/fm/DetectStatisticService.java
  22. 47 6
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java
  23. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/StoreInfoServiceImpl.java
  24. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java
  25. 8 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/StoreInfoMapper.java
  26. 72 3
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml
  27. 35 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/storeInfoMapper.xml
  28. 48 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/DealerChannelStoreServiceImpl.java
  29. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/DealerProductServiceImpl.java
  30. 118 20
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/DmDealerServiceImpl.java
  31. 9 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/FinancialReceiptServiceImpl.java
  32. 8 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerChannelMapper.java
  33. 37 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerChannelStoreMapper.java
  34. 3 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerProductMapper.java
  35. 6 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerProductStoreMapper.java
  36. 6 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DmDealerMapper.java
  37. 8 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/FinancialReceiptMapper.java
  38. 6 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/SupplierProductMapper.java
  39. 3 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/claimOrderMapper.xml
  40. 35 3
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerChannelMapper.xml
  41. 60 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerChannelStoreMapper.xml
  42. 38 2
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerProductMapper.xml
  43. 26 10
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerProductStoreMapper.xml
  44. 13 3
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dmDealerMapper.xml
  45. 51 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/financialReceiptMapper.xml
  46. 8 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/supplierProductMapper.xml
  47. 54 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/fm/DetectStatisticServiceImpl.java
  48. 53 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/fm/mapper/DetectStatisticMapper.java
  49. 3 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/fm/mapper/complaintSignclosedInfoMapper.xml
  50. 183 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/fm/mapper/detectStatisticMapper.xml
  51. 6 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/productMapper.xml
  52. 145 8
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminDetectController.java
  53. 17 16
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminSignclosedController.java
  54. 2 32
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/detectController.java
  55. 80 8
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/dm/DmDealerController.java
  56. 147 45
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/dm/FinanciaReceController.java
  57. 132 19
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderController.java
  58. 98 6
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java
  59. 1 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java
  60. 165 38
      watero-rst-web/src/main/java/com/iamberry/rst/utils/ExcelUtil.java
  61. 6 12
      watero-rst-web/src/main/resources/watero-rst-orm.xml
  62. 6 4
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/update_relation.ftl
  63. 428 0
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/detect_statistics.ftl
  64. 215 0
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/detect_statistics_config.ftl
  65. 11 9
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/add_dealer.ftl
  66. 78 5
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/add_dealer_channel.ftl
  67. 9 5
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/add_dealer_product.ftl
  68. 40 1
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/dealer_list.ftl
  69. 9 3
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/update_dealer.ftl
  70. 66 15
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/claim_delaer.ftl
  71. 32 10
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/fr_list.ftl
  72. 165 15
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/order_desc.ftl
  73. 30 26
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/select_order_list.ftl
  74. 350 0
      watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/select_post_list.ftl
  75. 1 1
      watero-rst-web/src/main/webapp/WEB-INF/views/home/pc_index.ftl
  76. 17 22
      watero-rst-web/src/main/webapp/WEB-INF/views/order/excel_to_order_new.ftl
  77. 19 7
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/add_order.ftl
  78. 17 11
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_detail.ftl
  79. 1 1
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_list.ftl
  80. 15 8
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/update_order.ftl
  81. 1 0
      watero-rst-web/src/main/webapp/WEB-INF/views/product/add_product.ftl
  82. 2 0
      watero-rst-web/src/main/webapp/WEB-INF/views/product/update_product.ftl
  83. 6 0
      watero-rst-web/src/main/webapp/common/js/common/common.js
  84. 37 29
      watero-rst-web/src/main/webapp/common/js/dealer/dealer.js
  85. 4 0
      watero-rst-web/src/main/webapp/common/js/product/product.js
  86. 97 6
      watero-rst-web/src/main/webapp/common/js/salesOrder/salesOrder.js

+ 69 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/PostageInfo.java

@@ -1,5 +1,8 @@
 package com.iamberry.rst.core.cm;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -19,6 +22,24 @@ public class PostageInfo implements Serializable{
     private Date postageCreateTime;//创建时间
     private Date postageUpdateTime;//修改时间
 
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date startDate;                 //开始时间
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date endDate;                   //结束时间
+    //客诉基本信息主键
+    private Integer customerId;
+    //店铺主键
+    private Integer storeId;
+    //客户id
+    private Integer dealerId;
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date customerCreateTime;           //创建时间
+
+
     public Integer getPostageId() {
         return postageId;
     }
@@ -98,4 +119,52 @@ public class PostageInfo implements Serializable{
     public void setPostageAlipayType(Integer postageAlipayType) {
         this.postageAlipayType = postageAlipayType;
     }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public Integer getCustomerId() {
+        return customerId;
+    }
+
+    public void setCustomerId(Integer customerId) {
+        this.customerId = customerId;
+    }
+
+    public Integer getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    public Integer getDealerId() {
+        return dealerId;
+    }
+
+    public void setDealerId(Integer dealerId) {
+        this.dealerId = dealerId;
+    }
+
+    public Date getCustomerCreateTime() {
+        return customerCreateTime;
+    }
+
+    public void setCustomerCreateTime(Date customerCreateTime) {
+        this.customerCreateTime = customerCreateTime;
+    }
 }

+ 10 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java

@@ -152,6 +152,8 @@ public class SalesOrder implements Serializable {
     private Integer outbound;//待出库数量
     private String salesPostFirmName;//快递公司名称
 
+    private Integer dealerId;//待打单数量
+
     private List<ComplaintDetectInfo> complaintDetectInfoList;
     public Integer getSalesOldOrderStatus() {
         return salesOldOrderStatus;
@@ -903,4 +905,12 @@ public class SalesOrder implements Serializable {
     public void setSalesAddressPostcode(String salesAddressPostcode) {
         this.salesAddressPostcode = salesAddressPostcode;
     }
+
+    public Integer getDealerId() {
+        return dealerId;
+    }
+
+    public void setDealerId(Integer dealerId) {
+        this.dealerId = dealerId;
+    }
 }

+ 18 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrderItem.java

@@ -23,6 +23,8 @@ public class SalesOrderItem implements Serializable {
     private Integer itemProductPrice;   //产品市场价
     private Integer itemProductDiscount;//产品折扣价
     private Integer itemTotal;//小结
+    private Integer itemCost;//单个成本
+    private Integer itemCostTotal;//成本小结
     private Date itemCreateTime;        //创建时间
     private Integer itemIsSource;       //产品来源 1:产品颜色表,2:配件表
 
@@ -212,4 +214,20 @@ public class SalesOrderItem implements Serializable {
     public void setItemTotal(Integer itemTotal) {
         this.itemTotal = itemTotal;
     }
+
+    public Integer getItemCost() {
+        return itemCost;
+    }
+
+    public void setItemCost(Integer itemCost) {
+        this.itemCost = itemCost;
+    }
+
+    public Integer getItemCostTotal() {
+        return itemCostTotal;
+    }
+
+    public void setItemCostTotal(Integer itemCostTotal) {
+        this.itemCostTotal = itemCostTotal;
+    }
 }

+ 11 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/StoreInfo.java

@@ -30,6 +30,9 @@ public class StoreInfo implements Serializable {
     //发货人地址
     private String storeShipAddress;
 
+    //客户id
+    private Integer dealerId;
+
     public CompanyInfo getCompanyInfo() {
         return companyInfo;
     }
@@ -133,4 +136,12 @@ public class StoreInfo implements Serializable {
     public void setStoreShipAddress(String storeShipAddress) {
         this.storeShipAddress = storeShipAddress;
     }
+
+    public Integer getDealerId() {
+        return dealerId;
+    }
+
+    public void setDealerId(Integer dealerId) {
+        this.dealerId = dealerId;
+    }
 }

+ 78 - 4
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/ClaimOrder.java

@@ -17,13 +17,13 @@ public class ClaimOrder  implements  Serializable{
     private Integer claimOrderId;
     //财务收款id
     private Integer frId;
-    //订单项表
+    //订单项表/邮费id
     private Integer itemId;
-    //供应价格
+    //供应价格/退货邮费费用
     private Integer frPrice;
-    //类型 1:正常 2:退货
+    //类型 1:正常 2:退货 3:退货邮费
     private Integer claimOrderType;
-    //产品数量 当类型为退货时,为退货数量
+    //产品数量 当类型为退货时,为退货数量  (当 claimOrderType为3时退货邮费 默认为1)
     private Integer claimOrderNum;
 
 
@@ -57,6 +57,16 @@ public class ClaimOrder  implements  Serializable{
     private String salesAddressInfo;        //详细地址
 
 
+    private Integer postageId;//
+    private Integer relationId;//处理方式id
+    private Integer postageStatus;//状态
+    private Integer postageAmount;//邮费金额
+    private String postageAlipay;//支付宝账户
+    private String postageAlipayName;//支付宝姓名
+    private Integer postageAlipayType;//转账类型  1:用户付款  2:客户付款  3:公司付款
+    private String postageDesc;//备注
+
+
     public Integer getClaimOrderId(){
         return claimOrderId;
     }
@@ -304,4 +314,68 @@ public class ClaimOrder  implements  Serializable{
     public void setFrPrice(Integer frPrice) {
         this.frPrice = frPrice;
     }
+
+    public Integer getPostageId() {
+        return postageId;
+    }
+
+    public void setPostageId(Integer postageId) {
+        this.postageId = postageId;
+    }
+
+    public Integer getRelationId() {
+        return relationId;
+    }
+
+    public void setRelationId(Integer relationId) {
+        this.relationId = relationId;
+    }
+
+    public Integer getPostageStatus() {
+        return postageStatus;
+    }
+
+    public void setPostageStatus(Integer postageStatus) {
+        this.postageStatus = postageStatus;
+    }
+
+    public Integer getPostageAmount() {
+        return postageAmount;
+    }
+
+    public void setPostageAmount(Integer postageAmount) {
+        this.postageAmount = postageAmount;
+    }
+
+    public String getPostageAlipay() {
+        return postageAlipay;
+    }
+
+    public void setPostageAlipay(String postageAlipay) {
+        this.postageAlipay = postageAlipay;
+    }
+
+    public String getPostageAlipayName() {
+        return postageAlipayName;
+    }
+
+    public void setPostageAlipayName(String postageAlipayName) {
+        this.postageAlipayName = postageAlipayName;
+    }
+
+    public Integer getPostageAlipayType() {
+        return postageAlipayType;
+    }
+
+    public void setPostageAlipayType(Integer postageAlipayType) {
+        this.postageAlipayType = postageAlipayType;
+    }
+
+    public String getPostageDesc() {
+        return postageDesc;
+    }
+
+    public void setPostageDesc(String postageDesc) {
+        this.postageDesc = postageDesc;
+    }
 }

+ 72 - 8
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerChannel.java

@@ -1,6 +1,10 @@
 package com.iamberry.rst.core.dm;
-import  java.util.Date;
-import  java.io.Serializable;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 /**
  *  客户渠道信息类
  * @author Administrator
@@ -10,29 +14,41 @@ public class DealerChannel  implements  Serializable{
     private static final long serialVersionUID = -7317583076068205788L;
     //
     private Integer dealChannelId;
+    //渠道名称
+    private String dealChannelName;
     //客户id
     private Integer dealerId;
     //渠道id
     private Integer channelId;
-    //店铺id
-    private Integer storeId;
     //账期
     private String dealChannelAccountPeriod;
     //创建时间'
     private Date createDate;
-
     //渠道大类id
     private Integer channelTypeId;
-
     //渠道类型名称
     private String channelName;
     //渠道大类
     private String channelTypeName;
-    //店铺名称
-    private String storeName;
+    //客户名称
+    private String dealerName;
+    //是否自营 1:自营 2:非自营
+    private Integer dealerSelfOperated;
     //
     private String dealChannelIdStr;
 
+    private List<DealerChannelStore> dealerChannelStoreList = new ArrayList<>();
+
+    //店铺id
+    private Integer storeId;
+    //店铺名称
+    private String storeName;
+
+    //店铺id
+    private String storeIdStr;
+    //店铺名称
+    private String storeNameStr;
+
     public Integer getDealChannelId(){
         return dealChannelId;
     }
@@ -120,4 +136,52 @@ public class DealerChannel  implements  Serializable{
     public void setDealChannelIdStr(String dealChannelIdStr) {
         this.dealChannelIdStr = dealChannelIdStr;
     }
+
+    public String getDealerName() {
+        return dealerName;
+    }
+
+    public void setDealerName(String dealerName) {
+        this.dealerName = dealerName;
+    }
+
+    public Integer getDealerSelfOperated() {
+        return dealerSelfOperated;
+    }
+
+    public void setDealerSelfOperated(Integer dealerSelfOperated) {
+        this.dealerSelfOperated = dealerSelfOperated;
+    }
+
+    public String getDealChannelName() {
+        return dealChannelName;
+    }
+
+    public void setDealChannelName(String dealChannelName) {
+        this.dealChannelName = dealChannelName;
+    }
+
+    public String getStoreIdStr() {
+        return storeIdStr;
+    }
+
+    public void setStoreIdStr(String storeIdStr) {
+        this.storeIdStr = storeIdStr;
+    }
+
+    public String getStoreNameStr() {
+        return storeNameStr;
+    }
+
+    public void setStoreNameStr(String storeNameStr) {
+        this.storeNameStr = storeNameStr;
+    }
+
+    public List<DealerChannelStore> getDealerChannelStoreList() {
+        return dealerChannelStoreList;
+    }
+
+    public void setDealerChannelStoreList(List<DealerChannelStore> dealerChannelStoreList) {
+        this.dealerChannelStoreList = dealerChannelStoreList;
+    }
 }

+ 51 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerChannelStore.java

@@ -0,0 +1,51 @@
+package com.iamberry.rst.core.dm;
+
+import  java.io.Serializable;
+/**
+ * 渠道关联店铺
+ * @author xm
+ * @Date 2019-08-27
+ */
+public class DealerChannelStore  implements  Serializable{
+    private static final long serialVersionUID = 6149228198672016876L;
+    //
+    private Integer dcsId;
+    //渠道信息id
+    private Integer dealChannelId;
+    //店铺id
+    private Integer storeId;
+    //店铺名称
+    private String storeName;
+
+    public Integer getDcsId(){
+        return dcsId;
+    }
+
+    public void setDcsId(Integer  dcsId){
+        this.dcsId=dcsId;
+    }
+
+    public Integer getDealChannelId(){
+        return dealChannelId;
+    }
+
+    public void setDealChannelId(Integer  dealChannelId){
+        this.dealChannelId=dealChannelId;
+    }
+
+    public Integer getStoreId(){
+        return storeId;
+    }
+
+    public void setStoreId(Integer  storeId){
+        this.storeId=storeId;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+}

+ 23 - 3
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerProduct.java

@@ -20,7 +20,7 @@ public class DealerProduct  implements  Serializable{
     private Integer colorProductId;
     //颜色id
     private Integer colorId;
-    //店铺范围 1:全部店铺  2:部分店铺
+    //店铺范围 1:全部渠道  2:部分渠道
     private Integer dealProdStoreArea;
     //供应价格
     private Integer dealProdPrice;
@@ -34,10 +34,14 @@ public class DealerProduct  implements  Serializable{
 
     //
     private String dealProdIdStr;
+    //颜色sku
+    private String colorBar;
+    //颜色sku
+    private Integer dealChannelId;
 
-    //客户产品关联店铺id拼接值
+    //客户产品关联渠道
     private String dealerProductStoreIds;
-    //客户产品关联店铺id拼接值
+    //客户产品关联渠道
     private String dealerProductStoreName;
     //客户产品关联店铺集合
     private List<DealerProductStore> dealerProductStoreList = new ArrayList<>();
@@ -145,4 +149,20 @@ public class DealerProduct  implements  Serializable{
     public void setDealerProductStoreName(String dealerProductStoreName) {
         this.dealerProductStoreName = dealerProductStoreName;
     }
+
+    public String getColorBar() {
+        return colorBar;
+    }
+
+    public void setColorBar(String colorBar) {
+        this.colorBar = colorBar;
+    }
+
+    public Integer getDealChannelId() {
+        return dealChannelId;
+    }
+
+    public void setDealChannelId(Integer dealChannelId) {
+        this.dealChannelId = dealChannelId;
+    }
 }

+ 46 - 4
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DealerProductStore.java

@@ -12,13 +12,23 @@ public class DealerProductStore  implements  Serializable{
     private Integer productStoreId;
     //客户产品供应id
     private Integer dealProdId;
-    //店铺id'
-    private Integer storeId;
-    //店铺id'
-    private String storeName;
+    //销售渠道id
+    private Integer dealChannelId;
+    //销售渠道name
+    private String dealChannelName;
+    //销售渠道id
+    private String dealChannelIdStr;
     //在添加页面的状态 1:选中  2:未选中
     private Integer productStoreIsSelect;
 
+    //店铺id
+    private Integer storeId;
+    //店铺name
+    private String storeName;
+
+    //客户id
+    private Integer dealerId;
+
     public Integer getProductStoreId(){
         return productStoreId;
     }
@@ -58,4 +68,36 @@ public class DealerProductStore  implements  Serializable{
     public void setStoreName(String storeName) {
         this.storeName = storeName;
     }
+
+    public Integer getDealChannelId() {
+        return dealChannelId;
+    }
+
+    public void setDealChannelId(Integer dealChannelId) {
+        this.dealChannelId = dealChannelId;
+    }
+
+    public String getDealChannelIdStr() {
+        return dealChannelIdStr;
+    }
+
+    public void setDealChannelIdStr(String dealChannelIdStr) {
+        this.dealChannelIdStr = dealChannelIdStr;
+    }
+
+    public String getDealChannelName() {
+        return dealChannelName;
+    }
+
+    public void setDealChannelName(String dealChannelName) {
+        this.dealChannelName = dealChannelName;
+    }
+
+    public Integer getDealerId() {
+        return dealerId;
+    }
+
+    public void setDealerId(Integer dealerId) {
+        this.dealerId = dealerId;
+    }
 }

+ 10 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/DmDealer.java

@@ -45,6 +45,8 @@ public class DmDealer  implements  Serializable{
     private Date coopAgreeBeforeDate;
     //合同结束日期
     private Date coopAgreeEndDate;
+    //店铺名称
+    private String storeName;
 
     //对接人
     private List<DealerContact> dealerContactList = new ArrayList<>();
@@ -214,4 +216,12 @@ public class DmDealer  implements  Serializable{
     public void setCoopAgreeEndDate(Date coopAgreeEndDate) {
         this.coopAgreeEndDate = coopAgreeEndDate;
     }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
 }

+ 11 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/dm/FinancialReceipt.java

@@ -45,6 +45,9 @@ public class FinancialReceipt  implements  Serializable{
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     private Date createDate;
 
+    //客户跟进管理id
+    private Integer dealerAdminId;
+
     public Integer getFrId(){
         return frId;
     }
@@ -148,4 +151,12 @@ public class FinancialReceipt  implements  Serializable{
     public void setDealerName(String dealerName) {
         this.dealerName = dealerName;
     }
+
+    public Integer getDealerAdminId() {
+        return dealerAdminId;
+    }
+
+    public void setDealerAdminId(Integer dealerAdminId) {
+        this.dealerAdminId = dealerAdminId;
+    }
 }

+ 10 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/fm/ComplaintDetectInfo.java

@@ -140,6 +140,8 @@ public class ComplaintDetectInfo implements Serializable {
     private Integer detectIsDownload;
     private String signclosedCustomerDesc;//签收客服备注
 
+    private Integer countNum;//数量
+
     public String getQuestionName() {
         return questionName;
     }
@@ -898,4 +900,12 @@ public class ComplaintDetectInfo implements Serializable {
     public void setSignclosedCustomerDesc(String signclosedCustomerDesc) {
         this.signclosedCustomerDesc = signclosedCustomerDesc;
     }
+
+    public Integer getCountNum() {
+        return countNum;
+    }
+
+    public void setCountNum(Integer countNum) {
+        this.countNum = countNum;
+    }
 }

+ 125 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/fm/DetectStatistics.java

@@ -0,0 +1,125 @@
+package com.iamberry.rst.core.fm;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class DetectStatistics implements Serializable {
+    private static final long serialVersionUID = -917161067185690800L;
+
+    //维修主键
+    private Integer detectId;
+    //生产年份
+    private String detectProduction;
+    //创建时间
+    private Date detectCreateTime;
+    //配置ID
+    private Integer configId;
+    //配置ID
+    private Integer configNumber;
+    //类型 检测类别1工厂检测现象2. 故障原因3. 判定结果4. 故障指向5. 原因分析
+    private Integer configType;
+
+    //配置属性名称
+    private String configDetectContent;
+
+    private String beginTime;                 //开始时间
+    private String endTime;                   //结束时间
+
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date startDate;                 //开始时间
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date endDate;                   //结束时间
+
+    public Integer getDetectId() {
+        return detectId;
+    }
+
+    public void setDetectId(Integer detectId) {
+        this.detectId = detectId;
+    }
+
+    public String getDetectProduction() {
+        return detectProduction;
+    }
+
+    public void setDetectProduction(String detectProduction) {
+        this.detectProduction = detectProduction;
+    }
+
+    public Date getDetectCreateTime() {
+        return detectCreateTime;
+    }
+
+    public void setDetectCreateTime(Date detectCreateTime) {
+        this.detectCreateTime = detectCreateTime;
+    }
+
+    public Integer getConfigId() {
+        return configId;
+    }
+
+    public void setConfigId(Integer configId) {
+        this.configId = configId;
+    }
+
+    public Integer getConfigNumber() {
+        return configNumber;
+    }
+
+    public void setConfigNumber(Integer configNumber) {
+        this.configNumber = configNumber;
+    }
+
+    public Integer getConfigType() {
+        return configType;
+    }
+
+    public void setConfigType(Integer configType) {
+        this.configType = configType;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getBeginTime() {
+        return beginTime;
+    }
+
+    public void setBeginTime(String beginTime) {
+        this.beginTime = beginTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getConfigDetectContent() {
+        return configDetectContent;
+    }
+
+    public void setConfigDetectContent(String configDetectContent) {
+        this.configDetectContent = configDetectContent;
+    }
+}

+ 9 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/fm/SignclosedProductInfo.java

@@ -26,6 +26,7 @@ public class SignclosedProductInfo implements Serializable {
     private String productNumber;//产品型号
     private String colorBar;//产品sku
     private Integer colorPrice;//产品价格
+    private String signclosedLogisticsNumber;//物流单号
 
     public Integer getProductId() {
         return productId;
@@ -146,4 +147,12 @@ public class SignclosedProductInfo implements Serializable {
     public void setColorBar(String colorBar) {
         this.colorBar = colorBar;
     }
+
+    public String getSignclosedLogisticsNumber() {
+        return signclosedLogisticsNumber;
+    }
+
+    public void setSignclosedLogisticsNumber(String signclosedLogisticsNumber) {
+        this.signclosedLogisticsNumber = signclosedLogisticsNumber;
+    }
 }

+ 19 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/ProductColor.java

@@ -57,6 +57,9 @@ public class ProductColor implements Serializable {
 
     private Integer isUpdate;        //是否修改过   1:修改过   2:未曾修改
 
+    private String colorIds;       //颜色id
+    private String[] colorIdStr;       //颜色id
+
     public String getProductName() {
         return productName;
     }
@@ -225,6 +228,22 @@ public class ProductColor implements Serializable {
         this.isUpdate = isUpdate;
     }
 
+    public String getColorIds() {
+        return colorIds;
+    }
+
+    public void setColorIds(String colorIds) {
+        this.colorIds = colorIds;
+    }
+
+    public String[] getColorIdStr() {
+        return colorIdStr;
+    }
+
+    public void setColorIdStr(String[] colorIdStr) {
+        this.colorIdStr = colorIdStr;
+    }
+
     @Override
     public String toString() {
         return "ProductColor{" +

+ 6 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/StoreInfoService.java

@@ -15,6 +15,12 @@ public interface StoreInfoService {
      * @return
      */
     List<StoreInfo> listStore(StoreInfo storeInfo);
+    /**
+     * 根据条件查询店铺信息
+     * @param storeInfo
+     * @return
+     */
+    List<StoreInfo> listStoreByDealer(StoreInfo storeInfo);
 
     /**
      * 根据id查询店铺信息

+ 32 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/DealerChannelStoreService.java

@@ -0,0 +1,32 @@
+package com.iamberry.rst.faces.dm;
+
+import com.iamberry.rst.core.dm.DealerChannelStore;
+
+import java.util.List;
+
+/**
+ *  渠道关联店铺接口
+ * @author xm
+ * @Date 2019-08-27
+ */
+public interface DealerChannelStoreService {
+    /**
+     * 获取集合
+     * @param  dealerChannelStore
+     * @return List
+     */
+    List<DealerChannelStore> getDealerChannelStoreList(DealerChannelStore  dealerChannelStore);
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  dealerChannelStore
+     */
+    DealerChannelStore  getDealerChannelStoreById(Integer  id);
+
+    /**
+     * 增加数据 <集合>
+     * @param  dealerChannelStoreList
+     * @return Integer
+     */
+    Integer  saveList(List<DealerChannelStore>  dealerChannelStoreList);
+}

+ 6 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/DealerProductService.java

@@ -23,6 +23,12 @@ public interface DealerProductService {
      */
     List<DealerProduct> getDealerProductAndStoreList(DealerProduct  dealerProduct);
     /**
+     * 只查询该客户下面某个渠道的所有产品
+     * @param  dealerProduct
+     * @return List
+     */
+    List<DealerProduct> getProductByChannelList(DealerProduct  dealerProduct);
+    /**
      * 查询单条数据
      * @param  id
      * @return  dealerProduct

+ 6 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/DmDealerService.java

@@ -54,5 +54,11 @@ public interface DmDealerService {
      * @return Integer
      */
     Integer  updateDmDealer(DmDealer  dmDealer);
+    /**
+     * 修改数据
+     * @param  dmDealer
+     * @return Integer
+     */
+    Integer  deleteDealer(Integer  dealerId);
 
 }

+ 11 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/dm/FinancialReceiptService.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.faces.dm;
 
+import com.iamberry.rst.core.cm.PostageInfo;
 import com.iamberry.rst.core.dm.FinancialReceipt;
 import com.iamberry.rst.core.page.PageRequest;
 import com.iamberry.rst.core.page.PagedResult;
@@ -18,6 +19,7 @@ public interface FinancialReceiptService {
      * @return List
      */
     List<FinancialReceipt> getFinancialReceiptList(FinancialReceipt  financialReceipt);
+
     /**
      * 获取集合
      * @param  pageRequest
@@ -48,4 +50,13 @@ public interface FinancialReceiptService {
      * @return Integer
      */
     Integer  delete(Integer  id);
+
+    /**
+     * 获取集合
+     * @param  pageRequest
+     * @return List
+     */
+    PagedResult<PostageInfo> getPostageInfoList(PageRequest<PostageInfo> pageRequest);
+
+
 }

+ 55 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/fm/DetectStatisticService.java

@@ -0,0 +1,55 @@
+package com.iamberry.rst.faces.fm;
+
+import com.iamberry.rst.core.fm.ComplaintDetectInfo;
+import com.iamberry.rst.core.fm.DetectStatistics;
+import com.iamberry.rst.core.fm.DetectionConfig;
+
+import java.util.List;
+
+public interface DetectStatisticService {
+
+    /**
+     * 获取本月全部故障机器所对应的生产日期的月份与数量
+     * @return
+     */
+    List<ComplaintDetectInfo> getAllMalfunctionByMonth();
+
+    /**
+     * 获取固定生产时间类的,某个类型的检测的所有配置数据
+     * @return
+     */
+    List<DetectStatistics> getDetectConfigList(DetectStatistics detectStatistics);
+
+    /**
+     * 获取固定生产时间类的,某个类型的检测的所有生产日期
+     * @return
+     */
+    List<DetectStatistics> getDetectProductionList(DetectStatistics detectStatistics);
+
+    /**
+     * 获取固定生产时间类的,某个类型的检测的所有条目
+     * @return
+     */
+    List<DetectStatistics> getDetectList(DetectStatistics detectStatistics);
+
+    /**
+     * 根据类型查询所有的配置数据
+     * @return
+     */
+    List<DetectionConfig> getDetectConfigByTypeList(DetectionConfig detectionConfig);
+
+    /**
+     * 获取所有的返厂日期
+     * @param detectStatistics
+     * @return
+     */
+    List<DetectStatistics> getCreatTimeByConfigIdList(DetectStatistics detectStatistics);
+
+    /**
+     * 依据某个configId , 返厂日期与出厂日期对应的机器的台数
+     * @param detectStatistics
+     * @return
+     */
+    List<DetectStatistics> getDetectAllByConfigIdList(DetectStatistics detectStatistics);
+
+}

+ 47 - 6
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -5,6 +5,7 @@ import com.iamberry.redis.RedisUtils;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
 import com.iamberry.rst.core.cm.StoreInfo;
+import com.iamberry.rst.core.dm.SupplierProduct;
 import com.iamberry.rst.core.fm.ComplaintDetectInfo;
 import com.iamberry.rst.core.fm.InventoryInfo;
 import com.iamberry.rst.core.fm.InventoryLog;
@@ -21,6 +22,7 @@ import com.iamberry.rst.faces.order.EfastOrderService;
 import com.iamberry.rst.faces.order.OrderWarehouseService;
 import com.iamberry.rst.faces.product.ProductService;
 import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
+import com.iamberry.rst.service.dm.mapper.SupplierProductMapper;
 import com.iamberry.rst.service.fm.mapper.ComplaintDetectInfoMapper;
 import com.iamberry.rst.service.fm.mapper.InventoryLogMapper;
 import com.iamberry.rst.service.fm.mapper.InventoryMapper;
@@ -78,6 +80,8 @@ public class SalesOrderServiceImpl implements SalesOrderService {
     private OrderWarehouseService orderWarehouseService;
     @Autowired
     private InventoryService inventoryService;
+    @Autowired
+    private SupplierProductMapper supplierProductMapper;
 
     @Override
     public Integer addSalesOrder(SalesOrder salesOrder) {
@@ -104,6 +108,33 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         if (res == null || res <= 0) {
             return 0;
         }
+
+        //确认订单需要填入产品成本价格
+        if(salesOrder.getSalesStatus() != null && salesOrder.getSalesStatus() == 1){
+            SalesOrderItem salesOrderItem = new SalesOrderItem();
+            salesOrderItem.setItemOrderId(salesOrder.getSalesId());
+            List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
+            List<SalesOrderItem> newSalesOrderItem = new ArrayList<>();
+            for (SalesOrderItem soi:salesOrderItemList) {
+                SupplierProduct supplierProduct = supplierProductMapper.getSupplierProductByColorId(soi.getItemColorId());
+                if(supplierProduct != null){
+                    SalesOrderItem newSalesOrder = new SalesOrderItem();
+                    newSalesOrder.setItemCost(supplierProduct.getSpCost());
+                    newSalesOrder.setItemCostTotal(supplierProduct.getSpCost() * soi.getItemNum());
+                    newSalesOrder.setItemId(soi.getItemId());
+                    newSalesOrderItem.add(newSalesOrder);
+                }else{
+                    throw  new RuntimeException("确认订单失败-未查询到该产品("+ soi.getItemProductName() +"-"+ soi.getItemProductColor() +")的成本价格");
+                }
+            }
+            for (SalesOrderItem soi : newSalesOrderItem) {
+                Integer flag = salesOrderMapper.updateOrderItemObj(soi);
+                if(flag < 1){
+                    throw  new RuntimeException("确认订单失败-修改产品项的成本价格失败");
+                }
+            }
+        }
+
         // 作废订单时需要返还库存
         if(salesOrder.getSalesStatus() != null && salesOrder.getSalesStatus() == 3){
             // 如果已出库则返还库存
@@ -1060,12 +1091,12 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         *  添加订单
         */
         if(saleId == null ){
-            throw  new RuntimeException("确认订单-订单id异常!");
+            throw  new RuntimeException("确认订单失败-订单id异常!");
         }
 
         SalesOrder salesOrder = salesOrderMapper.getSalesOrderById(saleId);
         if(salesOrder == null){
-            throw  new RuntimeException("确认订单-订单异常!");
+            throw  new RuntimeException("确认订单失败-订单异常!");
         }
 
         Integer flag = 0;
@@ -1073,25 +1104,35 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         salesOrderItem.setItemOrderId(salesOrder.getSalesId());
         List<SalesOrderItem> salesOrderItemList = salesOrderMapper.listSalesOrderItem(salesOrderItem);
         if(salesOrderItemList == null || salesOrderItemList.size()<1){
-            throw  new RuntimeException("确认订单-查询订单项失败!");
+            throw  new RuntimeException("确认订单失败-查询订单项失败!");
         }
         salesOrder.setSalesOrderItemList(salesOrderItemList);
 
         flag = salesOrderMapper.delOrderById(salesOrder.getSalesId());
         if(flag < 1){
-            throw  new RuntimeException("确认订单-删除订单失败!");
+            throw  new RuntimeException("确认订单失败-删除订单失败!");
         }
 
         flag = salesOrderMapper.delOrderItem(salesOrder.getSalesId());
         if(flag < 1){
-            throw  new RuntimeException("确认订单-删除订单项失败!");
+            throw  new RuntimeException("确认订单失败-删除订单项失败!");
+        }
+
+        for (SalesOrderItem soi:salesOrder.getSalesOrderItemList()) {
+            SupplierProduct supplierProduct = supplierProductMapper.getSupplierProductByColorId(soi.getItemColorId());
+            if(supplierProduct != null){
+                soi.setItemCost(supplierProduct.getSpCost());
+                soi.setItemCostTotal(supplierProduct.getSpCost() * soi.getItemNum());
+            }else{
+                throw  new RuntimeException("确认订单失败-未查询到该产品("+ soi.getItemProductName() +"-"+ soi.getItemProductColor() +")的成本价格");
+            }
         }
 
         //1:确认 状态
         salesOrder.setSalesStatus(1);
         boolean fl = salesOrderService.addRstOrderAndIteminfo(salesOrder);
         if(!fl){
-            throw  new RuntimeException("确认订单-添加订单失败!");
+            throw  new RuntimeException("确认订单失败-添加订单失败!");
         }
         return flag;
     }

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/StoreInfoServiceImpl.java

@@ -28,6 +28,11 @@ public class StoreInfoServiceImpl implements StoreInfoService {
     }
 
     @Override
+    public List<StoreInfo> listStoreByDealer(StoreInfo storeInfo) {
+        return storeInfoMapper.listStoreByDealer(storeInfo);
+    }
+
+    @Override
     public StoreInfo getStoreInfoById(Integer storeEfast) {
         return storeInfoMapper.getStoreInfoById(storeEfast);
     }

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java

@@ -138,6 +138,11 @@ public interface SalesOrderMapper {
     Integer updateOrderItem(SalesOrderItem salesOrderItem);
 
     /**
+     * 修改订单项
+     */
+    Integer updateOrderItemObj(SalesOrderItem salesOrderItem);
+
+    /**
      * 根据外部订单号查询订单信息
      * **/
     SalesOrder getSalesOrderByLogistics(SalesOrder salesOrder);

+ 8 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/StoreInfoMapper.java

@@ -40,4 +40,12 @@ public interface StoreInfoMapper {
      * @return
      */
     List<StoreInfo> listStore(StoreInfo storeInfo);
+
+
+    /**
+     * 根据条件查询店铺信息
+     * @param storeInfo
+     * @return
+     */
+    List<StoreInfo> listStoreByDealer(StoreInfo storeInfo);
 }

+ 72 - 3
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -486,6 +486,8 @@
             item_product_discount,
             item_is_source,
             item_total,
+              item_cost,
+              item_cost_total,
             item_create_time,
             pi.product_abbreviation,
             pc.color_abbreviation,
@@ -717,15 +719,15 @@
       (
         item_order_id,item_product_id,item_num,item_color_id,item_product_type,
         item_product_name,item_product_pic,item_product_color,item_color_bar,
-        item_product_price,item_product_discount,item_total,item_create_time,item_is_source
+        item_product_price,item_product_discount,item_total,item_cost,item_cost_total,item_create_time,item_is_source
       )
     VALUES
     <foreach collection="list" item="item" separator=",">
       (
         #{item.itemOrderId},#{item.itemProductId},#{item.itemNum},#{item.itemColorId},
         #{item.itemProductType},#{item.itemProductName},#{item.itemProductPic},#{item.itemProductColor},
-        #{item.itemColorBar},#{item.itemProductPrice},#{item.itemProductDiscount},#{item.itemTotal},#{item.itemCreateTime},
-        #{item.itemIsSource}
+        #{item.itemColorBar},#{item.itemProductPrice},#{item.itemProductDiscount},#{item.itemTotal},
+        #{item.itemCost},#{item.itemCostTotal}, #{item.itemCreateTime},#{item.itemIsSource}
       )
     </foreach>
   </insert>
@@ -981,6 +983,62 @@
     AND item_color_bar = #{itemColorBar}
   </update>
 
+    <update id="updateOrderItemObj" parameterType="SalesOrderItem" >
+        update
+        tb_rst_sales_order_item
+        <set >
+            <if test="itemOrderId != null ">
+                item_order_id = #{itemOrderId},
+            </if >
+            <if test="itemProductId != null ">
+                item_product_id = #{itemProductId},
+            </if >
+            <if test="itemNum != null ">
+                item_num = #{itemNum},
+            </if >
+            <if test="itemColorId != null ">
+                item_color_id = #{itemColorId},
+            </if >
+            <if test="itemProductType != null ">
+                item_product_type = #{itemProductType},
+            </if >
+            <if test="itemProductName != null and itemProductName != ''">
+                item_product_name = #{itemProductName},
+            </if >
+            <if test="itemProductPic != null and itemProductPic != ''">
+                item_product_pic = #{itemProductPic},
+            </if >
+            <if test="itemProductColor != null and itemProductColor != ''">
+                item_product_color = #{itemProductColor},
+            </if >
+            <if test="itemColorBar != null and itemColorBar != ''">
+                item_color_bar = #{itemColorBar},
+            </if >
+            <if test="itemProductPrice != null ">
+                item_product_price = #{itemProductPrice},
+            </if >
+            <if test="itemProductDiscount != null ">
+                item_product_discount = #{itemProductDiscount},
+            </if >
+            <if test="itemTotal != null ">
+                item_total = #{itemTotal},
+            </if >
+            <if test="itemCost != null ">
+                item_cost = #{itemCost},
+            </if >
+            <if test="itemCostTotal != null ">
+                item_cost_total = #{itemCostTotal},
+            </if >
+            <if test="itemIsSource != null ">
+                item_is_source = #{itemIsSource},
+            </if >
+            <if test="itemReturnNum != null ">
+                item_return_num = #{itemReturnNum}
+            </if >
+        </set >
+        where item_id= #{itemId}
+    </update>
+
   <update id="updateOrderItemReturnNum" parameterType="SalesOrderItem">
     UPDATE tb_rst_sales_order_item
     <set>
@@ -1518,6 +1576,17 @@
                     AND sales_distribution_time <![CDATA[<=]]> #{endDate}
                 </if>
             </if>
+            <if test="dealerId != null">
+                AND  sales_store_id IN (
+                    select
+                    distinct t.store_id
+                    from
+                    tb_rst_store_info t
+                    LEFT JOIN tb_rst_dm_dealer_channel_store dcs ON t.store_id = dcs.store_id
+                    LEFT JOIN tb_rst_dm_dealer_channel dc ON dcs.deal_channel_id = dc.deal_channel_id
+                    WHERE dc.dealer_id = #{dealerId}
+                )
+            </if>
         </where>
         GROUP BY tb_rst_sales_order_info.sales_id
         ORDER BY tb_rst_sales_order_info.sales_id DESC

+ 35 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/storeInfoMapper.xml

@@ -58,6 +58,41 @@
     </where>
   </select>
 
+  <!-- 根据条件查询店铺信息 -->
+  <select id="listStoreByDealer" parameterType="StoreInfo" resultType="StoreInfo">
+    select
+      *
+    from
+      tb_rst_store_info
+    <where>
+      <if test="storeEfast != null">
+        store_efast = #{storeEfast}
+      </if>
+      <if test="storeStatus != null">
+        and store_status = #{storeStatus}
+      </if>
+      <if test="companyId != null and companyId != ''">
+        and company_id = #{companyId}
+      </if>
+      <if test="storeName != null">
+        and store_name LIKE CONCAT('%',#{storeName},'%')
+      </if>
+      <if test="dealerId != null">
+        and  store_id IN (
+          select
+            distinct t.store_id
+          from
+            tb_rst_store_info t
+          LEFT JOIN tb_rst_dm_dealer_channel_store dcs ON t.store_id = dcs.store_id
+          LEFT JOIN tb_rst_dm_dealer_channel dc ON dcs.deal_channel_id = dc.deal_channel_id
+          WHERE dc.dealer_id = #{dealerId}
+        )
+      </if>
+
+
+    </where>
+  </select>
+
   <!-- 添加店铺信息 -->
   <insert id="addStoreInfo" parameterType="StoreInfo"  useGeneratedKeys="true"  keyProperty="storeId">
     insert into tb_rst_store_info (store_id, company_id, store_efast, 

+ 48 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/DealerChannelStoreServiceImpl.java

@@ -0,0 +1,48 @@
+package com.iamberry.rst.service.dm;
+
+import com.iamberry.rst.core.dm.DealerChannelStore;
+import com.iamberry.rst.faces.dm.DealerChannelStoreService;
+import com.iamberry.rst.service.dm.mapper.DealerChannelStoreMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *  渠道关联店铺接口
+ * @author xm
+ * @Date 2019-08-27
+ */
+@Service
+public class DealerChannelStoreServiceImpl  implements DealerChannelStoreService {
+    @Autowired
+    private DealerChannelStoreMapper dealerChannelStoreMapper;
+    /**
+     * 获取集合
+     * @param  dealerChannelStore
+     * @return List
+     */
+    @Override
+    public List<DealerChannelStore> getDealerChannelStoreList(DealerChannelStore  dealerChannelStore){
+        return  dealerChannelStoreMapper.getDealerChannelStoreList(dealerChannelStore);
+    }
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  dealerChannelStore
+     */
+    @Override
+    public DealerChannelStore getDealerChannelStoreById(Integer  id){
+        return  dealerChannelStoreMapper.getDealerChannelStoreById(id);
+    }
+
+    /**
+     * 增加数据 <集合>
+     * @param  dealerChannelStoreList
+     * @return Integer
+     */
+    @Override
+    public  Integer  saveList(List<DealerChannelStore>  dealerChannelStoreList){
+        return  dealerChannelStoreMapper.saveList(dealerChannelStoreList);
+    }
+}

+ 5 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/DealerProductServiceImpl.java

@@ -32,6 +32,11 @@ public class DealerProductServiceImpl  implements DealerProductService {
         return  dealerProductMapper.getDealerProductAndStoreList(dealerProduct);
     }
 
+    @Override
+    public List<DealerProduct> getProductByChannelList(DealerProduct dealerProduct) {
+        return  dealerProductMapper.getProductByChannelList(dealerProduct);
+    }
+
     /**
      * 查询单条数据
      * @param  id

+ 118 - 20
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/DmDealerServiceImpl.java

@@ -33,6 +33,8 @@ public class DmDealerServiceImpl  implements DmDealerService {
     @Autowired
     private DealerChannelMapper dealerChannelMapper;
     @Autowired
+    private DealerChannelStoreMapper dealerChannelStoreMapper;
+    @Autowired
     private CooperationAgreeMapper cooperationAgreeMapper;
     /**
      * 获取集合
@@ -89,12 +91,31 @@ public class DmDealerServiceImpl  implements DmDealerService {
         }
 
         if(dmDealer.getDealerChannelList().size() > 0){
+            //与销售渠道关联的店铺集合
+            List<DealerChannelStore> dealerChannelStoreList = new ArrayList<>();
+
             for (DealerChannel dealerChannel:dmDealer.getDealerChannelList()) {
                 dealerChannel.setDealerId(dmDealer.getDealerId());
+                flag = dealerChannelMapper.save(dealerChannel);
+                if(flag < 1){
+                    throw new RuntimeException("添加渠道信息失败");
+                }
+
+                if( dealerChannel.getStoreIdStr() == null || "".equals(dealerChannel.getStoreIdStr())){
+                    throw new RuntimeException(dealerChannel.getDealChannelName()+"渠道没有选择店铺");
+                }
+
+                String[] storeIds = dealerChannel.getStoreIdStr().split(",");
+                for (String storeId:storeIds) {
+                    DealerChannelStore dcs = new DealerChannelStore();
+                    dcs.setDealChannelId(dealerChannel.getDealChannelId());
+                    dcs.setStoreId(Integer.valueOf(storeId));
+                    dealerChannelStoreList.add(dcs);
+                }
             }
-            flag = dealerChannelMapper.saveList(dmDealer.getDealerChannelList());
+            flag = dealerChannelStoreMapper.saveList(dealerChannelStoreList);
             if(flag < 1){
-                throw new RuntimeException("添加渠道信息失败");
+                throw new RuntimeException("添加销售渠道关联的店铺失败");
             }
         }
 
@@ -121,11 +142,16 @@ public class DmDealerServiceImpl  implements DmDealerService {
             boolean isHasStore = false;
             List<DealerProductStore> dealerProductStoreList = new ArrayList<>();
             for (DealerProduct dealerProduct:dmDealer.getDealerProductList()) {
-                if(dealerProduct.getDealProdStoreArea() == 2){   //1:全部店铺  2:部分店铺
-                    String[] storeIds = dealerProduct.getDealerProductStoreIds().split(",");
-                    for (String storeid:storeIds) {
+                if(dealerProduct.getDealProdStoreArea() == 2){   //1:全部渠道  2:部分渠道
+                    String[] dealChannelIds = dealerProduct.getDealerProductStoreIds().split(",");
+                    for (String dealChannelId:dealChannelIds) {
                         DealerProductStore dealerProductStore = new DealerProductStore();
-                        dealerProductStore.setStoreId(Integer.valueOf(storeid));
+
+                        for (DealerChannel dealerChannel:dmDealer.getDealerChannelList()) {
+                            if(Objects.equals(dealChannelId,dealerChannel.getDealChannelIdStr())){
+                                dealerProductStore.setDealChannelId(dealerChannel.getDealChannelId());
+                            }
+                        }
                         dealerProductStore.setDealProdId(dealerProduct.getDealProdId());//prodSuppId
                         dealerProductStoreList.add(dealerProductStore);
                     }
@@ -181,19 +207,49 @@ public class DmDealerServiceImpl  implements DmDealerService {
         }
 
         if(dmDealer.getDealerChannelList().size() > 0){
+
+            //删除与店铺关联表
+            DealerChannel oldDealerChannel = new DealerChannel();
+            oldDealerChannel.setDealerId(dmDealer.getDealerId());
+            List<DealerChannel> dealerChannelList =   dealerChannelMapper.getDealerChannelList(oldDealerChannel);
+            for (DealerChannel dcOld:dealerChannelList) {
+                dealerChannelStoreMapper.deleteByDealChannelId(dcOld.getDealChannelId());
+            }
+            //渠道信息
             dealerChannelMapper.deleteByDealerId(dmDealer.getDealerId());
+            //与销售渠道关联的店铺集合
+            List<DealerChannelStore> dealerChannelStoreList = new ArrayList<>();
+
             for (DealerChannel dealerChannel:dmDealer.getDealerChannelList()) {
                 dealerChannel.setDealerId(dmDealer.getDealerId());
+                flag = dealerChannelMapper.save(dealerChannel);
+                if(flag < 1){
+                    throw new RuntimeException("添加渠道信息失败");
+                }
+
+                if( dealerChannel.getStoreIdStr() == null || "".equals(dealerChannel.getStoreIdStr())){
+                    throw new RuntimeException(dealerChannel.getDealChannelName()+"渠道没有选择店铺");
+                }
+
+                String[] storeIds = dealerChannel.getStoreIdStr().split(",");
+                for (String storeId:storeIds) {
+                    DealerChannelStore dcs = new DealerChannelStore();
+                    dcs.setDealChannelId(dealerChannel.getDealChannelId());
+                    dcs.setStoreId(Integer.valueOf(storeId));
+                    dealerChannelStoreList.add(dcs);
+                }
             }
-            flag = dealerChannelMapper.saveList(dmDealer.getDealerChannelList());
+            flag = dealerChannelStoreMapper.saveList(dealerChannelStoreList);
             if(flag < 1){
-                throw new RuntimeException("添加渠道信息失败");
+                throw new RuntimeException("添加销售渠道关联的店铺失败");
             }
         }
 
-        if(dmDealer.getDealerProductList().size() > 0){
-            dealerProductMapper.deleteByDealerId(dmDealer.getDealerId());
 
+        //删除供应产品关联渠道表
+        dealerProductStoreMapper.deleteByDealerId(dmDealer.getDealerId());
+        dealerProductMapper.deleteByDealerId(dmDealer.getDealerId());
+        if(dmDealer.getDealerProductList().size() > 0){
             for (DealerProduct dealerProduct:dmDealer.getDealerProductList()) {
                 dealerProduct.setDealerId(dmDealer.getDealerId());
             }
@@ -207,24 +263,26 @@ public class DmDealerServiceImpl  implements DmDealerService {
             List<DealerProduct> dealerProductList = dealerProductMapper.getDealerProductList(dp);
             for (DealerProduct dp1:dmDealer.getDealerProductList()) {
                 for (DealerProduct dp2:dealerProductList) {
-                    if(Objects.equals(dp1.getColorId(), dp2.getColorId())){
+                    if(Objects.equals(dp1.getDealProdIdStr(), dp2.getDealProdIdStr())){
                         dp1.setDealProdId(dp2.getDealProdId());
+                        dp1.setDealProdIdStr(String.valueOf(dp2.getDealProdId()));
                     }
                 }
             }
 
-            for (DealerProduct dp2:dealerProductList) {
-                dealerProductStoreMapper.deleteByDealProdId(dp2.getDealProdId());
-            }
-
             boolean isHasStore = false;
             List<DealerProductStore> dealerProductStoreList = new ArrayList<>();
             for (DealerProduct dealerProduct:dmDealer.getDealerProductList()) {
-                if(dealerProduct.getDealProdStoreArea() == 2){   //1:全部店铺  2:部分店铺
-                    String[] storeIds = dealerProduct.getDealerProductStoreIds().split(",");
-                    for (String storeid:storeIds) {
+                if(dealerProduct.getDealProdStoreArea() == 2){   //1:全部渠道  2:部分渠道
+                    String[] dealChannelIds = dealerProduct.getDealerProductStoreIds().split(",");
+                    for (String dealChannelId:dealChannelIds) {
                         DealerProductStore dealerProductStore = new DealerProductStore();
-                        dealerProductStore.setStoreId(Integer.valueOf(storeid));
+
+                        for (DealerChannel dealerChannel:dmDealer.getDealerChannelList()) {
+                            if(Objects.equals(dealChannelId,dealerChannel.getDealChannelIdStr())){
+                                dealerProductStore.setDealChannelId(dealerChannel.getDealChannelId());
+                            }
+                        }
                         dealerProductStore.setDealProdId(dealerProduct.getDealProdId());//prodSuppId
                         dealerProductStoreList.add(dealerProductStore);
                     }
@@ -243,8 +301,9 @@ public class DmDealerServiceImpl  implements DmDealerService {
             }
         }
 
+        //合作协议
+        cooperationAgreeMapper.deleteByDealerId(dmDealer.getDealerId());
         if(dmDealer.getCooperationAgreeList().size() > 0){
-            cooperationAgreeMapper.deleteByDealerId(dmDealer.getDealerId());
             for (CooperationAgree cooperationAgree:dmDealer.getCooperationAgreeList()) {
                 cooperationAgree.setDealerId(dmDealer.getDealerId());
             }
@@ -261,4 +320,43 @@ public class DmDealerServiceImpl  implements DmDealerService {
         return  dmDealerMapper.update(dmDealer);
     }
 
+    @Override
+    @Transactional
+    public Integer deleteDealer(Integer dealerId) {
+        //删除客户信息
+        Integer flag = dmDealerMapper.deleteDealer(dealerId);
+        if(flag < 1){
+            throw new RuntimeException("删除客户信息失败");
+        }
+
+        flag = dealerContactMapper.deleteByDealerId(dealerId);
+        if(flag < 1){
+            throw new RuntimeException("删除对接人信息失败");
+        }
+
+        //删除与店铺关联表
+        DealerChannel oldDealerChannel = new DealerChannel();
+        oldDealerChannel.setDealerId(dealerId);
+        List<DealerChannel> dealerChannelList =   dealerChannelMapper.getDealerChannelList(oldDealerChannel);
+        for (DealerChannel dcOld:dealerChannelList) {
+            dealerChannelStoreMapper.deleteByDealChannelId(dcOld.getDealChannelId());
+        }
+        //删除渠道信息
+        flag = dealerChannelMapper.deleteByDealerId(dealerId);
+        if(flag < 1){
+            throw new RuntimeException("删除渠道信息失败");
+        }
+
+        //删除供应产品关联渠道表
+        dealerProductStoreMapper.deleteByDealerId(dealerId);
+
+        //删除供应产品
+        dealerProductMapper.deleteByDealerId(dealerId);
+
+        //删除合作协议
+        cooperationAgreeMapper.deleteByDealerId(dealerId);
+
+        return flag;
+    }
+
 }

+ 9 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/FinancialReceiptServiceImpl.java

@@ -1,6 +1,7 @@
 package com.iamberry.rst.service.dm;
 
 import com.github.pagehelper.PageHelper;
+import com.iamberry.rst.core.cm.PostageInfo;
 import com.iamberry.rst.core.dm.FinancialReceipt;
 import com.iamberry.rst.core.page.PageRequest;
 import com.iamberry.rst.core.page.PagedResult;
@@ -74,4 +75,12 @@ public class FinancialReceiptServiceImpl  implements FinancialReceiptService {
     public  Integer  delete(Integer  id){
         return  financialReceiptMapper.delete(id);
     }
+
+    @Override
+    public  PagedResult<PostageInfo> getPostageInfoList(PageRequest<PostageInfo> pageRequest){
+        PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
+        List<PostageInfo> postageInfoList = financialReceiptMapper.getPostageInfoList(pageRequest.getData());
+        return PageUtil.getPage(postageInfoList);
+    }
+
 }

+ 8 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerChannelMapper.java

@@ -28,6 +28,14 @@ public interface DealerChannelMapper {
      * @return Integer
      */
     Integer  deleteByDealerId(Integer  id);
+
+    /**
+     * 增加数据
+     * @param  dealerChannel
+     * @return Integer
+     */
+    Integer  save(DealerChannel  dealerChannel);
+
     /**
      * 增加数据 <集合>
      * @param  dealerChannelList

+ 37 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerChannelStoreMapper.java

@@ -0,0 +1,37 @@
+package com.iamberry.rst.service.dm.mapper;
+
+import com.iamberry.rst.core.dm.DealerChannelStore;
+
+import java.util.List;
+
+/**
+ *  渠道关联店铺接口
+ * @author xm
+ * @Date 2019-08-27
+ */
+public interface DealerChannelStoreMapper {
+    /**
+     * 获取集合
+     * @param  dealerChannelStore
+     * @return List
+     */
+    List<DealerChannelStore> getDealerChannelStoreList(DealerChannelStore  dealerChannelStore);
+    /**
+     * 查询单条数据
+     * @param  id
+     * @return  dealerChannelStore
+     */
+    DealerChannelStore  getDealerChannelStoreById(Integer  id);
+    /**
+     * 删除数据
+     * @param  id
+     * @return Integer
+     */
+    Integer  deleteByDealChannelId(Integer  id);
+    /**
+     * 增加数据 <集合>
+     * @param  dealerChannelStoreList
+     * @return Integer
+     */
+    Integer  saveList(List<DealerChannelStore>  dealerChannelStoreList);
+}

+ 3 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerProductMapper.java

@@ -24,6 +24,9 @@ public interface DealerProductMapper {
      */
     List<DealerProduct> getDealerProductAndStoreList(DealerProduct  dealerProduct);
 
+    // 只查询该客户下面某个渠道的所有产品
+    List<DealerProduct> getProductByChannelList(DealerProduct  dealerProduct);
+
     /**
      * 查询单条数据
      * @param  id

+ 6 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DealerProductStoreMapper.java

@@ -29,6 +29,12 @@ public interface DealerProductStoreMapper {
      */
     Integer  deleteByDealProdId(Integer  id);
     /**
+     * 删除数据 ByDealerId
+     * @param  id
+     * @return Integer
+     */
+    Integer  deleteByDealerId(Integer  id);
+    /**
      * 增加数据 <集合>
      * @param  dealerProductStoreList
      * @return Integer

+ 6 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/DmDealerMapper.java

@@ -46,5 +46,11 @@ public interface DmDealerMapper {
      * @return Integer
      */
     Integer  update(DmDealer  dmDealer);
+    /**
+     * 修改数据
+     * @param  dmDealer
+     * @return Integer
+     */
+    Integer  deleteDealer(Integer  id);
 
 }

+ 8 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/FinancialReceiptMapper.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.service.dm.mapper;
 
+import com.iamberry.rst.core.cm.PostageInfo;
 import com.iamberry.rst.core.dm.FinancialReceipt;
 
 import java.util.List;
@@ -40,4 +41,11 @@ public interface FinancialReceiptMapper {
      * @return Integer
      */
     Integer  delete(Integer  id);
+
+    /**
+     * 获取集合
+     * @param  postageInfo
+     * @return List
+     */
+    List<PostageInfo> getPostageInfoList(PostageInfo  postageInfo);
 }

+ 6 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/SupplierProductMapper.java

@@ -23,6 +23,12 @@ public interface SupplierProductMapper {
      */
     SupplierProduct  getSupplierProductById(Integer  id);
     /**
+     * 查询单条数据
+     * @param  colorId
+     * @return  supplierProduct
+     */
+    SupplierProduct  getSupplierProductByColorId(Integer colorId);
+    /**
      * 删除数据
      * @param  id
      * @return Integer

+ 3 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/claimOrderMapper.xml

@@ -21,6 +21,7 @@
         select
         <include refid="Base_List" />,
         soi.*,
+        pi.*,
         oi.sales_deal_code,
         oi.sales_pay_time,
         oi.sales_address_name,
@@ -29,10 +30,11 @@
         si.store_name,
         sa.admin_name AS salesAdminName
         from tb_rst_dm_claim_order t
-        LEFT JOIN tb_rst_sales_order_item soi ON soi.item_id = t.item_id
+        LEFT JOIN tb_rst_sales_order_item soi ON soi.item_id = t.item_id AND (t.claim_order_type = 1 OR t.claim_order_type = 2)
         LEFT JOIN tb_rst_sales_order_info oi ON oi.sales_id = soi.item_order_id
         LEFT JOIN tb_rst_store_info si ON si.store_id = oi.sales_store_id
         LEFT JOIN tb_rst_sys_admin sa ON sa.admin_id = oi.sales_admin_id
+        LEFT JOIN tb_rst_postage_info pi ON t.item_id = pi.postage_id AND t.claim_order_type = 3
         <where>
             <if test="claimOrderId != null ">
                 AND t.claim_order_id = #{claimOrderId}

+ 35 - 3
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerChannelMapper.xml

@@ -11,20 +11,26 @@
     </resultMap>
     <sql    id="Base_List" >
         t.deal_channel_id,
+        t.deal_channel_name,
         t.dealer_id,
         t.channel_id,
         t.store_id,
         t.deal_channel_account_period,
         t.create_date
     </sql>
+
     <select id="getDealerChannelList" resultMap="BaseResultMap" parameterType="DealerChannel" >
         select
         <include refid="Base_List" />,
         si.store_name,
         dc.channel_name,
-        dct.channel_type_name
+        dct.channel_type_name,
+        dd.dealer_name,
+        dd.dealer_self_operated
         from tb_rst_dm_dealer_channel t
-        LEFT JOIN tb_rst_store_info si ON  t.store_id = si.store_id
+        LEFT JOIN tb_rst_dm_dealer dd ON  t.dealer_id = dd.dealer_id
+        LEFT JOIN tb_rst_dm_dealer_channel_store dcs ON t.deal_channel_id = dcs.deal_channel_id
+        LEFT JOIN tb_rst_store_info si ON  dcs.store_id = si.store_id
         LEFT JOIN tb_rst_dm_channel dc ON  t.channel_id = dc.channel_id
         LEFT JOIN tb_rst_dm_channel_type dct ON  dc.channel_type_id = dct.channel_type_id
         <where>
@@ -38,10 +44,13 @@
                 AND t.channel_id = #{channelId}
             </if >
             <if test="storeId != null ">
-                AND t.store_id = #{storeId}
+                AND dcs.store_id = #{storeId}
             </if >
         </where>
+        GROUP BY
+            t.deal_channel_id
     </select>
+
     <select id="getDealerChannelById" resultMap="BaseResultMap" parameterType="Integer" >
         select
         <include refid="Base_List" />
@@ -53,6 +62,29 @@
         tb_rst_dm_dealer_channel
         where dealer_id = #{dealerId}
     </delete>
+
+    <insert id="save" parameterType="DealerChannel" useGeneratedKeys="true"  keyProperty="dealChannelId">
+        insert into
+            tb_rst_dm_dealer_channel
+            (
+                deal_channel_id,
+                deal_channel_name,
+                dealer_id,
+                channel_id,
+                store_id,
+                deal_channel_account_period
+            )
+        values
+            (
+                #{dealChannelId},
+                #{dealChannelName},
+                #{dealerId},
+                #{channelId},
+                #{storeId},
+                #{dealChannelAccountPeriod}
+            )
+    </insert>
+
     <insert id="saveList" parameterType="java.util.List" >
         insert into
         tb_rst_dm_dealer_channel

+ 60 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerChannelStoreMapper.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iamberry.rst.service.dm.mapper.DealerChannelStoreMapper">
+    <resultMap  id="BaseResultMap" type="DealerChannelStore" >
+        <result    column="dcs_id"    property="dcsId" />
+        <result    column="deal_channel_id"    property="dealChannelId" />
+        <result    column="store_id"    property="storeId" />
+    </resultMap>
+    <sql    id="Base_List" >
+        t.dcs_id,
+        t.deal_channel_id,
+        t.store_id
+    </sql>
+    <select id="getDealerChannelStoreList" resultMap="BaseResultMap" parameterType="DealerChannelStore" >
+        select
+          <include refid="Base_List" />,
+          scs.store_name
+        from tb_rst_dm_dealer_channel_store t
+        LEFT JOIN tb_rst_store_info scs ON t.store_id = scs.store_id
+        <where>
+            <if test="dcsId != null ">
+                AND t.dcs_id = #{dcsId}
+            </if >
+            <if test="dealChannelId != null ">
+                AND t.deal_channel_id = #{dealChannelId}
+            </if >
+            <if test="storeId != null ">
+                AND t.store_id = #{storeId}
+            </if >
+        </where>
+    </select>
+    <select id="getDealerChannelStoreById" resultMap="BaseResultMap" parameterType="Integer" >
+        select
+        <include refid="Base_List" />
+        from tb_rst_dm_dealer_channel_store t
+        where t.dcs_id= #{dcsId}
+    </select>
+    <delete id="deleteByDealChannelId" parameterType="Integer" >
+        delete FROM
+        tb_rst_dm_dealer_channel_store
+        where deal_channel_id = #{id}
+    </delete>
+    <insert id="saveList" parameterType="java.util.List" >
+        insert into
+        tb_rst_dm_dealer_channel_store
+        (
+        dcs_id,
+        deal_channel_id,
+        store_id
+        )
+        values
+        <foreach collection="list" item="node" index="index" separator="," open="" close="">
+            (
+            #{node.dcsId},
+            #{node.dealChannelId},
+            #{node.storeId}
+            )
+        </foreach >
+    </insert>
+</mapper>

+ 38 - 2
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerProductMapper.xml

@@ -15,12 +15,14 @@
         t.color_id,
         t.deal_prod_price,
         t.deal_prod_store_area,
+        t.deal_prod_id_str,
         t.create_date
     </sql>
     <select id="getDealerProductList" resultMap="BaseResultMap" parameterType="DealerProduct" >
         select
         <include refid="Base_List" />,
         pc.color_name,
+        pc.color_bar,
         pi.product_name
         from tb_rst_dm_dealer_product t
         LEFT JOIN tb_rst_product_color pc ON t.color_id = pc.color_id
@@ -46,12 +48,16 @@
 
     <resultMap  id="DealerProductMap" type="DealerProduct" >
         <result    column="deal_prod_id"    property="dealProdId" />
-        <collection property="dealerProductStoreList" column="dealProdId" ofType="DealerProductStore" select="getDealerProductStoreList"/>
+        <collection property="dealerProductStoreList" column="dealProdId" ofType="DealerProductStore" select="getDealerProductStoreList" javaType="ArrayList" />
     </resultMap>
+
     <select id="getDealerProductAndStoreList" resultMap="DealerProductMap" parameterType="DealerProduct" >
         select
-        <include refid="Base_List" />
+        <include refid="Base_List" />,
+        pc.color_bar
         from tb_rst_dm_dealer_product t
+        LEFT JOIN tb_rst_product_color pc ON t.color_id = pc.color_id
+        LEFT JOIN tb_rst_dm_dealer_product_store dps ON t.deal_prod_id = dps.deal_prod_id
         <where>
             <if test="dealProdId != null ">
                 AND t.deal_prod_id = #{dealProdId}
@@ -68,8 +74,36 @@
             <if test="dealProdStoreArea != null ">
                 AND t.deal_prod_store_area = #{dealProdStoreArea}
             </if >
+            <if test="dealProdStoreArea != null ">
+                AND t.deal_prod_store_area = #{dealProdStoreArea}
+            </if >
+            <if test="colorBar != null and colorBar != ''">
+                AND pc.color_bar  = #{colorBar}
+            </if >
+            <if test="dealChannelId != null">
+                AND dps.deal_channel_id  = #{dealChannelId}
+            </if >
         </where>
     </select>
+
+
+    <resultMap  id="DealerProductNewMap" type="DealerProduct" >
+        <result    column="deal_prod_id"    property="dealProdId" />
+        <collection property="dealerProductStoreList" column="deal_prod_id" ofType="DealerProductStore" select="getDealerProductStoreList" javaType="ArrayList" />
+    </resultMap>
+    <select id="getProductByChannelList" resultMap="DealerProductNewMap" parameterType="DealerProduct" >
+        select
+        <include refid="Base_List" />,
+        pc.color_bar
+        from tb_rst_dm_dealer_product t
+        LEFT JOIN tb_rst_product_color pc ON t.color_id = pc.color_id
+        LEFT JOIN tb_rst_dm_dealer_product_store dps ON t.deal_prod_id = dps.deal_prod_id
+        WHERE
+              t.dealer_id = #{dealerId}
+        AND (t.deal_prod_store_area = 1 OR dps.deal_channel_id = #{dealChannelId})
+        GROUP BY 	t.deal_prod_id
+    </select>
+
     <select id="getDealerProductStoreList" resultType="DealerProductStore" parameterType="DealerProductStore" >
         select
           t.*
@@ -89,6 +123,7 @@
                 dealer_id,
                 color_id,
                 deal_prod_price,
+                deal_prod_id_str,
                 deal_prod_store_area
             )
         values
@@ -97,6 +132,7 @@
                 #{node.dealerId},
                 #{node.colorId},
                 #{node.dealProdPrice},
+                #{node.dealProdIdStr},
                 #{node.dealProdStoreArea}
             )
         </foreach >

+ 26 - 10
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dealerProductStoreMapper.xml

@@ -5,18 +5,20 @@
         <result    column="product_store_id"    property="productStoreId" />
         <result    column="deal_prod_id"    property="dealProdId" />
         <result    column="store_id"    property="storeId" />
+        <result    column="deal_channel_id"    property="dealChannelId" />
     </resultMap>
     <sql    id="Base_List" >
         t.product_store_id,
         t.deal_prod_id,
-        t.store_id
+        t.store_id,
+        t.deal_channel_id
     </sql>
     <select id="getDealerProductStoreList" resultMap="BaseResultMap" parameterType="DealerProductStore" >
         select
         <include refid="Base_List" />,
-        si.store_name
+        si.deal_channel_name
         from tb_rst_dm_dealer_product_store t
-        LEFT JOIN  tb_rst_store_info si ON  t.store_id = si.store_id
+        LEFT JOIN  tb_rst_dm_dealer_channel si ON  t.deal_channel_id = si.deal_channel_id
         <where>
             <if test="productStoreId != null ">
                 AND t.product_store_id = #{productStoreId}
@@ -27,6 +29,9 @@
             <if test="storeId != null ">
                 AND t.store_id = #{storeId}
             </if >
+            <if test="dealChannelId != null ">
+                AND t.deal_channel_id = #{dealChannelId}
+            </if >
         </where>
     </select>
     <select id="getDealerProductStoreById" resultMap="BaseResultMap" parameterType="Integer" >
@@ -40,18 +45,29 @@
         tb_rst_dm_dealer_product_store
         where deal_prod_id = #{dealProdId}
     </delete>
+    <delete id="deleteByDealerId" parameterType="Integer" >
+        delete FROM
+          tb_rst_dm_dealer_product_store
+        where deal_prod_id in (
+            SELECT deal_prod_id
+            FROM tb_rst_dm_dealer_product
+            WHERE dealer_id = #{dealerId}
+        )
+    </delete>
     <insert id="saveList" parameterType="java.util.List" >
         insert into
-        tb_rst_dm_dealer_product_store
-        (
-        deal_prod_id,
-        store_id
-        )
+          tb_rst_dm_dealer_product_store
+            (
+                deal_prod_id,
+                store_id,
+                deal_channel_id
+            )
         values
         <foreach collection="list" item="node" index="index" separator="," open="" close="">
             (
-            #{node.dealProdId},
-            #{node.storeId}
+                #{node.dealProdId},
+                #{node.storeId},
+                #{node.dealChannelId}
             )
         </foreach >
     </insert>

+ 13 - 3
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/dmDealerMapper.xml

@@ -64,19 +64,23 @@
 
     <select id="listDmDealerPage" resultMap="BaseResultMap" parameterType="DmDealer" >
         select
-        <include refid="Base_List" />,
+            <include refid="Base_List" />,
         cax.coop_agree_before_date,
         cax2.coop_agree_end_date,
         SUM(fr.fr_amount) AS  frAmount,
         sa.admin_name AS adminName
         from tb_rst_dm_dealer t
         LEFT JOIN (
-          SELECT ca.dealer_id,MIN(ca.coop_agree_before_date) AS coop_agree_before_date FROM tb_rst_dm_cooperation_agree ca GROUP BY ca.dealer_id
+            SELECT ca.dealer_id,MIN(ca.coop_agree_before_date) AS coop_agree_before_date FROM tb_rst_dm_cooperation_agree ca GROUP BY ca.dealer_id
         )cax ON cax.dealer_id = t.dealer_id
         LEFT JOIN (
-        SELECT ca2.dealer_id,MAX(ca2.coop_agree_end_date) AS coop_agree_end_date FROM tb_rst_dm_cooperation_agree ca2 GROUP BY ca2.dealer_id
+            SELECT ca2.dealer_id,MAX(ca2.coop_agree_end_date) AS coop_agree_end_date FROM tb_rst_dm_cooperation_agree ca2 GROUP BY ca2.dealer_id
         )cax2 ON cax2.dealer_id = t.dealer_id
         LEFT JOIN tb_rst_dm_financial_receipt fr ON t.dealer_id = fr.dealer_id
+
+      /*  LEFT JOIN tb_rst_dm_dealer_channel dc ON t.dealer_id = dc.dealer_id
+        LEFT JOIN tb_rst_store_info si ON t.dealer_id = si.dealer_id
+*/
         LEFT JOIN tb_rst_sys_admin sa ON t.create_id = sa.admin_id
         <where>
             <if test="dealerId != null ">
@@ -209,4 +213,10 @@
         where dealer_id= #{dealerId}
     </update>
 
+    <delete id="deleteDealer" parameterType="Integer" >
+        delete FROM
+          tb_rst_dm_dealer
+        where dealer_id = #{dealerId}
+    </delete>
+
 </mapper>

+ 51 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/financialReceiptMapper.xml

@@ -36,6 +36,7 @@
         from tb_rst_dm_financial_receipt t
         LEFT JOIN tb_rst_sys_admin sa ON  t.fr_claim_admin_id = sa.admin_id
         LEFT JOIN tb_rst_dm_dealer dd ON  t.dealer_id = dd.dealer_id
+        LEFT JOIN tb_rst_sys_admin sa2 ON  dd.create_id = sa2.admin_id
         <where>
             <if test="frId != null ">
                 AND t.fr_id = #{frId}
@@ -67,6 +68,9 @@
             <if test="frClaimAdminName != null and frClaimAdminName != ''">
                 AND  sa.admin_name  like  CONCAT ('%',#{frClaimAdminName},'%')
             </if >
+            <if test="dealerAdminId != null ">
+                AND (t.fr_claim_status = 2 OR  dd.create_id = #{dealerAdminId})
+            </if >
         </where>
         ORDER BY t.fr_id DESC
     </select>
@@ -145,4 +149,51 @@
         tb_rst_dm_financial_receipt
         where fr_id=#{frId}
     </delete>
+
+
+    <select id="getPostageInfoList" resultType="PostageInfo" parameterType="PostageInfo" >
+        SELECT
+          rpi.*,
+          cci.customer_id,
+          cci.customer_create_time
+        FROM tb_rst_postage_info rpi
+        LEFT JOIN tb_rst_cm_relation rcr ON rpi.relation_id = rcr.relation_id
+        LEFT JOIN tb_rst_cm_customer_info cci ON rcr.customer_id = cci.customer_id
+        <where>
+            <if test="postageAlipayType != null ">
+                AND rpi.postage_alipay_type = #{postageAlipayType}
+            </if >
+            <if test="postageStatus != null ">
+                AND rpi.postage_status = #{postageStatus}
+            </if >
+            <if test="customerId != null ">
+                AND cci.customer_id = #{customerId}
+            </if >
+            <if test="storeId != null ">
+                AND cci.store_id = #{storeId}
+            </if >
+            <if test="dealerId != null ">
+                AND cci.store_id IN (
+                    select
+                    distinct t.store_id
+                    from
+                    tb_rst_store_info t
+                    LEFT JOIN tb_rst_dm_dealer_channel_store dcs ON t.store_id = dcs.store_id
+                    LEFT JOIN tb_rst_dm_dealer_channel dc ON dcs.deal_channel_id = dc.deal_channel_id
+                    WHERE dc.dealer_id = #{dealerId}
+                )
+            </if >
+            <if test="startDate != null and startDate != ''">
+                <![CDATA[
+                    AND cci.customer_create_time >= #{startDate}
+                ]]>
+            </if >
+            <if test="endDate != null and endDate != ''">
+                <![CDATA[
+                    AND cci.customer_create_time <= #{endDate}
+                ]]>
+            </if >
+        </where>
+        ORDER BY rpi.postage_id DESC
+    </select>
 </mapper>

+ 8 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/dm/mapper/supplierProductMapper.xml

@@ -42,6 +42,14 @@
         from tb_rst_dm_supplier_product t
         where t.sp_id= #{spId}
     </select>
+
+    <select id="getSupplierProductByColorId" resultMap="BaseResultMap" parameterType="Integer" >
+        select
+        <include refid="Base_List" />
+        from tb_rst_dm_supplier_product t
+        where t.color_id = #{colorId}
+    </select>
+
     <delete id="delete" parameterType="Integer" >
         delete FROM
         tb_rst_dm_supplier_product

+ 54 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/fm/DetectStatisticServiceImpl.java

@@ -0,0 +1,54 @@
+package com.iamberry.rst.service.fm;
+
+import com.iamberry.rst.core.fm.ComplaintDetectInfo;
+import com.iamberry.rst.core.fm.DetectStatistics;
+import com.iamberry.rst.core.fm.DetectionConfig;
+import com.iamberry.rst.faces.fm.DetectStatisticService;
+import com.iamberry.rst.service.fm.mapper.DetectStatisticMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class DetectStatisticServiceImpl implements DetectStatisticService {
+
+    @Autowired
+    private DetectStatisticMapper detectStatisticMapper;
+
+    @Override
+    public List<ComplaintDetectInfo> getAllMalfunctionByMonth() {
+        return detectStatisticMapper.getAllMalfunctionByMonth();
+    }
+
+    @Override
+    public List<DetectStatistics> getDetectConfigList(DetectStatistics detectStatistics) {
+        return detectStatisticMapper.getDetectConfigList(detectStatistics);
+    }
+
+    @Override
+    public List<DetectStatistics> getDetectProductionList(DetectStatistics detectStatistics) {
+        return detectStatisticMapper.getDetectProductionList(detectStatistics);
+    }
+
+    @Override
+    public List<DetectStatistics> getDetectList(DetectStatistics detectStatistics) {
+        return detectStatisticMapper.getDetectList(detectStatistics);
+    }
+
+    @Override
+    public List<DetectionConfig> getDetectConfigByTypeList(DetectionConfig detectionConfig) {
+        return detectStatisticMapper.getDetectConfigByTypeList(detectionConfig);
+    }
+
+
+    @Override
+    public List<DetectStatistics> getCreatTimeByConfigIdList(DetectStatistics detectStatistics) {
+        return detectStatisticMapper.getCreatTimeByConfigIdList(detectStatistics);
+    }
+
+    @Override
+    public List<DetectStatistics> getDetectAllByConfigIdList(DetectStatistics detectStatistics) {
+        return detectStatisticMapper.getDetectAllByConfigIdList(detectStatistics);
+    }
+}

+ 53 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/fm/mapper/DetectStatisticMapper.java

@@ -0,0 +1,53 @@
+package com.iamberry.rst.service.fm.mapper;
+
+import com.iamberry.rst.core.fm.ComplaintDetectInfo;
+import com.iamberry.rst.core.fm.DetectStatistics;
+import com.iamberry.rst.core.fm.DetectionConfig;
+
+import java.util.List;
+
+public interface DetectStatisticMapper {
+
+    /**
+     * 获取本月全部故障机器所对应的生产日期的月份与数量
+     * @return
+     */
+    List<ComplaintDetectInfo> getAllMalfunctionByMonth();
+
+    /**
+     * 获取固定生产时间类的,某个类型的检测的所有配置数据
+     * @return
+     */
+    List<DetectStatistics> getDetectConfigList(DetectStatistics detectStatistics);
+
+    /**
+     * 获取固定生产时间类的,某个类型的检测的所有生产日期
+     * @return
+     */
+    List<DetectStatistics> getDetectProductionList(DetectStatistics detectStatistics);
+
+    /**
+     * 获取固定生产时间类的,某个类型的检测的所有条目
+     * @return
+     */
+    List<DetectStatistics> getDetectList(DetectStatistics detectStatistics);
+
+    /**
+     * 根据类型查询所有的配置数据
+     * @return
+     */
+    List<DetectionConfig> getDetectConfigByTypeList(DetectionConfig detectionConfig);
+
+    /**
+     * 依据某个config 来获取所有的 返厂时间
+     * @return
+     */
+    List<DetectStatistics> getCreatTimeByConfigIdList(DetectStatistics detectStatistics);
+
+    /**
+     * 依据某个configId , 返厂日期与出厂日期对应的机器的台数
+     * @return
+     */
+    List<DetectStatistics> getDetectAllByConfigIdList(DetectStatistics detectStatistics);
+
+}

+ 3 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/fm/mapper/complaintSignclosedInfoMapper.xml

@@ -194,6 +194,7 @@
         AND cs.signclosed_date &lt; #{endTime}
       </if>
     </where>
+    GROUP BY cs.signclosed_id
     order by cs.signclosed_create_time DESC
   </select>
 
@@ -370,7 +371,8 @@
         sp.signclosed_product_id signclosedProductId,
         sp.signclosed_product_color signclosedProductColor,
         pc.color_name colorName,
-        sp.product_num productNum
+        sp.product_num productNum,
+        cs.signclosed_logistics_number signclosedLogisticsNumber
         from
         tb_rst_complaint_signclosed_product sp
         LEFT JOIN tb_rst_complaint_signclosed cs on cs.signclosed_id = sp.signclosed_id

+ 183 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/fm/mapper/detectStatisticMapper.xml

@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.iamberry.rst.service.fm.mapper.DetectStatisticMapper" >
+
+
+    <select id="getAllMalfunctionByMonth" resultType="ComplaintDetectInfo"   parameterType="DetectionConfig">
+        SELECT
+            COUNT(detect_id) AS countNum,
+            IF(detect_production = '','未知',ifnull(detect_production,'未知')) AS detect_production,
+            detect_create_time
+        FROM tb_rst_complaint_detect
+        WHERE DATE_FORMAT(detect_create_time,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m')
+        GROUP BY detect_production
+        ORDER BY detect_production
+    </select>
+
+    <select id="getDetectProductionList" resultType="DetectStatistics"   parameterType="DetectionConfig">
+        SELECT
+            t.detect_id,
+            IF(t.detect_production = '','未知',ifnull(t.detect_production,'未知')) AS detect_production,
+            t.detect_create_time,
+            cdc.config_id,
+            cdc.config_detect_content,
+            cdc.config_type
+        FROM tb_rst_complaint_detect t
+        LEFT JOIN tb_rst_complaint_detection_item cdi ON t.detect_id = cdi.detect_id
+        LEFT JOIN tb_rst_complaint_detection_config cdc ON cdi.item_config_id = cdc.config_id
+        <where>
+            <if test="configType != null ">
+                AND  cdc.config_type = #{configType}
+            </if >
+            <if test="configId != null ">
+                AND  cdi.item_config_id = #{configId}
+            </if >
+            <if test="beginTime != null and beginTime != ''">
+                AND t.detect_production &gt;= #{beginTime}
+            </if >
+            <if test="endTime != null and endTime != ''">
+                AND t.detect_production &lt;= #{endTime}
+            </if >
+        </where>
+        GROUP BY t.detect_production
+        ORDER BY t.detect_production
+    </select>
+
+    <select id="getDetectConfigList" resultType="DetectStatistics"  parameterType="DetectionConfig" >
+        SELECT
+        t.detect_id,
+        t.detect_production,
+        t.detect_create_time,
+        cdc.config_id,
+        COUNT(cdc.config_id) AS configNumber,
+        cdc.config_detect_content,
+        cdc.config_type
+        FROM tb_rst_complaint_detect t
+        LEFT JOIN tb_rst_complaint_detection_item cdi ON t.detect_id = cdi.detect_id
+        LEFT JOIN tb_rst_complaint_detection_config cdc ON cdi.item_config_id = cdc.config_id
+        <where>
+            <if test="configType != null ">
+                AND  cdc.config_type = #{configType}
+            </if >
+            <if test="configId != null ">
+                AND  cdi.item_config_id = #{configId}
+            </if >
+            <if test="beginTime != null and beginTime != ''">
+                AND t.detect_production &gt;= #{beginTime}
+            </if >
+            <if test="endTime != null and endTime != ''">
+                AND t.detect_production &lt;= #{endTime}
+            </if >
+        </where>
+        GROUP BY cdc.config_id
+        ORDER BY configNumber DESC
+    </select>
+
+    <select id="getDetectList" resultType="DetectStatistics" parameterType="DetectionConfig" >
+        SELECT
+        t.detect_id,
+        IF(t.detect_production = '','未知',ifnull(t.detect_production,'未知')) AS detect_production,
+        t.detect_create_time,
+        cdc.config_id,
+        COUNT(cdc.config_id) AS configNumber,
+        cdc.config_detect_content,
+        cdc.config_type
+        FROM tb_rst_complaint_detect t
+        LEFT JOIN tb_rst_complaint_detection_item cdi ON t.detect_id = cdi.detect_id
+        LEFT JOIN tb_rst_complaint_detection_config cdc ON cdi.item_config_id = cdc.config_id
+        <where>
+            <if test="configType != null ">
+                AND  cdc.config_type = #{configType}
+            </if >
+            <if test="configId != null ">
+                AND  cdi.item_config_id = #{configId}
+            </if >
+            <if test="beginTime != null and beginTime != ''">
+                AND t.detect_production &gt;= #{beginTime}
+            </if >
+            <if test="endTime != null and endTime != ''">
+                AND t.detect_production &lt;= #{endTime}
+            </if >
+        </where>
+        GROUP BY t.detect_production,cdc.config_id
+        ORDER BY t.detect_production
+    </select>
+
+    <select id="getDetectConfigByTypeList" resultType="DetectionConfig"  parameterType="DetectionConfig">
+        SELECT
+          cdc.*
+        FROM tb_rst_complaint_detection_config cdc
+        <where>
+            <if test="configType != null ">
+                AND  cdc.config_type = #{configType}
+            </if >
+            <if test="configId != null ">
+                AND  cdc.config_id = #{configId}
+            </if >
+        </where>
+        ORDER BY cdc.config_id DESC
+    </select>
+
+
+    <select id="getCreatTimeByConfigIdList" resultType="DetectStatistics"  parameterType="DetectStatistics">
+        SELECT
+            t.detect_id,
+            IF (
+            t.detect_production = '',
+            '未知',
+            ifnull(
+            t.detect_production,
+            '未知'
+            )
+            ) AS detect_production,
+            t.detect_create_time,
+            cdc.config_id,
+            cdc.config_detect_content,
+            cdc.config_type
+        FROM
+            tb_rst_complaint_detect t
+        LEFT JOIN tb_rst_complaint_detection_item cdi ON t.detect_id = cdi.detect_id
+        LEFT JOIN tb_rst_complaint_detection_config cdc ON cdi.item_config_id = cdc.config_id
+        <where>
+            <if test="configId != null ">
+                AND  t.config_id = #{configId}
+            </if >
+        </where>
+        GROUP BY
+        date_format(t.detect_create_time, '%Y-%m-%d')
+        ORDER BY
+        t.detect_create_time
+    </select>
+
+    <select id="getDetectAllByConfigIdList" resultType="DetectStatistics"  parameterType="DetectStatistics">
+        SELECT *
+        FROM (
+        SELECT
+        t.detect_id,
+        COUNT(distinct t.detect_id),
+        t.detect_production,
+        t.detect_create_time,
+        cdi.item_config_id,
+        cdi.item_detect_content
+        FROM
+        (SELECT cc.detect_id,IF (cc.detect_production = '','未知',ifnull(cc.detect_production,'未知')) AS detect_production, cc.detect_create_time FROM	tb_rst_complaint_detect cc
+        ) t
+        LEFT JOIN tb_rst_complaint_detection_item cdi ON t.detect_id = cdi.detect_id
+        <where>
+            <if test="configId != null ">
+                AND  cdi.item_config_id = #{configId}
+            </if >
+         <!--   <if test="configId != null ">
+                AND	t.detect_create_time 大于 '2019-09-02 00:00:00'
+                AND t.detect_create_time 小于 '2019-09-04 00:00:00'
+            </if >-->
+
+        </where>
+            GROUP BY t.detect_production,date_format(t.detect_create_time, '%Y-%m-%d')
+        ) xx
+        ORDER BY date_format(xx.detect_create_time , '%Y-%m-%d')
+    </select>
+
+
+
+</mapper>

+ 6 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/productMapper.xml

@@ -67,6 +67,12 @@
             <if test="typeCompany != null and typeCompany != ''">
                 AND pt.type_company  = #{typeCompany}
             </if >
+            <if test="colorIdStr != null and colorIdStr != ''">
+                AND c.color_id IN
+                <foreach collection="colorIdStr" item="node" index="index" separator="," open="(" close=")">
+                    #{node}
+                </foreach >
+            </if>
         </where>
     </select>
 

+ 145 - 8
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminDetectController.java

@@ -15,10 +15,7 @@ import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.cm.CompanyInfoService;
 import com.iamberry.rst.faces.cm.ProcTypeService;
 import com.iamberry.rst.faces.cm.SalesOrderService;
-import com.iamberry.rst.faces.fm.AwaitingSignclosedProductInfoService;
-import com.iamberry.rst.faces.fm.ComplaintDetectInfoService;
-import com.iamberry.rst.faces.fm.ComplaintSignclosedInfoService;
-import com.iamberry.rst.faces.fm.ComplaintSignclosedProductInfoService;
+import com.iamberry.rst.faces.fm.*;
 import com.iamberry.rst.faces.product.ProductService;
 import com.iamberry.rst.service.cm.mapper.ComplaintQuestionInfoMapper;
 import com.iamberry.rst.service.sys.mapper.SysMapper;
@@ -41,10 +38,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * Created by wxm on 2017/8/29.
@@ -76,6 +70,8 @@ public class AdminDetectController {
     private SysMapper sysMapper;
     @Autowired
     private ProcTypeService procTypeService;
+    @Autowired
+    private DetectStatisticService detectStatisticService;
     /**
      * 跳转到添加检测记录页面
      *
@@ -1417,5 +1413,146 @@ public class AdminDetectController {
         }
         return msg;
     }
+
+    /**
+     * 跳转到统计页面
+     * @return
+     */
+    @RequiresPermissions("detect:statistics:detect")
+    @RequestMapping(value = "/detect_statistics")
+    public ModelAndView detectStatistics(HttpServletRequest request) {
+        ModelAndView mv = new ModelAndView("cm/inspection/detect_statistics");
+
+        //类型 检测类别1工厂检测现象2. 故障原因3. 判定结果4. 故障指向5. 原因分析
+        DetectionConfig detectionConfig = new DetectionConfig();
+        detectionConfig.setConfigType(3);
+        List<DetectionConfig>  criticalResultList = detectStatisticService.getDetectConfigByTypeList(detectionConfig);
+        detectionConfig.setConfigType(2);
+        List<DetectionConfig>  causeIssueList = detectStatisticService.getDetectConfigByTypeList(detectionConfig);
+        detectionConfig.setConfigType(5);
+        List<DetectionConfig>  causeAnalysisList = detectStatisticService.getDetectConfigByTypeList(detectionConfig);
+
+        mv.addObject("criticalResultList",criticalResultList);
+        mv.addObject("causeIssueList",causeIssueList);
+        mv.addObject("causeAnalysisList",causeAnalysisList);
+        return mv;
+    }
+
+    /**
+     * 报表 - 本月故障机器
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @ResponseBody
+    @RequiresPermissions("detect:statistics:detect")
+    @RequestMapping("/detect_statistics_data")
+    public ResponseJson detectStatisticsData(HttpServletRequest request){
+        ResponseJson msg = ResponseJson.getSUCCESS();
+        List<ComplaintDetectInfo> complaintDetectInfoList = detectStatisticService.getAllMalfunctionByMonth();
+        msg.addResponseKeyValue("complaintDetectInfoList",complaintDetectInfoList);
+        return msg;
+    }
+
+    /**
+     * 报表 - 按照各个检测类型分类统计固定生产时间内,机器损坏数量
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @ResponseBody
+    @RequiresPermissions("detect:statistics:detect")
+    @RequestMapping("/detect_statistics_one")
+    public ResponseJson detectStatisticsOne(HttpServletRequest request, DetectStatistics detectStatistics){
+        ResponseJson msg = ResponseJson.getSUCCESS();
+
+//        detectStatistics.setBeginTime("2019-02");
+
+        //生产年份
+        List<DetectStatistics> detectProductionList = detectStatisticService.getDetectProductionList(detectStatistics);
+
+        //配置
+        List<DetectStatistics> detectConfigList = detectStatisticService.getDetectConfigList(detectStatistics);
+
+        List<Map> list = new ArrayList<>();
+        List<DetectStatistics> detectList = detectStatisticService.getDetectList(detectStatistics);
+        List<Integer> cinfigList = new ArrayList<>();
+        for (int i=0; i<detectConfigList.size(); i++) {
+            Map map = new HashMap();
+            int[] num = new int[detectProductionList.size()];
+            for (int k=0; k<detectProductionList.size(); k++){
+                boolean flag = false;
+                for (int j = 0; j <detectList.size() ; j++) {
+                    if(detectProductionList.get(k).getDetectProduction().equals(detectList.get(j).getDetectProduction())
+                            && Objects.equals(detectConfigList.get(i).getConfigId(), detectList.get(j).getConfigId())
+                        ){
+                        num[k] = detectList.get(j).getConfigNumber();
+                        flag =true;
+                    }
+                }
+                if(!flag){
+                    num[k] = 0;
+                }
+            }
+            DetectStatistics detectConfig = detectConfigList.get(i);
+            map.put(detectConfig.getConfigDetectContent(),num);
+            list.add(map);
+            cinfigList.add(detectConfigList.get(i).getConfigId());
+
+            if(i >= 2){
+                break;
+            }
+        }
+        msg.addResponseKeyValue("detectConfigList",detectConfigList);
+        msg.addResponseKeyValue("detectProductionList",detectProductionList);
+        msg.addResponseKeyValue("list",list);
+        msg.addResponseKeyValue("cinfigList",cinfigList);
+        return msg;
+    }
+
+    /**
+     * 跳转到统计页面
+     * @return
+     */
+    @RequiresPermissions("detect:statistics:detect")
+    @RequestMapping(value = "/to_select_config_statistic")
+    public ModelAndView toSelectConfigStatistic(HttpServletRequest request,Integer configId) {
+        ModelAndView mv = new ModelAndView("cm/inspection/detect_statistics_config");
+
+        DetectionConfig detectionConfig = new DetectionConfig();
+        detectionConfig.setConfigId(configId);
+        List<DetectionConfig>  configList = detectStatisticService.getDetectConfigByTypeList(detectionConfig);
+        detectionConfig = configList.get(0);
+
+        mv.addObject("detectionConfig",detectionConfig);
+        return mv;
+    }
+
+
+
+
+    /**
+     * 报表 - 按照各个检测类型分类统计固定生产时间内,机器损坏数量
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    @ResponseBody
+    @RequiresPermissions("detect:statistics:detect")
+    @RequestMapping("/select_config_statistic")
+    public ResponseJson selectConfigStatistic(HttpServletRequest request,DetectStatistics detectStatistics){
+        ResponseJson msg = ResponseJson.getSUCCESS();
+
+        //生产年份
+        List<DetectStatistics> detectProductionList = detectStatisticService.getDetectProductionList(detectStatistics);
+//        for (:) {
+//
+//        }
+
+        List<DetectStatistics> creatTimeList = detectStatisticService.getCreatTimeByConfigIdList(detectStatistics);
+
+        return msg;
+    }
+
 }
 

+ 17 - 16
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminSignclosedController.java

@@ -534,7 +534,7 @@ public class AdminSignclosedController {
             return;
         }*/
         String[] cells = {
-                "序号","维修编号","产品名称","生产月份","机身条码","是否少件",
+                "序号","维修编号","物流单号","产品名称","生产月份","机身条码","是否少件",
                 "退货地区","返厂日期","售后处理类型","工厂检测现象","是否翻新机","故障原因","判断结果","故障指向","原因分析","维修内容"
         };
         exportExcel2(request,res,cells,signclosedList);
@@ -607,10 +607,11 @@ public class AdminSignclosedController {
             }else{
                 row.createCell(1).setCellValue(info.getDetectNumber());
             }
-            row.createCell(2).setCellValue(productName);
-            row.createCell(3).setCellValue(info.getDetectProduction()==null?"":info.getDetectProduction());
-            row.createCell(4).setCellValue(info.getDetectFuselageBarcode()==null?"":info.getDetectProduction());
-            row.createCell(5).setCellValue(signclosedIsWhetherLess);
+            row.createCell(2).setCellValue(info.getSignclosedLogisticsNumber()==null?"":info.getSignclosedLogisticsNumber());
+            row.createCell(3).setCellValue(productName);
+            row.createCell(4).setCellValue(info.getDetectProduction()==null?"":info.getDetectProduction());
+            row.createCell(5).setCellValue(info.getDetectFuselageBarcode()==null?"":info.getDetectProduction());
+            row.createCell(6).setCellValue(signclosedIsWhetherLess);
             StringBuffer area = new StringBuffer(" ");
             if(info.getSignclosedAddrProvincesName() == null || info.getSignclosedAddrProvincesName().equals("")){
                 area.append("");
@@ -622,21 +623,21 @@ public class AdminSignclosedController {
             }else{
                 area.append("-"+info.getSignclosedAddrCityName());
             }
-            row.createCell(6).setCellValue(area.toString());
+            row.createCell(7).setCellValue(area.toString());
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
             if(info.getSignclosedDate()==null){
-                row.createCell(7).setCellValue( "");
+                row.createCell(8).setCellValue( "");
             }else{
-                row.createCell(7).setCellValue(sdf.format(info.getSignclosedDate()));
+                row.createCell(8).setCellValue(sdf.format(info.getSignclosedDate()));
             }
-            row.createCell(8).setCellValue(info.getProcMethodName()==null?"":info.getProcMethodName());
-            row.createCell(9).setCellValue(info.getDetectPhenomenon()==null?"":info.getDetectPhenomenon());
-            row.createCell(10).setCellValue(detectIsRefurbishing);
-            row.createCell(11).setCellValue(info.getDetectFailureCause()==null?"":info.getDetectFailureCause());
-            row.createCell(12).setCellValue(info.getDetectResults()==null?"":info.getDetectResults());
-            row.createCell(13).setCellValue(info.getDetectPoint()==null?"":info.getDetectPoint());
-            row.createCell(14).setCellValue(info.getDetectNalysis()==null?"":info.getDetectNalysis());
-            row.createCell(15).setCellValue(info.getDetectContent()==null?"":info.getDetectContent());
+            row.createCell(9).setCellValue(info.getProcMethodName()==null?"":info.getProcMethodName());
+            row.createCell(10).setCellValue(info.getDetectPhenomenon()==null?"":info.getDetectPhenomenon());
+            row.createCell(11).setCellValue(detectIsRefurbishing);
+            row.createCell(12).setCellValue(info.getDetectFailureCause()==null?"":info.getDetectFailureCause());
+            row.createCell(13).setCellValue(info.getDetectResults()==null?"":info.getDetectResults());
+            row.createCell(14).setCellValue(info.getDetectPoint()==null?"":info.getDetectPoint());
+            row.createCell(15).setCellValue(info.getDetectNalysis()==null?"":info.getDetectNalysis());
+            row.createCell(16).setCellValue(info.getDetectContent()==null?"":info.getDetectContent());
         }
         //下载导出订单Excel
         downloadOrderExcel(res,wb);

+ 2 - 32
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/detectController.java

@@ -1,49 +1,17 @@
 package com.iamberry.rst.controllers.cm;
 
-import com.iamberry.rst.core.cm.CompanyInfo;
-import com.iamberry.rst.core.cm.ComplaintQuestionInfo;
-import com.iamberry.rst.core.cm.ProcType;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.fm.*;
-import com.iamberry.rst.core.order.Product;
-import com.iamberry.rst.core.order.ProductColor;
-import com.iamberry.rst.core.order.ProductType;
-import com.iamberry.rst.core.page.PageRequest;
-import com.iamberry.rst.core.page.PagedResult;
-import com.iamberry.rst.core.sys.Admin;
-import com.iamberry.rst.core.tools.LogisticsInfo;
-import com.iamberry.rst.faces.cm.CompanyInfoService;
-import com.iamberry.rst.faces.cm.ProcTypeService;
 import com.iamberry.rst.faces.cm.SalesOrderService;
-import com.iamberry.rst.faces.fm.AwaitingSignclosedProductInfoService;
 import com.iamberry.rst.faces.fm.ComplaintDetectInfoService;
-import com.iamberry.rst.faces.fm.ComplaintSignclosedInfoService;
-import com.iamberry.rst.faces.fm.ComplaintSignclosedProductInfoService;
-import com.iamberry.rst.faces.product.ProductService;
-import com.iamberry.rst.service.cm.mapper.ComplaintQuestionInfoMapper;
-import com.iamberry.rst.service.sys.mapper.SysMapper;
-import com.iamberry.rst.utils.AdminUtils;
-import com.iamberry.rst.utils.GenerateKeyUtil;
-import com.iamberry.rst.utils.StitchAttrUtil;
 import com.iamberry.wechat.tools.ResponseJson;
-import org.apache.poi.hssf.usermodel.*;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -58,6 +26,7 @@ public class detectController {
     private ComplaintDetectInfoService complaintDetectInfoService;
     @Autowired
     private SalesOrderService salesOrderService;
+
     /**
      * 跳转到修改确认售后处理方式页面
      *
@@ -151,5 +120,6 @@ public class detectController {
         }
         return msg;
     }
+
 }
 

+ 80 - 8
watero-rst-web/src/main/java/com/iamberry/rst/controllers/dm/DmDealerController.java

@@ -31,7 +31,9 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 @Controller
 @RequestMapping("/admin/dealer")
@@ -54,6 +56,8 @@ public class DmDealerController {
     private CooperationAgreeService cooperationAgreeService;
     @Autowired
     private StoreInfoService storeInfoService;
+    @Autowired
+    private DealerChannelStoreService dealerChannelStoreService;
 
     /**
      * 查询客户基本信息列表
@@ -84,7 +88,9 @@ public class DmDealerController {
         if (totalNum != 0) {
             result.setTotal(totalNum);
         }
-        StitchAttrUtil.getSa().setModelAndView(dmDealer, mv, "/admin/dealer/list_page_dealer", result);
+        StitchAttrUtil.getSa()
+                .addNoPro("dealerContactList","dealerChannelList","dealerProductList","cooperationAgreeList")
+                .setModelAndView(dmDealer, mv, "/admin/dealer/list_page_dealer", result);
 
         mv.addObject("admin",admin);
 
@@ -133,6 +139,23 @@ public class DmDealerController {
         storeInfo.setStoreStatus(1);
         List<StoreInfo> storeInfoList = storeInfoService.listStore(storeInfo);
         mv.addObject("storeInfoList",storeInfoList);
+
+        List<DealerChannelStore> dealerChannelStoreList = new ArrayList<DealerChannelStore>();
+        String[] nameStr = new String[0];
+        if(dealerChannel.getStoreIdStr() != null && !"".equals(dealerChannel.getStoreIdStr() )){
+            nameStr = dealerChannel.getStoreIdStr().split(",");
+        }
+        for (String str : nameStr){
+            DealerChannelStore dealerChannelStore = new DealerChannelStore();
+            for (StoreInfo si : storeInfoList) {
+                if(Objects.equals(si.getStoreId(), Integer.valueOf(str))){
+                    dealerChannelStore.setStoreName(si.getStoreName());
+                }
+            }
+            dealerChannelStore.setStoreId(Integer.valueOf(str));
+            dealerChannelStoreList.add(dealerChannelStore);
+        }
+        mv.addObject("dealerChannelStoreList",dealerChannelStoreList);
         return mv;
     }
 
@@ -144,11 +167,11 @@ public class DmDealerController {
      */
     @RequiresPermissions(value={"dm:dealer:add","dm:dealer:update"},logical= Logical.OR)
     @RequestMapping("/to_add_dealer_product")
-    public ModelAndView toAddDealerProduct(HttpServletRequest request,DealerProduct dealerProduct,String storeJson) {
+    public ModelAndView toAddDealerProduct(HttpServletRequest request,DealerProduct dealerProduct,String dealerProductStoreJson) {
         ModelAndView mv = new ModelAndView("dm/dealer/add_dealer_product");
         mv.addObject("dealerProduct",dealerProduct);
 
-        JSONArray jsonArray = JSONArray.fromObject(storeJson);
+        JSONArray jsonArray = JSONArray.fromObject(dealerProductStoreJson);
         List<DealerProductStore> dealerProductStoreList =  (List) JSONArray.toCollection(jsonArray, DealerProductStore.class);
         mv.addObject("dealerProductStoreList",dealerProductStoreList);
         return mv;
@@ -323,6 +346,25 @@ public class DmDealerController {
         DealerChannel  dealerChannel = new DealerChannel();
         dealerChannel.setDealerId(dealerId);
         List<DealerChannel> dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+        for (DealerChannel dc:dealerChannelList) {
+            DealerChannelStore dealerChannelStore = new DealerChannelStore();
+            dealerChannelStore.setDealChannelId(dc.getDealChannelId());
+            List<DealerChannelStore> dealerChannelStoreList = dealerChannelStoreService.getDealerChannelStoreList(dealerChannelStore);
+            dc.setDealerChannelStoreList(dealerChannelStoreList);
+            //店铺
+            String storeNameStr="",storeIdStr="";
+            for (DealerChannelStore dcs: dealerChannelStoreList) {
+                if("".equals(storeNameStr)){
+                    storeIdStr += dcs.getStoreId();
+                    storeNameStr += dcs.getStoreName();
+                }else{
+                    storeIdStr += ","+ dcs.getStoreId();
+                    storeNameStr += ","+ dcs.getStoreName();
+                }
+            }
+            dc.setStoreIdStr(storeIdStr);
+            dc.setStoreNameStr(storeNameStr);
+        }
 
         DealerProduct  dealerProduct = new DealerProduct();
         dealerProduct.setDealerId(dealerId);
@@ -336,11 +378,11 @@ public class DmDealerController {
                 String dealerProductStoreName="";
                 for (DealerProductStore dps:dealerProductStoreList) {
                     if("".equals(dealerProductStoreIds)){
-                        dealerProductStoreIds = String.valueOf(dps.getStoreId());
-                        dealerProductStoreName = dps.getStoreName();
+                        dealerProductStoreIds = String.valueOf(dps.getDealChannelId());
+                        dealerProductStoreName = dps.getDealChannelName();
                     }else{
-                        dealerProductStoreIds += "," + String.valueOf(dps.getStoreId());
-                        dealerProductStoreName += "," +  dps.getStoreName();
+                        dealerProductStoreIds += "," + String.valueOf(dps.getDealChannelId());
+                        dealerProductStoreName += "," + dps.getDealChannelName();
                     }
                 }
                 dp.setDealerProductStoreIds(dealerProductStoreIds);
@@ -366,7 +408,7 @@ public class DmDealerController {
      * @return
      */
     @ResponseBody
-    @RequiresPermissions("dm:supplier:update")
+    @RequiresPermissions("dm:dealer:update")
     @RequestMapping("/dealere_update")
     public ResponseJson dealereUpdate(HttpServletRequest request,DmDealer dmDealer,
                                     String add_contact_json,String add_dealer_channel_json,String add_product_json,String add_coop_agree_json) {
@@ -447,4 +489,34 @@ public class DmDealerController {
         }
     }
 
+
+    /**
+     * 删除
+     * @param request
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("dm:dealer:delete")
+    @RequestMapping("/delete_dealer")
+    public ResponseJson deleteDealer(HttpServletRequest request,Integer dealerId) {
+        ResponseJson rj = ResponseJson.getSUCCESS();
+
+        Admin admin = AdminUtils.getLoginAdmin();
+        if(admin.getAdminDept() != 1){
+            rj.setResultMsg("对不起,你没有权限!");
+            return rj;
+        }
+
+        Integer flag = 0;
+        flag = dmDealerService.deleteDealer(dealerId);
+
+        if(flag > 0){
+            rj.setResultMsg("删除成功");
+            return rj;
+        }else{
+            rj = ResponseJson.getFAILURE();
+            return  rj;
+        }
+    }
+
 }

+ 147 - 45
watero-rst-web/src/main/java/com/iamberry/rst/controllers/dm/FinanciaReceController.java

@@ -1,14 +1,17 @@
 package com.iamberry.rst.controllers.dm;
 
-import com.iamberry.rst.core.cm.CompanyInfo;
+import com.iamberry.rst.core.cm.PostageInfo;
 import com.iamberry.rst.core.cm.SalesOrder;
-import com.iamberry.rst.core.cm.SalesOrderItem;
-import com.iamberry.rst.core.dm.*;
+import com.iamberry.rst.core.cm.StoreInfo;
+import com.iamberry.rst.core.dm.ClaimOrder;
+import com.iamberry.rst.core.dm.DmDealer;
+import com.iamberry.rst.core.dm.FinancialReceipt;
 import com.iamberry.rst.core.page.PageRequest;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.sys.Admin;
 import com.iamberry.rst.faces.cm.CompanyInfoService;
 import com.iamberry.rst.faces.cm.SalesOrderService;
+import com.iamberry.rst.faces.cm.StoreInfoService;
 import com.iamberry.rst.faces.dm.*;
 import com.iamberry.rst.faces.sys.SysService;
 import com.iamberry.rst.utils.AdminUtils;
@@ -52,6 +55,8 @@ public class FinanciaReceController {
     private DealerProductService dealerProductService;
     @Autowired
     private CompanyInfoService companyInfoService;
+    @Autowired
+    private StoreInfoService storeInfoService;
 
 
     /**
@@ -72,6 +77,13 @@ public class FinanciaReceController {
         Admin admin = AdminUtils.getLoginAdmin();
         mv.addObject("admin",admin);
 
+
+        if(admin.getAdminDept() != 1 && admin.getAdminDept() != 5){
+            //获取登录员工id
+            Integer adminId = AdminUtils.getLoginAdminId();
+            financialReceipt.setDealerAdminId(adminId);
+        }
+
         // 封装请求数据
         PageRequest<FinancialReceipt> pageRequest = new PageRequest<>(financialReceipt, pageNO, pageSize, totalNum == 0);
         // 查询订单列表
@@ -230,6 +242,9 @@ public class FinanciaReceController {
         mv.addObject("frId",frId);
         mv.addObject("type",type);
 
+        FinancialReceipt fr = financialReceiptService.getFinancialReceiptById(frId);
+        mv.addObject("fr",fr);
+
         //获取登录员工id
         Integer adminId = AdminUtils.getLoginAdminId();
 
@@ -365,46 +380,46 @@ public class FinanciaReceController {
             salesOrder.setSalesIds(salesIds);
         }
         List<SalesOrder> salesOrderList = salesOrderService.salesOrderListAndItem(salesOrder);
-        DmDealer dmDealer = dmDealerService.getDmDealerById(dealerId);
-
-        // 是否自营 1:自营 2:非自营
-        if(dmDealer.getDealerSelfOperated() == 2){
-            DealerChannel  dealerChannel = new DealerChannel();
-            dealerChannel.setDealerId(dealerId);
-            List<DealerChannel> dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
-
-            DealerProduct dealerProduct = new DealerProduct();
-            dealerProduct.setDealerId(dealerId);
-            List<DealerProduct> dealerProductList = dealerProductService.getDealerProductAndStoreList(dealerProduct);
-
-            for (SalesOrder so : salesOrderList) {
-                for (SalesOrderItem salesOrderItem:so.getSalesOrderItemList()) {
-                    salesOrderItem.setItemTotal(0);
-                    for (DealerProduct dp:dealerProductList) {
-                        if(Objects.equals(salesOrderItem.getItemColorId(), dp.getColorId())){
-                            if(dp.getDealProdStoreArea() == 1){
-                                //店铺范围 1:全部店铺
-                                for (DealerChannel dc:dealerChannelList) {
-                                    if(Objects.equals(dc.getStoreId(), so.getSalesStoreId())){
-                                        salesOrderItem.setItemTotal(salesOrderItem.getItemNum() * dp.getDealProdPrice());
-                                        break;
-                                    }
-                                }
-                            }else if (dp.getDealProdStoreArea() == 2){
-                                //2:部分店铺
-                                for (DealerProductStore dps:dp.getDealerProductStoreList()) {
-                                    if(Objects.equals(so.getSalesStoreId(), dps.getStoreId())){
-                                        salesOrderItem.setItemTotal(salesOrderItem.getItemNum() * dp.getDealProdPrice());
-                                        break;
-                                    }
-                                }
-                            }
-                            break;
-                        }
-                    }
-                }
-            }
-        }
+
+//        DmDealer dmDealer = dmDealerService.getDmDealerById(dealerId);
+//        // 是否自营 1:自营 2:非自营
+//        if(dmDealer.getDealerSelfOperated() == 2){
+//            DealerChannel  dealerChannel = new DealerChannel();
+//            dealerChannel.setDealerId(dealerId);
+//            List<DealerChannel> dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+//
+//            DealerProduct dealerProduct = new DealerProduct();
+//            dealerProduct.setDealerId(dealerId);
+//            List<DealerProduct> dealerProductList = dealerProductService.getDealerProductAndStoreList(dealerProduct);
+//
+//            for (SalesOrder so : salesOrderList) {
+//                for (SalesOrderItem salesOrderItem:so.getSalesOrderItemList()) {
+//                    salesOrderItem.setItemTotal(0);
+//                    for (DealerProduct dp:dealerProductList) {
+//                        if(Objects.equals(salesOrderItem.getItemColorId(), dp.getColorId())){
+//                            if(dp.getDealProdStoreArea() == 1){
+//                                //店铺范围 1:全部店铺
+//                                for (DealerChannel dc:dealerChannelList) {
+//                                    if(Objects.equals(dc.getStoreId(), so.getSalesStoreId())){
+//                                        salesOrderItem.setItemTotal(salesOrderItem.getItemNum() * dp.getDealProdPrice());
+//                                        break;
+//                                    }
+//                                }
+//                            }else if (dp.getDealProdStoreArea() == 2){
+//                                //2:部分店铺
+//                                for (DealerProductStore dps:dp.getDealerProductStoreList()) {
+//                                    if(Objects.equals(so.getSalesStoreId(), dps.getStoreId())){
+//                                        salesOrderItem.setItemTotal(salesOrderItem.getItemNum() * dp.getDealProdPrice());
+//                                        break;
+//                                    }
+//                                }
+//                            }
+//                            break;
+//                        }
+//                    }
+//                }
+//            }
+//        }
         ResponseJson rj = new ResponseJson(200, "查询成功", 200);
         rj.addResponseKeyValue("salesOrderList", salesOrderList);
         return rj;
@@ -426,10 +441,97 @@ public class FinanciaReceController {
         }
 
         //获取销售公司
-        List<CompanyInfo> companyInfoList = companyInfoService.listCompanyInfo(new CompanyInfo());
-        mv.addObject("companyInfoList", companyInfoList);
+//        List<CompanyInfo> companyInfoList = companyInfoService.listCompanyInfo(new CompanyInfo());
+//        mv.addObject("companyInfoList", companyInfoList);
+
+        DmDealer dmDealer = new DmDealer();
+        dmDealer.setDealerStatus(1);
+        List<DmDealer>  dmDealerList = dmDealerService.getDmDealerList(dmDealer);
+        mv.addObject("dmDealerList", dmDealerList);
+
         mv.addObject("salesOrder", salesOrder);
         return mv;
     }
 
+    /**
+     * 到选择订单页面
+     * @param request
+     * @return
+     */
+    @RequestMapping("/to_select_post")
+    public ModelAndView toSelectPost(HttpServletRequest request,Integer dealerId){
+        ModelAndView mv = new ModelAndView("dm/financialReceipt/select_post_list");
+        //获取销售公司
+//        List<CompanyInfo> companyInfoList = companyInfoService.listCompanyInfo(new CompanyInfo());
+//        mv.addObject("companyInfoList", companyInfoList);
+
+        DmDealer dmDealer = new DmDealer();
+        dmDealer.setDealerStatus(1);
+        List<DmDealer>  dmDealerList = dmDealerService.getDmDealerList(dmDealer);
+
+        mv.addObject("dmDealerList", dmDealerList);
+        mv.addObject("dealerId", dealerId);
+        return mv;
+    }
+
+    /**
+     * 获取店铺集合
+     * @param request
+     * @param storeInfo
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/select_storeInfo_by_dealer")
+    public ResponseJson selectStoreInfoByDealer(HttpServletRequest request, StoreInfo storeInfo) {
+        storeInfo.setStoreStatus(1);
+        List<StoreInfo> storeInfoList = storeInfoService.listStoreByDealer(storeInfo);
+        ResponseJson rj = new ResponseJson(200, "查询成功", 200);
+        rj.addResponseKeyValue("storeInfoList", storeInfoList);
+        return rj;
+    }
+    /**
+     * 删除收款
+     * @param request
+     * @param frId
+     * @return
+     */
+    @ResponseBody
+    @RequiresPermissions("dm:financialReceipt:delete")
+    @RequestMapping(value = "/delete_fr")
+    public ResponseJson deleteFr(HttpServletRequest request, Integer frId) {
+        Integer flag = financialReceiptService.delete(frId);
+        if(flag > 0){
+            ResponseJson rj = ResponseJson.getSUCCESS();
+            return rj;
+        }else{
+            ResponseJson rj = ResponseJson.getFAILURE();
+            return rj;
+        }
+    }
+
+    /**
+     * 获取邮费列表
+     * @param request
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/select_post")
+    public ResponseJson selectPost(HttpServletRequest request,PostageInfo postageInfo,
+                                    @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize,
+                                   @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO,
+                                   @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum) {
+        ResponseJson rj = new ResponseJson(200, "查询成功", 200);
+        // 封装请求数据
+        PageRequest<PostageInfo> pageRequest = new PageRequest<>(postageInfo, pageNO, pageSize, totalNum == 0);
+        // 查询订单列表
+        PagedResult<PostageInfo> pagedResult = financialReceiptService.getPostageInfoList(pageRequest);
+        if (totalNum != 0) {
+            pagedResult.setTotal(totalNum);
+        }
+        rj.addResponseKeyValue("pagedResult", pagedResult);
+        return rj;
+    }
+
+
+
 }

+ 132 - 19
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderController.java

@@ -5,6 +5,8 @@ import com.iamberry.rst.core.address.District;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
 import com.iamberry.rst.core.cm.StoreInfo;
+import com.iamberry.rst.core.dm.DealerChannel;
+import com.iamberry.rst.core.dm.DealerProduct;
 import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.page.PageRequest;
 import com.iamberry.rst.core.page.PagedResult;
@@ -18,6 +20,8 @@ import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.address.AddressService;
 import com.iamberry.rst.faces.cm.SalesOrderService;
 import com.iamberry.rst.faces.cm.StoreInfoService;
+import com.iamberry.rst.faces.dm.DealerChannelService;
+import com.iamberry.rst.faces.dm.DealerProductService;
 import com.iamberry.rst.faces.order.EfastOrderService;
 import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.order.OrderBatchService;
@@ -93,14 +97,17 @@ public class AdminOrderController {
     private OrderBatchService orderBatchService;
     @Autowired
     private LogisticsInfoService logisticsInfoService;
-
+    @Autowired
+    private DealerChannelService dealerChannelService;
     @Autowired
     private ExcelUtil excelUtil;
     @Autowired
     private GenerateKeyUtil generateKeyUtil;
-
     @Autowired
     private AddressService addressService;
+    @Autowired
+    private DealerProductService dealerProductService;
+
     /**
      * 进入更换滤芯页面
      *
@@ -994,7 +1001,6 @@ public class AdminOrderController {
                                        @RequestParam("isOtherStore") Integer isOtherStore,
                                        @RequestParam("storeArray[]") String[] storeArray,
                                        @RequestParam("orderBatch") String orderBatch,
-                                       @RequestParam("selfOperated") Integer selfOperated,
                                        HttpServletRequest request) throws Exception {
         logger.info("-----------根据excel内容推送到百胜开始,Excel路径:"+ filePath +"-----------");
 
@@ -1010,7 +1016,7 @@ public class AdminOrderController {
         }
         // 读取文件中内容
         List<EfastOrder> orderEfasts = excelUtil.readCell(request.getServletContext().getRealPath(filePath),
-                productName, maps, infos, tel, name,platformOrder, num,discount,remark, priceMap, postType,orderStoreInfoSt,isOtherStore, storeArray,selfOperated);
+                productName, maps, infos, tel, name,platformOrder, num,discount,remark, priceMap, postType,orderStoreInfoSt,isOtherStore, storeArray);
         logger.info("---------orderEfasts订单个数为:"+orderEfasts.size() + "------------");
 
         //Efast升级 2018-6-8
@@ -1046,17 +1052,113 @@ public class AdminOrderController {
              salesOrders.setSalesBatchId(batchId);
              //增加订单方式 1:手动增加 2:Excel导入
 
-             //计算订单总金额
-             Integer itemProductPrice=0;   //产品市场价
-             Integer itemProductDiscount=0; //产品折扣价
-             for (SalesOrderItem salesOrderItem:salesOrders.getSalesOrderItemList()) {
-                 itemProductPrice += salesOrderItem.getItemProductPrice() * salesOrderItem.getItemNum();
-                 itemProductDiscount += salesOrderItem.getItemProductDiscount() * salesOrderItem.getItemNum();
-             }
-             salesOrders.setSalesAmount(itemProductPrice);
-             salesOrders.setSalesPayMoney(itemProductDiscount);
+             try{
+                 DealerChannel dealerChannel = new DealerChannel();
+                 boolean flag = true;
+                 if(salesOrders.getSalesStoreId() != null){
+                     dealerChannel.setStoreId(salesOrders.getSalesStoreId());
+                     List<DealerChannel>  dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+                     if(dealerChannelList!= null && dealerChannelList.size() > 0){
+                         dealerChannel = dealerChannelList.get(0);
+                     }else{
+                         salesOrders.setSalesDealCode("1");  //salesDealCode
+                         throw new Exception("订单导入失败-查询店铺对应客户信息失败,店铺ID:"+salesOrders.getSalesStoreId()+"。");
+                     }
+
+                     DealerProduct smallDp = new DealerProduct();
+                     smallDp.setDealerId(dealerChannel.getDealerId());
+                     smallDp.setDealChannelId(dealerChannel.getDealChannelId());
+                     List<DealerProduct> smallDpList = dealerProductService.getProductByChannelList(smallDp);
+
+                     //表示分配剩余总金额
+                     Integer lastTotal = salesOrders.getSalesAmount();
+                     for (int p =0 ;p<salesOrders.getSalesOrderItemList().size(); p++ ){
+                         SalesOrderItem salesOrderItem = salesOrders.getSalesOrderItemList().get(p);
+
+                         //获取当前该产品对应客户的价格
+                         Integer newPrice=0;
+                         if(smallDpList != null && smallDpList.size() > 0){
+                             boolean isHaveColorId = false;
+                             for (DealerProduct dp:smallDpList) {
+                                 if(Objects.equals(dp.getColorId(), salesOrderItem.getItemColorId())){
+                                     if(1 == dp.getDealProdStoreArea()){
+                                         // 1:全部店铺
+                                         newPrice = dp.getDealProdPrice();
+                                     }else{
+                                         // 2:部分店铺
+                                         //for (DealerProductStore dps:dp.getDealerProductStoreList()) {
+                                             //if(salesOrders.getSalesStoreId().equals(dps.getStoreId())){
+                                              //   newPrice = dp.getDealProdPrice();
+                                             //}
+                                         //}
+                                         newPrice = dp.getDealProdPrice();
+                                     }
+                                     isHaveColorId = true;
+                                 }
+                             }
+                             if(!isHaveColorId){
+                                 salesOrders.setSalesDealCode("1");  //salesDealCode
+                                 throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
+                             }
+                         }else{
+                             salesOrders.setSalesDealCode("1");  //salesDealCode
+                             throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
+                         }
+
+                         if(flag){
+                             if(1 == dealerChannel.getDealerSelfOperated()){
+                                 //是否自营 1:自营
+
+                                 if((p+1) >= salesOrders.getSalesOrderItemList().size() ) {
+                                     //最后一个赋值剩余值,防止出现少一分的情况
+                                     salesOrderItem.setItemTotal(lastTotal);
+                                 }else{
+                                     //计算订单总价(*数量)  因为上面判断了单个,所以订单项最低也会有一个,不可能为0
+                                     Integer allPrice = 0;
+                                     for ( SalesOrderItem sdi : salesOrders.getSalesOrderItemList()){
+                                         for (DealerProduct dp:smallDpList) {
+                                            if(Objects.equals(dp.getColorId(),sdi.getItemColorId())){
+                                                allPrice += sdi.getItemNum()*dp.getDealProdPrice();
+                                            }
+                                         }
+                                     }
+
+                                     //当前产品总价
+                                     Integer aoncePrice = newPrice*salesOrderItem.getItemNum();
+
+                                     //计算比例
+                                     Double priceRate = Double.valueOf(aoncePrice) / Double.valueOf(allPrice);
+
+                                     //当前订单项按照比例得出的实际总价
+                                     Double itemTotalByDouble = lastTotal * priceRate;
+                                     Integer itemTotal = itemTotalByDouble.intValue();
+                                     salesOrderItem.setItemTotal(itemTotal);
+                                     //减去当前订单项的金额
+                                     lastTotal -= itemTotal;
+                                 }
+                             }else{
+                                 //2:非自营
+                                 salesOrderItem.setItemProductDiscount(newPrice);
+                                 salesOrderItem.setItemProductPrice(newPrice);
+                                 salesOrderItem.setItemTotal(newPrice*salesOrderItem.getItemNum());
+                             }
+                         }
+                     }
+                 }else{
+                     salesOrders.setSalesDealCode("1");  //salesDealCode
+                     throw new Exception("订单导入-获取店铺ID失败,店铺ID:"+salesOrders.getSalesStoreId()+"。");
+                 }
+
+                 //计算订单总金额
+//                 Integer itemProductPrice=0;   //产品市场价
+//                 Integer itemProductDiscount=0; //产品折扣价
+                 for (SalesOrderItem salesOrderItem:salesOrders.getSalesOrderItemList()) {
+                     salesOrderItem.setItemProductPrice(0);
+                     salesOrderItem.setItemProductDiscount(0);
+                 }
+                 salesOrders.setSalesPayMoney(salesOrders.getSalesAmount());
+
 
-                try{
 //                    bl = salesOrderService.addRstOrderAndIteminfo(salesOrders);
 //                    if(bl == false){
 //                        logger.info("合并订单出错+:"+bl + "错误交易号为:"+salesDealCode);
@@ -1072,7 +1174,8 @@ public class AdminOrderController {
 //                        sb.append(salesDealCode+"\r\n");
 //                    }
                     bl = salesOrderService.addRstOrderinfo(salesOrders,new ArrayList<SalesOrder>(),null);
-                }catch (RuntimeException e){
+                }catch (Exception e){
+                    e.printStackTrace();
                     logger.info("插入订单失败;错误信息" + e.getMessage());
                     for(EfastOrder efastOrderStyle:orderEfasts){
                         if(salesDealCode.equals(efastOrderStyle.getPlatformOrderId())){
@@ -1135,6 +1238,8 @@ public class AdminOrderController {
             }
             String orderId = efastOrder.getPlatformOrderId();
             salesOrder = mapsalesOrderList.get(orderId);
+
+            Integer total = -1;
             if (salesOrder == null) {
                 // 没有订单
                 salesOrderList = new ArrayList<SalesOrder>();
@@ -1160,13 +1265,18 @@ public class AdminOrderController {
                     salesOrderItem.setItemProductPic(productColor.getColorPicture());
                     salesOrderItem.setItemProductColor(productColor.getColorName());
                     salesOrderItem.setItemColorBar(productColor.getColorBar());
-                    salesOrderItem.setItemProductPrice(efastOrder.getOrderProductPrice());
-                    salesOrderItem.setItemProductDiscount(efastOrder.getOrderProductDiscount());
+                    salesOrderItem.setItemTotal(efastOrder.getOrderTotal());
+//                    salesOrderItem.setItemProductPrice(efastOrder.getOrderProductPrice());
+//                    salesOrderItem.setItemProductDiscount(efastOrder.getOrderProductDiscount());
+                    total = efastOrder.getOrderTotal();
                     salesOrderItem.setItemIsSource(1);
                 }
                 salesOrderItemList.add(salesOrderItem);
                 salesAmount += productColor.getColorDiscount();
 
+                salesOrder.setSalesAmount(total);
+                salesOrder.setSalesPayMoney(total);
+
                 salesOrder.setSalesOpenId("0");
                 salesOrder.setSalesDiscountMoney(salesAmount);
                 salesOrder.setSalesPledgeMoney(salesAmount);
@@ -1189,6 +1299,11 @@ public class AdminOrderController {
                     String newArea  = efastOrder.getOrderArea();
                     newArea = newArea.replaceAll("高新技术产业开发区|高新技术开发区|技术开发区|经济开发区|自治区|地区|自治县","");
 
+                    //去掉全角和半角空格
+                    byte bytes[] = {(byte) 0xC2,(byte) 0xA0};
+                    String UTFSpace = new String(bytes,"utf-8");
+                    newArea = newArea.replaceAll(UTFSpace, "");
+
                     String lastNewArea  = newArea.substring(newArea.length()-1,newArea.length());
                     lastNewArea = lastNewArea.replaceAll("县|区|镇|乡|市|州|洲","");
 
@@ -1208,8 +1323,6 @@ public class AdminOrderController {
 
                 salesOrder.setSalesAddressTel(efastOrder.getOrderAddressTel());
                 salesOrder.setSalesAddressName(efastOrder.getOrderAddressName());
-//                salesOrder.setSalesAmount(efastOrder.getOrderAmount());
-//                salesOrder.setSalesPayMoney(efastOrder.getOrderPayMoney());
                 salesOrder.setSalesPayType(1);
                 salesOrder.setSalesWaitMoney(efastOrder.getOrderAmount() - efastOrder.getOrderPayMoney());
                 salesOrder.setSalesShippingFee(0);

+ 98 - 6
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java

@@ -1,6 +1,12 @@
 package com.iamberry.rst.controllers.order;
 
-import com.iamberry.rst.core.cm.*;
+import com.iamberry.rst.core.cm.CompanyInfo;
+import com.iamberry.rst.core.cm.SalesOrder;
+import com.iamberry.rst.core.cm.SalesOrderItem;
+import com.iamberry.rst.core.cm.StoreInfo;
+import com.iamberry.rst.core.dm.DealerChannel;
+import com.iamberry.rst.core.dm.DealerProduct;
+import com.iamberry.rst.core.dm.DealerProductStore;
 import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.sys.Admin;
@@ -8,6 +14,8 @@ import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.cm.CompanyInfoService;
 import com.iamberry.rst.faces.cm.SalesOrderService;
 import com.iamberry.rst.faces.cm.StoreInfoService;
+import com.iamberry.rst.faces.dm.DealerChannelService;
+import com.iamberry.rst.faces.dm.DealerProductService;
 import com.iamberry.rst.faces.order.EfastOrderService;
 import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.order.OrderBatchService;
@@ -70,6 +78,10 @@ public class AdminSalesOrderController {
     private SmsService smsService;
     @Autowired
     private OrderWarehouseService orderWarehouseService;
+    @Autowired
+    private DealerChannelService dealerChannelService;
+    @Autowired
+    private DealerProductService dealerProductService;
     /**
      * 分页查询订单列表信息
      * @param request
@@ -1191,20 +1203,27 @@ public class AdminSalesOrderController {
         Integer flag = 0;
         String errorId = "";
             for (Integer salesIds : salesOrderIds) {
+                String msg = "";
                 if(isSplit != null && isSplit == 1){
                     try {
                         flag = salesOrderService.confirmSalesOrder(salesIds);
                     } catch (Exception e) {
+                        msg = e.getMessage();
                         e.printStackTrace();
                     }
                 }else if(isSplit != null && isSplit == 2){
-                    SalesOrder salesOrder = new SalesOrder();
-                    salesOrder.setSalesId(salesIds);
-                    salesOrder.setSalesStatus(1);
-                    flag = salesOrderService.updateSalesOrder(salesOrder);
+                    try {
+                        SalesOrder salesOrder = new SalesOrder();
+                        salesOrder.setSalesId(salesIds);
+                        salesOrder.setSalesStatus(1);
+                        flag = salesOrderService.updateSalesOrder(salesOrder);
+                    } catch (Exception e) {
+                        msg = e.getMessage();
+                        e.printStackTrace();
+                    }
                 }
                 if (flag < 1) {
-                    errorId += salesIds + ",";
+                    errorId += salesIds + ":" + msg + ";";
                 }
             }
             if (errorId.length() > 0) {
@@ -1932,4 +1951,77 @@ public class AdminSalesOrderController {
         rj.addResponseKeyValue("pagedResult", pagedResult);
         return rj;
     }
+
+    @ResponseBody
+    @RequestMapping("/get_product")
+    public ResponseJson getProduct(HttpServletRequest request, ProductColor productColor,Integer storeId,Integer salesOrderStatus) throws Exception {
+        ResponseJson rj =  new ResponseJson(200, "SUCCESS", 200);
+
+        if(productColor.getColorIds()!=null && !"".equals(productColor.getColorIds())){
+            String[] colorIdStr = productColor.getColorIds().split("_");
+            productColor.setColorIdStr(colorIdStr);
+        }
+        productColor.setColorStatus(1);
+        List<ProductColor> productColorList = productService.listproductAndColor(productColor);
+
+        //是否自营 1:自营 2:非自营
+        Integer dealerSelfOperated=0;
+        if(salesOrderStatus == 1){
+            DealerChannel dealerChannel = new DealerChannel();
+            boolean flag = true;
+            if(storeId != null){
+
+                StoreInfo storeInfo = storeInfoService.getStoreInfoById(storeId);
+
+                dealerChannel.setStoreId(storeId);
+                List<DealerChannel>  dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+                if(dealerChannelList!= null && dealerChannelList.size() > 0){
+                    dealerChannel = dealerChannelList.get(0);
+                }else{
+                    rj = ResponseJson.getFAILURE();
+                    rj.setResultMsg("查询店铺对应客户信息失败,店铺名称:"+storeInfo.getStoreName());
+                    return rj;
+                }
+
+                dealerSelfOperated = dealerChannel.getDealerSelfOperated();
+
+                if(2 == dealerChannel.getDealerSelfOperated()){
+                    //2:非自营
+                    for (ProductColor pc:productColorList) {
+                        DealerProduct dealerProduct = new DealerProduct();
+                        dealerProduct.setDealerId(dealerChannel.getDealerId());
+                        dealerProduct.setColorBar(pc.getColorBar());
+                        List<DealerProduct> dealerProductList = dealerProductService.getDealerProductAndStoreList(dealerProduct);
+                        if(dealerProductList != null && dealerProductList.size() > 0){
+                            for (DealerProduct dp:dealerProductList) {
+                                if(1 == dp.getDealProdStoreArea()){
+                                    // 1:全部店铺
+                                    pc.setColorDiscount(dp.getDealProdPrice());
+                                    pc.setColorPrice(dp.getDealProdPrice());
+                                }else{
+                                    // 2:部分店铺
+                                    for (DealerProductStore dps:dp.getDealerProductStoreList()) {
+                                        if(storeId.equals(dps.getStoreId())){
+                                            pc.setColorDiscount(dp.getDealProdPrice());
+                                            pc.setColorPrice(dp.getDealProdPrice());
+                                        }
+                                    }
+                                }
+                            }
+                        }else{
+                            rj = ResponseJson.getFAILURE();
+                            rj.setResultMsg("未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+";产品名称:"+ pc.getProductName() +"("+ pc.getColorName() +")。");
+                        }
+                    }
+                }
+            }else{
+                rj = ResponseJson.getFAILURE();
+                rj.setResultMsg("查询店铺对应客户信息失败,店铺ID为空。");
+                return rj;
+            }
+        }
+        rj.addResponseKeyValue("productColorList",productColorList);
+        rj.addResponseKeyValue("dealerSelfOperated",dealerSelfOperated);
+        return rj;
+    }
 }

+ 1 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -285,6 +285,7 @@ public class AwaitSendController {
             eOrderRequestData.CustomerName = ("爱贝源");
             eOrderRequestData.CustomerPwd = ("sto87891799*");
             eOrderRequestData.SendSite = ("广东东莞清溪分部");
+            eOrderRequestData.TemplateSize = ("130");
         } else if (post.equalsIgnoreCase("DBL")) {
             //德邦 (360特惠件)
             eOrderRequestData.CustomerName = ("651476854");

+ 165 - 38
watero-rst-web/src/main/java/com/iamberry/rst/utils/ExcelUtil.java

@@ -4,14 +4,18 @@ import com.iamberry.rst.core.order.EfastOrder;
 import com.iamberry.rst.core.order.ProductColor;
 import com.iamberry.rst.core.pts.PtsBomComponents;
 import com.iamberry.rst.faces.cm.SalesOrderService;
+import com.iamberry.rst.faces.dm.DealerChannelService;
+import com.iamberry.rst.faces.dm.DealerProductService;
 import com.iamberry.wechat.tools.AddrUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -36,6 +40,10 @@ public class ExcelUtil {
 
     @Autowired
     private SalesOrderService salesOrderService;
+    @Autowired
+    private DealerChannelService dealerChannelService;
+    @Autowired
+    private DealerProductService dealerProductService;
 
     /**
      * 读取Excel文件头
@@ -371,8 +379,8 @@ public class ExcelUtil {
 
 
     public List<EfastOrder> readCell(String filePath, String productName, String[] maps,
-                                     String[] infos, String tel, String name, String platformOrder, String num, String discount, String remark,
-                                     Map<String, ProductColor> price, String postType, String orderStoreInfoSt, Integer isOtherStore, String[] storeArray, Integer selfOperated)
+                                            String[] infos, String tel, String name,String platformOrder, String num, String discount,String remark,
+                                            Map<String, ProductColor> price, String postType, String orderStoreInfoSt, Integer isOtherStore,String[] storeArray)
             throws IOException {
         Map<String, String> map = new HashMap<>();
         for (String t : maps) {
@@ -463,15 +471,22 @@ public class ExcelUtil {
         cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
         cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
 
+        EfastOrder remmendOrder = new EfastOrder();
+
         // 读取数据
         int oid = 0;
         int errorNum = 0;
+        int rowNum=0;
         while (rows.hasNext()) {
+            rowNum ++;
             Row temp = rows.next();
             try {
                 if (errorNum > 5) {
                     break;
                 }
+                //判断当前行是否
+                Integer isRowHaveVal = 0,sonErrorNum=0;
+
                 EfastOrder order = new EfastOrder();
                 // 读取name
                 String nameValue = getValue(temp.getCell(nameColumnIndex));
@@ -484,22 +499,28 @@ public class ExcelUtil {
                 // 读取对应的产品id
                 String OrderProductBarCodeValue = map.get(getValue(temp.getCell(productColumnIndex)).trim());
                 if (StringUtils.isEmpty(nameValue)) {
-                    errorNum++;
+                    sonErrorNum++;
                     order.setReturnStatus("error");
                     order.setReturnMsg("姓名为空-交易号:" + platformOrderIdValue);
                     order.setPlatformOrderId("1");
+                    isRowHaveVal++;
                 }
                 if (StringUtils.isEmpty(userTel)) {
-                    errorNum++;
+                    sonErrorNum++;
                     order.setReturnStatus("error");
                     order.setReturnMsg("手机号码为空-交易号:" + platformOrderIdValue);
                     order.setPlatformOrderId("1");
+                    isRowHaveVal++;
                 }
                 if (StringUtils.isEmpty(OrderProductBarCodeValue)) {
-                    errorNum++;
+                    sonErrorNum++;
                     order.setReturnStatus("error");
                     order.setReturnMsg("交易号出错-交易号:" + platformOrderIdValue);
                     order.setPlatformOrderId("1");
+                    isRowHaveVal++;
+                }
+                if(sonErrorNum > 2){
+                    errorNum ++;
                 }
 
                 order.setOrderAddressName(nameValue);
@@ -529,6 +550,7 @@ public class ExcelUtil {
                     order.setReturnMsg("手机号码不正确");
                     order.setPlatformOrderId("1");
                 }
+
                 order.setOrderAddressTel(userTel.trim());
 
                 Integer orderNumByInt = 1;    //数量
@@ -550,32 +572,13 @@ public class ExcelUtil {
                 }
                 order.setOrderRemark(orderRemark);
 
-                String colorDiscount = "0";
-                if (selfOperated == 1) {
-                    colorDiscount = getValue(temp.getCell(discountColumnIndex)).trim();
-                    if (colorDiscount != null && !"".equals(colorDiscount)) {
-                        colorDiscount = colorDiscount.replaceAll("\\r|\\r|\\n", "");
-                    }
-                    if (colorDiscount == null || "".equals(colorDiscount)) {
-                        order.setReturnStatus("error");
-                        order.setReturnMsg("价格不正确");
-                        // 读取购买数量
-                        order.setOrderProductDiscount(0);
-                        order.setOrderProductPrice(0);
-                    } else {
-                        // 读取购买数量
-                        Double colorDiscountDou = Double.valueOf(colorDiscount);
-                        colorDiscountDou = colorDiscountDou * 100 / orderNumByInt;
-                        order.setOrderProductDiscount(colorDiscountDou.intValue());
-                        order.setOrderProductPrice(colorDiscountDou.intValue());
-                        Double orderTotal = Double.valueOf(colorDiscount);
-                        orderTotal = orderTotal * 100;
-                        order.setOrderTotal(orderTotal.intValue());
-                    }
-                } else {
-                    order.setOrderProductDiscount(0);
-                    order.setOrderProductPrice(0);
-                    order.setOrderTotal(0);
+                if(isRowHaveVal >= 2){
+                    BeanUtils.copyProperties(remmendOrder,order);
+                    order.setOrderProductBarCode(OrderProductBarCodeValue);
+                    order.setOrderNum(orderNumByInt);
+                    order.setOrderProductName(price.get(order.getOrderProductBarCode()).getColorName());
+                    orderEfasts.add(order);
+                    continue;
                 }
 
                 try {
@@ -586,14 +589,14 @@ public class ExcelUtil {
                         if (addrInfo == null || "".equals(addrInfo)) {
                             // 地址为空
                             cell.setCellStyle(cellStyle);
-                            continue;
+                            throw new Exception("地址为空");
                         }
                         // 处理地址信息
                         String[] addrs = splitAddress(addrInfo);
                         if (addrs == null && addrs.length < 4) {
                             // 地址不合法
                             cell.setCellStyle(cellStyle);
-                            continue;
+                            throw new Exception("地址不合法");
                         }
                         order.setOrderProvince(addrs[0].trim());
                         order.setOrderCity(addrs[1].trim());
@@ -611,12 +614,13 @@ public class ExcelUtil {
                         order.setOrderArea(getValue(temp.getCell(infoColumnIndex[1])).trim());
                         order.setOrderAddress(getValue(temp.getCell(infoColumnIndex[2])).trim());
                     } else {
-                        for (int i : infoColumnIndex) {
-                            temp.getCell(infoColumnIndex[i]).setCellStyle(cellStyle);
-                        }
-                        continue;
+//                        for (int i : infoColumnIndex) {
+//                            temp.getCell(infoColumnIndex[i]).setCellStyle(cellStyle);
+//                        }
+                        throw new Exception("地址错误");
                     }
                 } catch (Exception e) {
+
                     order.setReturnStatus("error");
                     order.setReturnMsg("地址错误");
                     order.setPlatformOrderId("1");
@@ -644,6 +648,98 @@ public class ExcelUtil {
                     //店铺
                     order.setStoreId(Integer.valueOf(storeArray[0]));
                 }
+
+                //-- 获取价格 --
+                order.setOrderTotal(-1);
+                String colorDiscount = "-1";
+                colorDiscount = getValue(temp.getCell(discountColumnIndex)).trim();
+                if(colorDiscount != null && !"".equals(colorDiscount)){
+                    colorDiscount = colorDiscount.replaceAll("\\r|\\r|\\n","");
+                }
+                if(colorDiscount == null || "".equals(colorDiscount)){
+                    order.setReturnStatus("error");
+                    order.setReturnMsg("价格不正确"+"。");
+                    order.setPlatformOrderId("1");
+                }else{
+                    //赋值小结
+                    Double orderTotal = Double.valueOf(colorDiscount);
+                    orderTotal = orderTotal*100;
+                    order.setOrderTotal(orderTotal.intValue());
+                }
+
+                if(order.getOrderTotal() < 0){
+                    Map megerMap = isMergedRegion(sheet,rowNum,discountColumnIndex);
+                    boolean merged = (boolean) megerMap.get("merged");
+                    if(merged){
+                        BeanUtils.copyProperties(remmendOrder,order);
+                        order.setOrderProductBarCode(OrderProductBarCodeValue);
+                        order.setOrderNum(orderNumByInt);
+                        order.setOrderProductName(price.get(order.getOrderProductBarCode()).getColorName());
+                        orderEfasts.add(order);
+                        continue;
+                    }
+                }
+
+               /* DealerChannel dealerChannel = new DealerChannel();
+                boolean flag = true;
+                if(order.getStoreId() != null){
+                    dealerChannel.setStoreId(order.getStoreId());
+                    List<DealerChannel>  dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+                    if(dealerChannelList!= null && dealerChannelList.size() > 0){
+                        dealerChannel = dealerChannelList.get(0);
+                    }else{
+                        order.setReturnStatus("error");
+                        order.setReturnMsg("订单导入失败-查询店铺对应客户信息失败,店铺ID:"+order.getStoreId()+"。");
+                        order.setPlatformOrderId("1");
+                        flag = false;
+                    }
+
+                    if(flag){
+                        if(1 == dealerChannel.getDealerSelfOperated()){
+                            //是否自营 1:自营
+                        }else{
+                            //2:非自营
+                            DealerProduct dealerProduct = new DealerProduct();
+                            dealerProduct.setDealerId(dealerChannel.getDealerId());
+                            dealerProduct.setColorBar(OrderProductBarCodeValue);
+                            List<DealerProduct> dealerProductList = dealerProductService.getDealerProductAndStoreList(dealerProduct);
+                            if(dealerProductList != null && dealerProductList.size() > 0){
+                                for (DealerProduct dp:dealerProductList) {
+                                    if(1 == dp.getDealProdStoreArea()){
+                                        // 1:全部店铺
+                                        order.setOrderProductDiscount(dp.getDealProdPrice());
+                                        order.setOrderProductPrice(dp.getDealProdPrice());
+                                        order.setOrderTotal(dp.getDealProdPrice()*orderNumByInt);
+                                    }else{
+                                        // 2:部分店铺
+                                        for (DealerProductStore dps:dp.getDealerProductStoreList()) {
+                                            if(order.getStoreId().equals(dps.getStoreId())){
+                                                order.setOrderProductDiscount(dp.getDealProdPrice());
+                                                order.setOrderProductPrice(dp.getDealProdPrice());
+                                                order.setOrderTotal(dp.getDealProdPrice()*orderNumByInt);
+                                            }
+                                        }
+                                    }
+                                }
+                            }else{
+                                order.setReturnStatus("error");
+                                order.setReturnMsg("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",产品SKU:"+ OrderProductBarCodeValue+"。");
+                                order.setPlatformOrderId("1");
+                            }
+                        }
+                    }
+
+                }else{
+                    order.setReturnStatus("error");
+                    order.setReturnMsg("订单导入-获取店铺ID失败,店铺ID:"+order.getStoreId()+"。");
+                    order.setPlatformOrderId("1");
+                }*/
+//                if(order.getOrderTotal() == null || order.getOrderTotal() < 0){
+//                    order.setReturnStatus("error");
+//                    order.setReturnMsg("订单导入-未能从该客户中获取店铺对应的产品价格,客户名称:"+dealerChannel.getDealerName()+",产品SKU:"+ OrderProductBarCodeValue+"店铺ID:"+order.getStoreId()+"。");
+//                    order.setPlatformOrderId("1");
+//                }
+
                 order.setOid(oid);
                 try {
                     if (postType.equals("ems")) {
@@ -660,8 +756,10 @@ public class ExcelUtil {
                     e.printStackTrace();
                     logger.info("匹配快递公司失败");
                 }
+
                 // 保存
                 orderEfasts.add(order);
+                BeanUtils.copyProperties(order,remmendOrder);
             } catch (Exception e) {
                 row.getCell(0).setCellStyle(cellStyle);
                 errorNum++;
@@ -678,6 +776,35 @@ public class ExcelUtil {
         return orderEfasts;
     }
 
+    /**
+     * 判断这个单元格是否合并
+     * @param sheet
+     * @param row
+     * @param column
+     * @return
+     */
+    private Map isMergedRegion(Sheet sheet,int row ,int column) {
+        Map map = new HashMap();
+        int sheetMergeCount = sheet.getNumMergedRegions();
+        for (int i = 0; i < sheetMergeCount; i++) {
+            CellRangeAddress range = sheet.getMergedRegion(i);
+            int firstColumn = range.getFirstColumn();
+            int lastColumn = range.getLastColumn();
+            int firstRow = range.getFirstRow();
+            int lastRow = range.getLastRow();
+            if (row >= firstRow && row <= lastRow) {
+                if (column >= firstColumn && column <= lastColumn) {
+                    map.put("merged", true);
+                    map.put("startRow", firstRow + 1);
+                    map.put("endRow", lastRow + 1);
+                    map.put("startCol", firstColumn + 1);
+                    map.put("endCol", lastColumn + 1);
+                    return map;
+                }
+            }
+        }
+        return map;
+    }
 
     /**
      * 读取Excel内容(上传excel文档)
@@ -929,7 +1056,7 @@ public class ExcelUtil {
                 if (DateUtil.isCellDateFormatted(cell)) {
                     return fmt.format(cell.getDateCellValue()); //日期型
                 }
-                DecimalFormat df = new DecimalFormat("#");
+                DecimalFormat df = new DecimalFormat("#.##");
                 return df.format(new Double(cell.getNumericCellValue())); //数字
             case Cell.CELL_TYPE_BOOLEAN: //布尔型
                 return String.valueOf(cell.getBooleanCellValue());

+ 6 - 12
watero-rst-web/src/main/resources/watero-rst-orm.xml

@@ -94,6 +94,7 @@
 		<typeAlias type="com.iamberry.rst.core.cm.ProcType" alias="ProcType"/>
 		<typeAlias type="com.iamberry.rst.core.cm.CmRelation" alias="CmRelation"/>
 
+
 		<typeAlias type="com.iamberry.rst.core.fm.AwaitingSignclosedProductInfo" alias="AwaitingSignclosedProductInfo"/>
 		<typeAlias type="com.iamberry.rst.core.fm.ComplaintDetectInfo" alias="ComplaintDetectInfo"/>
 		<typeAlias type="com.iamberry.rst.core.fm.ComplaintMaintenanceInfo" alias="ComplaintMaintenanceInfo"/>
@@ -114,6 +115,7 @@
 		<typeAlias type="com.iamberry.rst.core.fm.QcInfo" alias="QcInfo"/>
 		<typeAlias type="com.iamberry.rst.core.fm.TreatmentRecordLog" alias="TreatmentRecordLog"/>
 		<typeAlias type="com.iamberry.rst.core.fm.ComplaintAfterSalesNum" alias="ComplaintAfterSalesNum"/>
+		<typeAlias type="com.iamberry.rst.core.fm.DetectStatistics" alias="DetectStatistics"/>
 
 		<typeAlias type="com.iamberry.rst.core.sys.SysConfig" alias="SysConfig"/>
 		<typeAlias type="com.iamberry.rst.core.sys.SystemLogs" alias="SystemLogs"/>
@@ -207,6 +209,7 @@
 		<typeAlias type="com.iamberry.rst.core.dm.ClaimOrder" alias="ClaimOrder"/>
 		<typeAlias type="com.iamberry.rst.core.dm.CooperationAgree" alias="CooperationAgree"/>
 		<typeAlias type="com.iamberry.rst.core.dm.DealerChannel" alias="DealerChannel"/>
+		<typeAlias type="com.iamberry.rst.core.dm.DealerChannelStore" alias="DealerChannelStore"/>
 		<typeAlias type="com.iamberry.rst.core.dm.DealerContact" alias="DealerContact"/>
 		<typeAlias type="com.iamberry.rst.core.dm.DealerProduct" alias="DealerProduct"/>
 		<typeAlias type="com.iamberry.rst.core.dm.DealerProductStore" alias="DealerProductStore"/>
@@ -257,18 +260,6 @@
 		<mapper resource="com/iamberry/rst/service/pts/mapper/ptsSalesCompanyMapper.xml"/>
 
 
-
-	<!--	<mapper resource="com/iamberry/rst/service/cm/mapper/noreasonBackMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/backGoodsMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/reissueMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/renewedMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/repairMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/sendFittingMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/fittingsInfoMapper.xml"/>
-		<mapper resource="com/iamberry/rst/service/cm/mapper/closedFittingMapper.xml"/>-->
-
-
-
 		<mapper resource="com/iamberry/rst/service/cm/mapper/closedProdcueMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/cm/mapper/complaintQuestionInfoMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/cm/mapper/complaintTypeInfoMapper.xml"/>
@@ -298,6 +289,8 @@
 		<mapper resource="com/iamberry/rst/service/fm/mapper/complaintSmallClassInfoMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/fm/mapper/inventoryLogMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/fm/mapper/inventoryMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/fm/mapper/detectStatisticMapper.xml"/>
+
 
 		<mapper resource="com/iamberry/rst/service/address/mapper/addressMapper.xml"/>
 
@@ -344,6 +337,7 @@
 		<mapper resource="com/iamberry/rst/service/dm/mapper/claimOrderMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/dm/mapper/cooperationAgreeMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/dm/mapper/dealerChannelMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/dm/mapper/dealerChannelStoreMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/dm/mapper/dealerContactMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/dm/mapper/dealerProductMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/dm/mapper/dealerProductStoreMapper.xml"/>

+ 6 - 4
watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/update_relation.ftl

@@ -387,9 +387,11 @@
                             <td>${(postageInfo.postageAlipayName)!''}</td>
                             <td>${(postageInfo.postageAlipay)!''}</td>
                             <td>
-                                <#if postageInfo.postageAlipayType == 1>用户付款</#if>
-                                <#if postageInfo.postageAlipayType == 2>客户付款</#if>
-                                <#if postageInfo.postageAlipayType == 3>公司付款</#if>
+                                <#if postageInfo.postageAlipayType??>
+                                    <#if postageInfo.postageAlipayType == 1>用户付款</#if>
+                                    <#if postageInfo.postageAlipayType == 2>客户付款</#if>
+                                    <#if postageInfo.postageAlipayType == 3>公司付款</#if>
+                                </#if>
                             </td>
                             <#if postageInfo.postageStatus??>
                                 <#if postageInfo.postageStatus == 0><td>未申请</td></#if>
@@ -405,7 +407,7 @@
                         </tr>
                         </#list>
                     <#else>
-                    <tr id="colspanId"><td colspan="7" class="td-manage text-c" >暂时没有邮费信息,请添加!</td></tr>
+                    <tr id="colspanId"><td colspan="8" class="td-manage text-c" >暂时没有邮费信息,请添加!</td></tr>
                     </#if>
                     </tbody>
                 </table>

+ 428 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/detect_statistics.ftl

@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <#include "/base/add_base.ftl">
+		<title>维修统计</title>
+        <style>
+            .my-title{font-weight: 500;padding-left: 15px;position: relative;}
+            .my-title:after{content: '';position: absolute;left: 0;top:12%;width: 3px;height: 80%;background: #32a3d8;}
+            .my-input{padding: 8px 5px;width: 80%;border:1px solid rgba(0,0,0,.1);}
+            .my-input-date{padding: 8px 10px;border:1px solid rgba(0,0,0,.1);width: 80%;background: url(http://s.iamberry.com/images/rili-1.png) 98.5% center no-repeat; background-size:auto 50%;}
+            .input-box{margin: 18px 0;}
+            .input-dic{float: left;margin:5px 10px 0 0;font-size: 12px;}
+            .add-list{list-style-type: none;padding: 10px;background-color: #f5f5f5;width: 60%;float: left;margin: 0;}
+            .add-list>li{margin: 10px 0;}
+            .my-textarea{padding: 5px 10px;width: 65%;border:1px solid rgba(0,0,0,.1);margin-left: 12.5%;}
+            .my-btn-reset{padding: 10px 20px;width: 150px; background-color: #fff;color: #32a3d8;border: 1px solid #32a3d8;cursor:pointer;margin: 10px 10px 0 10px;}
+            .my-btn-submit{padding: 10px 20px;width: 130px; background-color: #50a2ea;color: #fff;border: 1px solid #50a2ea;cursor:pointer;margin: 10px auto 0 auto;display: block;}
+            .my-select{border: 1px solid rgba(0,0,0,.1);padding:6px 50px 6px 15px;height: 34px; -webkit-appearance:none;appearance:none;background: url(/common/images/pts/select-11.png) right center no-repeat;background-size:auto 100%;}
+            input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+            input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+            .huanhang{ float:left}
+            .check-box, .radio-box{padding-left: 0;}
+            .my-close{position:absolute;right: 0.5em;top: 0.45em;width:0.15em;height:1em;background: #333;-webkit-transform: rotate(45deg);transform: rotate(45deg);display: inline-block;}
+            .my-close:after{content: "";position: absolute;top: 0;left: 0;width:0.15em;height:1em;background: #333;-webkit-transform: rotate(270deg);transform: rotate(270deg);}
+            .b-close{position: relative; display: inline-block;margin: 2px 0; padding:4px 1em 4px 4px; width: 100px;background: #f0f0f0;border: 1px solid rgba(0,0,0,.1);border-radius: 5px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer;}
+            .close-box{width: 500px;margin-left: 15px;margin-top: -15px;}
+        </style>
+	</head>
+	<body>
+    	<div id="main" style="width: 1400px;height:500px;"></div>
+
+
+        <div class="input-box" style="height: 45px;"  class="dataTableStatis" seachType="3">
+            <label class="form-label col-2 col-sm-2 huanhang" style="text-align: right;margin: 10px 0px;font-weight: bold;font-size: 23px;">判定结果</label>
+            <div class="formControls col-2 col-sm-2 text-c huanhang" style="margin-left: -4%;margin: 10px 0px 10px -19px;">
+                <input class="my-input beginTime" style="width: 90%;" type="text" value="" name="beginTime_1" id="beginTime_1" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M',dateFmt: 'yyyy-MM',onpicked: getResetDateByTime,oncleared :getResetDateByTime })" placeholder="请选择月份(开始)" readonly="readonly"/>
+            </div>
+            <div class="formControls col-2 col-sm-2 text-c huanhang" style="margin-left: -4%;margin: 10px 0px 10px -19px;">
+                <input class="my-input endTime" style="width: 90%;" type="text" value="" name="endTime_1" id="endTime_1" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M',dateFmt: 'yyyy-MM',minDate:beginTime_1.value,onpicked: getResetDateByTime,oncleared :getResetDateByTime })" placeholder="请选择月份(结束)" readonly="readonly"/>
+            </div>
+            <div class="formControls col-2 col-sm-2 huanhang" style="margin: 10px 0px;line-height: 34px;">
+                <select id="configSelect_1" name="configSelect_1" class="chosen configSelect" style="">
+                    <option value="">判断结果</option>
+                    <#if (criticalResultList?size > 0)>
+                        <#list criticalResultList as config>
+                            <option value="${config.configId!""}">${config.configDetectContent!""}</option>
+                        </#list>
+                    </#if>
+                </select>
+            </div>
+        </div>
+    	<div id="main3" style="width: 1400px;height:500px;"></div>
+
+
+        <div class="input-box" style="height: 45px;" class="dataTableStatis" seachType="2">
+            <label class="form-label col-2 col-sm-2 huanhang" style="text-align: right;margin: 10px 0px;font-weight: bold;font-size: 23px;">故障原因</label>
+            <div class="formControls col-2 col-sm-2 text-c huanhang" style="margin-left: -4%;margin: 10px 0px 10px -19px;">
+                <input class="my-input beginTime" style="width: 90%;" type="text" value="" name="beginTime_2" id="beginTime_2" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M',dateFmt: 'yyyy-MM',onpicked: getResetDateByTime,oncleared :getResetDateByTime })" placeholder="请选择月份(开始)" readonly="readonly"/>
+            </div>
+            <div class="formControls col-2 col-sm-2 text-c huanhang" style="margin-left: -4%;margin: 10px 0px 10px -19px;">
+                <input class="my-input endTime" style="width: 90%;" type="text" value="" name="endTime_2" id="endTime_2" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M',dateFmt: 'yyyy-MM',minDate:beginTime_2.value,onpicked: getResetDateByTime,oncleared :getResetDateByTime })" placeholder="请选择月份(结束)" readonly="readonly"/>
+            </div>
+            <div class="formControls col-2 col-sm-2 huanhang" style="margin: 10px 0px;line-height: 34px;">
+                <select id="configSelect_2" name="configSelect_2" class="chosen configSelect" style="">
+                    <option value="">故障原因</option>
+                <#if (causeIssueList?size > 0)>
+                    <#list causeIssueList as config>
+                        <option value="${config.configId!""}">${config.configDetectContent!""}</option>
+                    </#list>
+                </#if>
+                </select>
+            </div>
+        </div>
+    	<div id="main4" style="width: 1400px;height:500px;"></div>
+
+        <div class="input-box" style="height: 45px;" class="dataTableStatis" seachType="5">
+            <label class="form-label col-2 col-sm-2 huanhang" style="text-align: right;margin: 10px 0px;font-weight: bold;font-size: 23px;">原因分析</label>
+            <div class="formControls col-2 col-sm-2 text-c huanhang" style="margin-left: -4%;margin: 10px 0px 10px -19px;">
+                <input class="my-input beginTime" style="width: 90%;" type="text" value="" name="beginTime_3" id="beginTime_3" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M',dateFmt: 'yyyy-MM',onpicked: getResetDateByTime,oncleared :getResetDateByTime })" placeholder="请选择月份(开始)" readonly="readonly"/>
+            </div>
+            <div class="formControls col-2 col-sm-2 text-c huanhang" style="margin-left: -4%;margin: 10px 0px 10px -19px;">
+                <input class="my-input endTime" style="width: 90%;" type="text" value="" name="endTime_3" id="endTime_3" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M',dateFmt: 'yyyy-MM',minDate:beginTime_3.value,onpicked: getResetDateByTime,oncleared :getResetDateByTime })" placeholder="请选择月份(结束)" readonly="readonly"/>
+            </div>
+            <div class="formControls col-2 col-sm-2 huanhang" style="margin: 10px 0px;line-height: 34px;">
+                <select id="configSelect_3" name="configSelect_3" class="chosen configSelect" style="">
+                    <option value="">原因分析</option>
+                <#if (causeAnalysisList?size > 0)>
+                    <#list causeAnalysisList as config>
+                        <option value="${config.configId!""}">${config.configDetectContent!""}</option>
+                    </#list>
+                </#if>
+                </select>
+            </div>
+        </div>
+    	<div id="main5" style="width: 1400px;height:500px;"></div>
+	</body>
+    <script type="text/javascript" src="${path}/common/lib/echarts/3.8/echarts.common.min.js"></script>
+    <script type="text/javascript" src="${path}/common/lib/echarts/3.8/echarts.min.js"></script>
+    <script type="text/javascript" src="${path}/common/lib/echarts/3.8/macarons.js"></script>
+    <script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+	<script>
+        var myChart = echarts.init(document.getElementById('main'));
+        //type = 3
+        var myChart3 = echarts.init(document.getElementById('main3'));
+        //type = 2
+        var myChart4 = echarts.init(document.getElementById('main4'));
+        //type = 5
+        var myChart5 = echarts.init(document.getElementById('main5'));
+
+		$(function () {
+            detectStatisticsData();
+            detectStatisticsJudgement(3,"","","");
+            detectStatisticsJudgement(2,"","","");
+            detectStatisticsJudgement(5,"","","");
+        })
+
+        /**
+         * 当月统计
+         * @param state
+         */
+        function detectStatisticsData() {
+            $.ajax({
+                type: "POST",
+                data: {},
+                url: "${path}/admin/detect/detect_statistics_data",
+                success: function(data){
+                    if (data.returnCode == 200) {
+
+                        var numArray = new Array();
+                        var monthArray = new Array();
+                        for (var i=0;i<data.returnMsg.complaintDetectInfoList.length;i++){
+                            var countNum = data.returnMsg.complaintDetectInfoList[i].countNum;
+                            numArray.push(countNum);
+
+                            var detectProduction = data.returnMsg.complaintDetectInfoList[i].detectProduction;
+                            if(detectProduction == "未知"){
+                                var flag = false;
+                                for (var k=0;k<monthArray.length;k++){
+                                    if(monthArray[k] == '未知'){
+                                        var otherMonthNum = numArray[k];
+                                        numArray[k] = numArray[k]+countNum;
+                                        flag = true;
+                                    }
+                                }
+                                if(!flag){
+                                    monthArray.push('未知');
+                                }
+                            }else{
+                                var newDate = formatDate(detectProduction,"yyyy年MM月");
+                                monthArray.push(newDate.substring(2,newDate.length))
+                            }
+						}
+
+                        var newNumArray = new Array();
+                        for (var i=0;i<monthArray.length;i++){
+                            newNumArray.push(numArray[i]);
+                        }
+                        var option = {
+                            title : {
+                                text: '本月故障机器',
+                                subtext: ''
+                            },
+                            tooltip : {
+                                trigger: 'axis'
+                            },
+                            legend: {
+                                data:['本月故障机器']
+                            },
+                            toolbox: {
+                                show : true,
+                                feature : {
+//                                    dataView : {show: true, readOnly: false},
+//                                    magicType : {show: true, type: ['line', 'bar']},
+//                                    restore : {show: true},
+//                                    saveAsImage : {show: true}
+                                }
+                            },
+                            calculable : true,
+                            xAxis : [
+                                {
+                                    type : 'category',
+                                    data : monthArray
+                                }
+                            ],
+                            yAxis : [
+                                {
+                                    type : 'value'
+                                }
+                            ],
+                            series : {
+                                name:'本月故障机器',
+                                type:'bar',
+                                data:newNumArray,
+//								barWidth : 10%,
+                                markPoint : {
+                                    data : [
+                                        {type : 'max', name: '最大值'},
+                                        {type : 'min', name: '最小值'}
+                                    ]
+                                }
+//                                ,markLine : {
+//                                    data : [
+//                                        {type : 'average', name: '平均值'}
+//                                    ]
+//                                }
+                            }
+                        };
+
+                        // 使用刚指定的配置项和数据显示图表。
+                        myChart.setOption(option);
+                    }else{
+                        layer.msg("获取信息失败!", {icon: 5, time: 3000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                }
+            });
+        }
+
+        /**
+         * @param configType
+         * @param beginTime
+         * @param endTime
+         * @param echartsObj
+         */
+        function detectStatisticsJudgement(configType,beginTime,endTime,configId,) {
+            var echartsObj = null;
+            switch (parseInt(configType)){
+                case 3:
+                    echartsObj = myChart3;
+                    break;
+                case 2:
+                    echartsObj = myChart4;
+                    break;
+                case 5:
+                    echartsObj = myChart5;
+                    break;
+                default:
+                    break
+            }
+            if(!isEmpty(echartsObj)){
+                return false;
+            }
+            $.ajax({
+                type: "POST",
+                data: {
+                    configType : configType,
+                    beginTime : beginTime,
+                    endTime : endTime,
+                    configId :configId
+                },
+                url: "${path}/admin/detect/detect_statistics_one",
+                success: function(data){
+                    if (data.returnCode == 200) {
+
+                        var menuDate = new Array();
+                        for (var i=0;i<data.returnMsg.detectConfigList.length;i++) {
+                            var configDetectContent = data.returnMsg.detectConfigList[i].configDetectContent;
+                            menuDate.push(configDetectContent);
+                        }
+
+                        var monthArray = new Array();
+                        for (var j=0;j<data.returnMsg.detectProductionList.length;j++) {
+                            var detectProduction = data.returnMsg.detectProductionList[j].detectProduction;
+                            if(detectProduction == "未知"){
+                                monthArray.push(detectProduction);
+                            }else{
+                                var newDate = formatDate(detectProduction,"yyyy-MM");
+                                monthArray.push(newDate.substring(2,newDate.length));
+                            }
+                        }
+                        var seriesArray = new Array();
+                        for (var k=0;k<data.returnMsg.list.length;k++) {
+                            var newDate = data.returnMsg.list[k];
+                            var dateName,dateAttr;
+                            var configId = data.returnMsg.cinfigList[k];
+                            for(var m in newDate) {
+                                dateName = m;
+                                dateAttr = newDate[m];
+                            }
+                            var objArray = new Array();
+                            for(var q=0;q<dateAttr.length;q++){
+                                var obj = {
+                                    value:dateAttr[q],
+                                    name:dateName,
+                                    configId:configId,
+                                    configName:dateName
+                                }
+                                objArray.push(obj);
+                            }
+                            var series = {
+                                name:dateName,
+                                type:'bar',
+                                data:objArray,
+                                markLine : {
+//                                    data : [
+//                                        {type : 'average', name: '平均值'}
+//                                    ]
+                                }
+                            }
+                            seriesArray.push(series);
+                        }
+                        var option = {
+                            title : {
+                                text: '',
+                                subtext: ''
+                            },
+                            tooltip : {
+                                trigger: 'axis'
+                            },
+                            legend: {
+                                data:menuDate
+                            },
+                            toolbox: {
+                                show : true,
+                                feature : {
+//                                    dataView : {show: true, readOnly: false},
+//                                    magicType : {show: true, type: ['line', 'bar']},
+//                                    restore : {show: true},
+//                                    saveAsImage : {show: true}
+                                }
+                            },
+                            calculable : true,
+                            xAxis : [
+                                {
+                                    type : 'category',
+                                    data : monthArray
+                                }
+                            ],
+                            yAxis : [
+                                {
+                                    type : 'value'
+                                }
+                            ],
+                            series :seriesArray
+                        };
+                        // 使用刚指定的配置项和数据显示图表。
+                        echartsObj.setOption(option,true);
+
+                        echartsObj.on('click', function (params) {
+                            toSelectConfigStatistic(data);
+
+                            // alert("单击了"+params.componentType+"x轴标签");
+
+                            //param具体包含的参数见 https://blog.csdn.net/allenjay11/article/details/76033232
+
+//                            updatePage(option.xAxis.data[params.dataIndex],params.value);
+//                            refresh();
+                        });
+                    }else{
+                        layer.msg("获取信息失败!", {icon: 5, time: 3000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                }
+            });
+        }
+
+        $('.configSelect').change(function() {
+            getResetDate($(this));
+        });
+
+        $('.beginTime').change(function() {
+            getResetDate($(this));
+        });
+        $('.endTime').change(function() {
+            getResetDate($(this));
+        });
+
+        /**
+         * 选择数据后重置数据
+         */
+        function getResetDateByTime() {
+            var id = this.id;
+            var $node = $("#"+id);
+//            var $thisDiv = $node.parents(".dataTableStatis");
+            var $thisDiv = $node.parent().parent();
+            var type = $thisDiv.attr("seachType");
+            var beginTime = $thisDiv.find(".beginTime").val();
+            var endTime = $thisDiv.find(".endTime").val();
+            var configName = $thisDiv.find(".configSelect").find("option:selected").text();
+            var configId = $thisDiv.find(".configSelect").val();
+            detectStatisticsJudgement(type,beginTime,endTime,configId);
+        }
+        /**
+         * 选择数据后重置数据
+         */
+        function getResetDate($node) {
+//            var $thisDiv = $node.parents(".dataTableStatis");
+            var $thisDiv = $node.parent().parent();
+            var type = $thisDiv.attr("seachType");
+            var beginTime = $thisDiv.find(".beginTime").val();
+            var endTime = $thisDiv.find(".endTime").val();
+            var configName = $thisDiv.find(".configSelect").find("option:selected").text();
+            var configId = $thisDiv.find(".configSelect").val();
+            detectStatisticsJudgement(type,beginTime,endTime,configId);
+        }
+
+        /**
+         * 到单独配置页面
+         */
+        function toSelectConfigStatistic(data) {
+            var configId = data.configId;
+            window.location.href= "${path}/admin/dealer/to_select_config_statistic?configId="+configId;
+        }
+
+        $('.chosen').chosen({
+            no_results_text: "没有找到结果!",//搜索无结果时显示的提示
+            search_contains:true,   //关键字模糊搜索。设置为true,只要选项包含搜索词就会显示;设置为false,则要求从选项开头开始匹配
+            allow_single_deselect:true, //单选下拉框是否允许取消选择。如果允许,选中选项会有一个x号可以删除选项
+            disable_search: false, //禁用搜索。设置为true,则无法搜索选项。
+            disable_search_threshold: 0, //当选项少等于于指定个数时禁用搜索。
+            inherit_select_classes: true, //是否继承原下拉框的样式类,此处设为继承
+            placeholder_text_single: '', //单选选择框的默认提示信息,当选项为空时会显示。如果原下拉框设置了data-placeholder,会覆盖这里的值。
+            width: '200px', //设置chosen下拉框的宽度。即使原下拉框本身设置了宽度,也会被width覆盖。
+            max_shown_results: 1000, //下拉框最大显示选项数量
+            display_disabled_options: false,
+            single_backstroke_delete: false, //false表示按两次删除键才能删除选项,true表示按一次删除键即可删除
+            case_sensitive_search: false, //搜索大小写敏感。此处设为不敏感
+            group_search: false, //选项组是否可搜。此处搜索不可搜
+            include_group_label_in_selected: true //选中选项是否显示选项分组。false不显示,true显示。默认false。
+        });
+	</script>
+</html>

+ 215 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/detect_statistics_config.ftl

@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <#include "/base/add_base.ftl">
+		<title>维修统计</title>
+        <style>
+            .my-title{font-weight: 500;padding-left: 15px;position: relative;}
+            .my-title:after{content: '';position: absolute;left: 0;top:12%;width: 3px;height: 80%;background: #32a3d8;}
+            .my-input{padding: 8px 5px;width: 80%;border:1px solid rgba(0,0,0,.1);}
+            .my-input-date{padding: 8px 10px;border:1px solid rgba(0,0,0,.1);width: 80%;background: url(http://s.iamberry.com/images/rili-1.png) 98.5% center no-repeat; background-size:auto 50%;}
+            .input-box{margin: 18px 0;}
+            .input-dic{float: left;margin:5px 10px 0 0;font-size: 12px;}
+            .add-list{list-style-type: none;padding: 10px;background-color: #f5f5f5;width: 60%;float: left;margin: 0;}
+            .add-list>li{margin: 10px 0;}
+            .my-textarea{padding: 5px 10px;width: 65%;border:1px solid rgba(0,0,0,.1);margin-left: 12.5%;}
+            .my-btn-reset{padding: 10px 20px;width: 150px; background-color: #fff;color: #32a3d8;border: 1px solid #32a3d8;cursor:pointer;margin: 10px 10px 0 10px;}
+            .my-btn-submit{padding: 10px 20px;width: 130px; background-color: #50a2ea;color: #fff;border: 1px solid #50a2ea;cursor:pointer;margin: 10px auto 0 auto;display: block;}
+            .my-select{border: 1px solid rgba(0,0,0,.1);padding:6px 50px 6px 15px;height: 34px; -webkit-appearance:none;appearance:none;background: url(/common/images/pts/select-11.png) right center no-repeat;background-size:auto 100%;}
+            input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+            input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+            .huanhang{ float:left}
+            .check-box, .radio-box{padding-left: 0;}
+            .my-close{position:absolute;right: 0.5em;top: 0.45em;width:0.15em;height:1em;background: #333;-webkit-transform: rotate(45deg);transform: rotate(45deg);display: inline-block;}
+            .my-close:after{content: "";position: absolute;top: 0;left: 0;width:0.15em;height:1em;background: #333;-webkit-transform: rotate(270deg);transform: rotate(270deg);}
+            .b-close{position: relative; display: inline-block;margin: 2px 0; padding:4px 1em 4px 4px; width: 100px;background: #f0f0f0;border: 1px solid rgba(0,0,0,.1);border-radius: 5px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer;}
+            .close-box{width: 500px;margin-left: 15px;margin-top: -15px;}
+        </style>
+	</head>
+	<body>
+    	<div id="main" style="width: 1400px;height:500px;"></div>
+
+	</body>
+    <script type="text/javascript" src="${path}/common/lib/echarts/3.8/echarts.common.min.js"></script>
+    <script type="text/javascript" src="${path}/common/lib/echarts/3.8/echarts.min.js"></script>
+    <script type="text/javascript" src="${path}/common/lib/echarts/3.8/macarons.js"></script>
+    <script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+	<script>
+        var myChart = echarts.init(document.getElementById('main'));
+		$(function () {
+            detectStatisticsData();
+        })
+
+        /**
+         * 当月统计
+         * @param state
+         */
+        function detectStatisticsData() {
+            $.ajax({
+                type: "POST",
+                data: {},
+                url: "${path}/admin/detect/detect_statistics_data",
+                success: function(data){
+                    if (data.returnCode == 200) {
+
+                        var numArray = new Array();
+                        var monthArray = new Array();
+                        for (var i=0;i<data.returnMsg.complaintDetectInfoList.length;i++){
+                            var countNum = data.returnMsg.complaintDetectInfoList[i].countNum;
+                            numArray.push(countNum);
+
+                            var detectProduction = data.returnMsg.complaintDetectInfoList[i].detectProduction;
+                            if(detectProduction == "未知"){
+                                var flag = false;
+                                for (var k=0;k<monthArray.length;k++){
+                                    if(monthArray[k] == '未知'){
+                                        var otherMonthNum = numArray[k];
+                                        numArray[k] = numArray[k]+countNum;
+                                        flag = true;
+                                    }
+                                }
+                                if(!flag){
+                                    monthArray.push('未知');
+                                }
+                            }else{
+                                var newDate = formatDate(detectProduction,"yyyy年MM月");
+                                monthArray.push(newDate.substring(2,newDate.length))
+                            }
+						}
+
+                        var newNumArray = new Array();
+                        for (var i=0;i<monthArray.length;i++){
+                            newNumArray.push(numArray[i]);
+                        }
+                        var option = {
+                            title : {
+                                text: '本月故障机器',
+                                subtext: ''
+                            },
+                            tooltip : {
+                                trigger: 'axis'
+                            },
+                            legend: {
+                                data:['本月故障机器']
+                            },
+                            toolbox: {
+                                show : true,
+                                feature : {
+//                                    dataView : {show: true, readOnly: false},
+//                                    magicType : {show: true, type: ['line', 'bar']},
+//                                    restore : {show: true},
+//                                    saveAsImage : {show: true}
+                                }
+                            },
+                            calculable : true,
+                            xAxis : [
+                                {
+                                    type : 'category',
+                                    data : monthArray
+                                }
+                            ],
+                            yAxis : [
+                                {
+                                    type : 'value'
+                                }
+                            ],
+                            series : {
+                                name:'本月故障机器',
+                                type:'bar',
+                                data:newNumArray,
+//								barWidth : 10%,
+                                markPoint : {
+                                    data : [
+                                        {type : 'max', name: '最大值'},
+                                        {type : 'min', name: '最小值'}
+                                    ]
+                                }
+//                                ,markLine : {
+//                                    data : [
+//                                        {type : 'average', name: '平均值'}
+//                                    ]
+//                                }
+                            }
+                        };
+
+                        // 使用刚指定的配置项和数据显示图表。
+                        myChart.setOption(option);
+                    }else{
+                        layer.msg("获取信息失败!", {icon: 5, time: 3000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                }
+            });
+        }
+
+        $('.configSelect').change(function() {
+            getResetDate($(this));
+        });
+
+        $('.beginTime').change(function() {
+            getResetDate($(this));
+        });
+        $('.endTime').change(function() {
+            getResetDate($(this));
+        });
+
+        /**
+         * 选择数据后重置数据
+         */
+        function getResetDateByTime() {
+            var id = this.id;
+            var $node = $("#"+id);
+//            var $thisDiv = $node.parents(".dataTableStatis");
+            var $thisDiv = $node.parent().parent();
+            var type = $thisDiv.attr("seachType");
+            var beginTime = $thisDiv.find(".beginTime").val();
+            var endTime = $thisDiv.find(".endTime").val();
+            var configName = $thisDiv.find(".configSelect").find("option:selected").text();
+            var configId = $thisDiv.find(".configSelect").val();
+            detectStatisticsJudgement(type,beginTime,endTime,configId);
+        }
+        /**
+         * 选择数据后重置数据
+         */
+        function getResetDate($node) {
+//            var $thisDiv = $node.parents(".dataTableStatis");
+            var $thisDiv = $node.parent().parent();
+            var type = $thisDiv.attr("seachType");
+            var beginTime = $thisDiv.find(".beginTime").val();
+            var endTime = $thisDiv.find(".endTime").val();
+            var configName = $thisDiv.find(".configSelect").find("option:selected").text();
+            var configId = $thisDiv.find(".configSelect").val();
+            detectStatisticsJudgement(type,beginTime,endTime,configId);
+        }
+
+        /**
+         * 到单独配置页面
+         */
+        function toSelectConfigStatistic(data) {
+            var configId = data.configId;
+            window.location.href= "${path}/admin/dealer/to_select_config_statistic?configId="+configId;
+        }
+
+        $('.chosen').chosen({
+            no_results_text: "没有找到结果!",//搜索无结果时显示的提示
+            search_contains:true,   //关键字模糊搜索。设置为true,只要选项包含搜索词就会显示;设置为false,则要求从选项开头开始匹配
+            allow_single_deselect:true, //单选下拉框是否允许取消选择。如果允许,选中选项会有一个x号可以删除选项
+            disable_search: false, //禁用搜索。设置为true,则无法搜索选项。
+            disable_search_threshold: 0, //当选项少等于于指定个数时禁用搜索。
+            inherit_select_classes: true, //是否继承原下拉框的样式类,此处设为继承
+            placeholder_text_single: '', //单选选择框的默认提示信息,当选项为空时会显示。如果原下拉框设置了data-placeholder,会覆盖这里的值。
+            width: '200px', //设置chosen下拉框的宽度。即使原下拉框本身设置了宽度,也会被width覆盖。
+            max_shown_results: 1000, //下拉框最大显示选项数量
+            display_disabled_options: false,
+            single_backstroke_delete: false, //false表示按两次删除键才能删除选项,true表示按一次删除键即可删除
+            case_sensitive_search: false, //搜索大小写敏感。此处设为不敏感
+            group_search: false, //选项组是否可搜。此处搜索不可搜
+            include_group_label_in_selected: true //选中选项是否显示选项分组。false不显示,true显示。默认false。
+        });
+	</script>
+</html>

+ 11 - 9
watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/add_dealer.ftl

@@ -157,16 +157,17 @@
                     <input type="button" class="btn btn-primary" onclick="addDealerChannnel()" value="添加销售渠道" >
                     <table class="table table-border table-bg table-bordered" style="margin-top: 10px;" id="">
                         <thead>
-                        <tr class="text-c" id="table1">
-                            <th style="text-align: center;" width="30" >渠道类别</th>
-                            <th style="text-align: center;" width="30" >渠道类型</th>
-                            <th style="text-align: center;" width="10">渠道名称</th>
-                            <th style="text-align: center;" width="10">账期</th>
-                            <th style="text-align: center;" width="5">操作</th>
-                        </tr>
+                            <tr class="text-c" id="table1">
+                                <th  width="30" >渠道名称</th>
+                                <th width="30" >渠道类别</th>
+                                <th width="30" >渠道类型</th>
+                                <th width="30">店铺名称</th>
+                                <th width="10">账期</th>
+                                <th width="5">操作</th>
+                            </tr>
                         </thead>
                         <tbody id="add_dealer_channel">
-                            <tr><td colspan="5" class="td-manage text-c" >暂时没有销售渠道信息,请添加!</td></tr>
+                            <tr><td colspan="6" class="td-manage text-c" >暂时没有销售渠道信息,请添加!</td></tr>
                         </tbody>
                     </table>
                 </div>
@@ -189,13 +190,14 @@
                         <tr class="text-c" id="table1">
                             <th style="text-align: center;" width="30" >产品名称</th>
                             <th style="text-align: center;" width="30" >产品颜色</th>
+                            <th style="text-align: center;" width="30" >69码</th>
                             <th style="text-align: center;" width="10">供应价格</th>
                             <th style="text-align: center;" width="10">供应渠道对象</th>
                             <th style="text-align: center;" width="5">操作</th>
                         </tr>
                         </thead>
                         <tbody id="add_product">
-                        <tr><td colspan="5" class="td-manage text-c" >暂时没有供应产品,请添加!</td></tr>
+                        <tr><td colspan="6" class="td-manage text-c" >暂时没有供应产品,请添加!</td></tr>
                         </tbody>
                     </table>
                 </div>

+ 78 - 5
watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/add_dealer_channel.ftl

@@ -36,8 +36,13 @@
         .msg-phone{height: 35px;line-height: 35px;}
         .all_down{text-decoration: underline;color: #00c;}
         .form-label{}
+        .my-close{margin-top: 4px;margin-left: 12px;width:0.15em;height:1em;background: #333;-webkit-transform: rotate(45deg);transform: rotate(45deg);display: inline-block;}
+        .my-close:after{content: "";position: absolute;top: 0;left: 0;width:0.15em;height:1em;background: #333;-webkit-transform: rotate(270deg);transform: rotate(270deg);}
+        .b-close{position: relative; display: inline-block;margin: 2px 0; padding:4px 2px 4px 4px; margin-right: 3px;background: #f0f0f0;border: 1px solid rgba(0,0,0,.1);border-radius: 5px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer;}
+        .b-close-div{float: right;height: 21px;width: 22px;}
+        .close-box{margin-left: 15px;margin-top: -15px;}
     </style>
-    <title>对接人添加 - 客户管理 - RST</title>
+    <title>渠道添加 - 客户管理 - RST</title>
 </head>
 <body>
 
@@ -49,6 +54,14 @@
             <input type="hidden" class="input-text" value="${dealerChannel.dealChannelIdStr!""}" id="dealChannelIdStr" name="dealChannelIdStr"  >
 
             <div class="ulc_contact" code="returnCode" msg="resultMsg" data="returnMsg" urlPrefix="${path}">
+
+                <div class="row cl" id="" style="">
+                    <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"><span class="c-red">*</span>渠道名称:</label>
+                    <div class="formControls col-xs-8 col-sm-8">
+                        <input type="text" class="input-text add_form" value="${dealerChannel.dealChannelName!""}" placeholder="填写渠道名称" id="dealChannelName" name="dealChannelName" myMinlength="1"  myMaxlength="40" errormsg="渠道名称必填,不能超过40个字符"  >
+                    </div>
+                </div>
+
                 <div class="row cl ulc_contact" id="" style="">
                     <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"><span class="c-red">*</span>渠道大类:</label>
                     <div class="formControls col-xs-8 col-sm-8" >
@@ -77,18 +90,39 @@
             </div>
 
             <div class="row cl " id="" style="">
-                <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"><span class="c-red">*</span>渠道类型:</label>
+                <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"><span class="c-red">*</span>店铺:</label>
                 <div class="formControls col-xs-8 col-sm-8">
                     <select class="chosen select" name="storeId" id="storeId" >
+                        <option value="">选择店铺</option>
                         <#if storeInfoList?? &&  (storeInfoList?size > 0) >
                             <#list storeInfoList as store>
-                                <option value="${store.storeId}" <#if dealerChannel.channelId??><#if dealerChannel.storeId==store.storeId>selected</#if></#if>>${store.storeName}</option>
+                                <option value="${store.storeId}" >${store.storeName}</option>
                             </#list>
                         </#if>
                     </select>
                 </div>
             </div>
 
+            <div class="row cl " id="" style="">
+                <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"></label>
+                <div class="formControls col-xs-8 col-sm-8" >
+                    <div class="row">
+                        <ul class="close-box" id="configui1">
+                            <#if dealerChannelStoreList?? &&  (dealerChannelStoreList?size > 0) >
+                                <#list dealerChannelStoreList as dealerChannelStore>
+                                    <li class="b-close" class="configDetele1">
+                                        <input type="hidden" value="${dealerChannelStore.storeId!""}" class="configli1" name="configli1">
+                                        <span class="configliName">${dealerChannelStore.storeName!""}</span>
+                                        <div onclick="deleteli(this)" class="b-close-div" ><span class="my-close" ></span></div>
+                                    </li>
+                                </#list>
+                            </#if>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+
+
             <div class="row cl" id="" style="">
                 <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"><span class="c-red">*</span>账期:</label>
                 <div class="formControls col-xs-8 col-sm-8">
@@ -144,17 +178,56 @@
         var channel = new Object();
         channel.dealChannelId=$("#dealChannelId").val();
         channel.dealChannelIdStr=$("#dealChannelIdStr").val();
+        channel.dealChannelName=$("#dealChannelName").val();
         channel.channelId=$("#channelId").val();
         channel.channelTypeId=$("#channelTypeId").val();
         channel.channelName=$("#channelId").find("option:selected").text();
         channel.channelTypeName=$("#channelTypeId").find("option:selected").text();
-        channel.storeId= $('#storeId').val();
-        channel.storeName=$("#storeId").find("option:selected").text();
+
+        var storeIdStr = '',storeNameStr='';
+        $("#configui1").find("li").each(function (j, item) {
+            if(isEmpty(storeIdStr)){
+                storeIdStr += "," + $(item).find(".configli1").val();
+                storeNameStr +=  "," + $(item).find(".configliName").text();
+            }else{
+                storeIdStr += $(item).find(".configli1").val();
+                storeNameStr +=  $(item).find(".configliName").text();
+            }
+        });
+        if(!isEmpty(storeIdStr)){
+            vailErrorMsg_3($("#configui1"),"必须要选择一个店铺。");
+            return false;
+        }
+        channel.storeIdStr=storeIdStr;
+        channel.storeNameStr=storeNameStr;
         channel.dealChannelAccountPeriod=$("#dealChannelAccountPeriod").val();
         parent.showChannel(channel);
         parent.layer.close(parent.layer.getFrameIndex(window.name));
     }
 
+    $('#storeId').change(function() {
+        var name = $("#storeId option:selected").text();
+        var id = $('#storeId').val();
+        var bl = true;
+        if(id != "") {
+            $("input[name='configli1']").each(function (j, item) {
+                var s = $(item).val();
+                if (s === id) {
+                    bl = false;
+                }
+            });
+            if (bl) {
+                $("#configui1").append('<li class="b-close" class="configDetele1">' +
+                        ' <input type="hidden" value="' + id + '" class="configli1" name="configli1"><span class="configliName">' + name +
+                        '</span><div onclick="deleteli(this)" class="b-close-div" ><span class="my-close" ></span></div>' +
+                        '</li>');
+            }
+        }
+
+    });
+    function deleteli(obj) {
+        $(obj).parent().remove();
+    }
 </script>
 
 

+ 9 - 5
watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/add_dealer_product.ftl

@@ -48,7 +48,7 @@
         <form  method="post" class="form form-horizontal" id="form-contact"  >
 
             <input type="hidden" class="input-text" value="${dealerProduct.dealProdId!0}" id="dealProdId" name="dealProdId"  >
-            <input type="hidden" class="input-text" value="${dealerProduct.dealProdIdStr!""}" id="dealProdIdStr" name="dealProdIdStr"  >
+            <#--<input type="hidden" class="input-text" value="${dealerProduct.dealProdIdStr!""}" id="dealProdIdStr" name="dealProdIdStr"  >-->
 
             <div class="row cl" style="margin-left: 0px;">
                 <div class="formControls col-xs-2 col-sm-2" style="padding: 0px 2px;">
@@ -93,8 +93,8 @@
                         <#if dealerProductStoreList??>
                             <#list dealerProductStoreList as dealerProductStore>
                                 <div class="radio-box">
-                                    <input type="checkbox" class="son_checkbox" id="productAreaRela-${dealerProductStore_index}" name="productAreaRela" value="${dealerProductStore.storeId}"  >
-                                    <label style="width: 130px;display: block;" for="productAreaRela-${dealerProductStore_index}">${dealerProductStore.storeName}</label>
+                                    <input type="checkbox" class="son_checkbox" id="productAreaRela-${dealerProductStore_index}" name="productAreaRela" value="${dealerProductStore.dealChannelIdStr!''}"  >
+                                    <label style="width: 130px;display: block;" for="productAreaRela-${dealerProductStore_index}">${dealerProductStore.dealChannelName!''}</label>
                                 </div>
                             </#list>
                         </#if>
@@ -244,7 +244,7 @@
             ,page: { //支持传入 laypage 组件的所有参数(某些参数除外,如:jump/elem) - 详见文档
                 layout: ['limit', 'count', 'prev', 'page', 'next', 'skip'] //自定义分页布局
                 ,limit:10
-                ,limits:[ 10, 20, 50]
+                ,limits:[ 10, 20, 50, 100, 200]
                 //,curr: 5 //设定初始在第 5 页
                 ,groups: 3 //只显示 1 个连续页码
                 // ,first: "1" //不显示首页
@@ -302,11 +302,12 @@
                 $.each(layui.data('checked'), function(k, v) {
                     var dealerProduct = new Object();
                     dealerProduct.dealProdId=v.dealProdId;
-                    dealerProduct.dealProdIdStr=v.dealProdIdStr;
+//                    dealerProduct.dealProdIdStr=v.dealProdIdStr;
                     dealerProduct.colorProductId=v.colorProductId;
                     dealerProduct.colorId=v.colorId;
                     dealerProduct.productName=v.productName;
                     dealerProduct.colorName=v.colorName;
+                    dealerProduct.colorBar=v.colorBar;
                     var dealProdStoreArea = $("input[name=dealProdStoreArea]:checked").val();
                     dealerProduct.dealProdStoreArea=dealProdStoreArea;
                     if(dealProdStoreArea == 2){
@@ -334,6 +335,9 @@
                     dealerProduct.dealProdPrice=$("#dealProdPrice").val();
                     dealerProductArray.push(dealerProduct);
                 });
+                if(dealerProductArray == null || dealerProductArray.length < 1){
+                    vailErrorMsg_3($("#product_table"),"未选择任何产品。");
+                }
                 parent.showDealerProduct(dealerProductArray);
                 parent.layer.close(parent.layer.getFrameIndex(window.name));
             }

+ 40 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/dealer_list.ftl

@@ -54,6 +54,7 @@
                 <option value="1" <#if dmDealer.dealerType??><#if dmDealer.dealerType == 1 >selected="selected"</#if></#if>>个人</option>
                 <option value="2" <#if dmDealer.dealerType??><#if dmDealer.dealerType == 2 >selected="selected"</#if></#if>>企业</option>
             </select>
+
             <select class="my-select" name="dealerSelfOperated" id="dealerSelfOperated" style="height: 36px;width: 132px;margin: 0px;padding: 12px 10px 6px 15px;margin-bottom: 10px;">
                 <option value="">是否自营</option>
                 <option value="1" <#if dmDealer.dealerSelfOperated??><#if dmDealer.dealerSelfOperated == 1 >selected="selected"</#if></#if>>自营</option>
@@ -62,6 +63,7 @@
 
             <input type="text" class="my-input trim_input"  style="width:120px;margin-right: 0px; margin-bottom: 8px;" value="${dmDealer.dealerName!}" placeholder="客户名称" id="dealerName" name="dealerName">
             <input type="text" class="my-input trim_input"  style="width:120px;margin-right: 0px; margin-bottom: 8px;" value="${dmDealer.dealerIndustry!}" placeholder="客户行业" id="dealerIndustry" name="dealerIndustry">
+            <input type="text" class="my-input trim_input"  style="width:120px;margin-right: 0px; margin-bottom: 8px;" value="${dmDealer.dealerIndustry!}" placeholder="店铺名称" id="dealerIndustry" name="dealerIndustry">
 
             <button type="submit" class="btn" style="background: #50a2ea;border: 1px solid #50a2ea;color: #fff;height: 35px;margin-top: -8px;"><i class="Hui-iconfont">&#xe665;</i> 查询</button>
 
@@ -98,7 +100,13 @@
                                     企业
                                 </#if>
                             </td>
-                            <td>${dmDealer.dealerSelfOperated!''}</td>
+                            <td>
+                                <#if dmDealer.dealerSelfOperated == 1>
+                                    自营
+                                <#elseif dmDealer.dealerSelfOperated == 2>
+                                    非自营
+                                </#if>
+                            </td>
                             <td>${dmDealer.dealerIndustry!''}</td>
                             <td>
                                 <#if dmDealer.dealerState == 1>
@@ -130,6 +138,12 @@
                                     </a>
                                 </#if>
 
+                                <#if  admin.adminDept == 1>
+                                    <a style="text-decoration:none;display: none" href="javascript:void(0);" title="删除"  onclick="deleteDealer(${dmDealer.dealerId!''});">
+                                        <font color=#06c>删除</font>
+                                    </a>
+                                </#if>
+
                                 <#--
                                 &nbsp;
                                 <a style="text-decoration:none" href="javascript:void(0);" title="修改" onclick="toUpdateQuestion(${dmDealer.dealerId!''})">
@@ -200,6 +214,31 @@
         });
     }
 
+    /**
+     * 删除
+     * @param questionId
+     * @param state
+     */
+    function deleteDealer(dealerId) {
+        $.ajax({
+            type: "POST",
+            data: {
+                "dealerId" :dealerId
+            },
+            url: "${path}/admin/dealer/delete_dealer",
+            async: false,
+            success: function(data){
+                if (data.returnCode == 200) {
+                    location.replace(location.href);
+                }else{
+                    layer.msg("删除失败!", {icon: 5, time: 3000});
+                }
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
+            }
+        });
+    }
+
 </script>
 
 </body>

+ 9 - 3
watero-rst-web/src/main/webapp/WEB-INF/views/dm/dealer/update_dealer.ftl

@@ -177,6 +177,7 @@
                     <table class="table table-border table-bg table-bordered" style="margin-top: 10px;" id="">
                         <thead>
                         <tr class="text-c" id="table1">
+                            <th style="text-align: center;" width="30" >渠道名称</th>
                             <th style="text-align: center;" width="30" >渠道类别</th>
                             <th style="text-align: center;" width="30" >渠道类型</th>
                             <th style="text-align: center;" width="10">渠道名称</th>
@@ -192,10 +193,13 @@
                                         <input type="hidden" class="input-text dealChannelIdStr" value="${dealerChannel.dealChannelId!''}" >
                                         <input type="hidden" class="input-text channelId" value="${dealerChannel.channelId!''}" >
                                         <input type="hidden" class="input-text channelTypeId" value="${dealerChannel.channelTypeId!''}" >
-                                        <input type="hidden" class="input-text storeId" value="${dealerChannel.storeId!''}" >
+                                        <input type="hidden" class="input-text storeIdStr" value="${dealerChannel.storeIdStr!''}" >
+                                        <td class="dealChannelName">${dealerChannel.dealChannelName!''}</td>
                                         <td class="channelTypeName">${dealerChannel.channelTypeName!''}</td>
                                         <td class="channelName">${dealerChannel.channelName!''}</td>
-                                        <td class="storeName">${dealerChannel.storeName!''}</td>
+                                        <td class="storeNameStr">
+                                            ${dealerChannel.storeNameStr!''}
+                                        </td>
                                         <td class="dealChannelAccountPeriod">${dealerChannel.dealChannelAccountPeriod!''}</td>
                                         <td>
                                             <a href="javascript:void(0)" onclick="updateDealerChannel($(this))">修改</a>&nbsp;&nbsp;
@@ -226,6 +230,7 @@
                         <tr class="text-c" id="table1">
                             <th style="text-align: center;" width="30" >产品名称</th>
                             <th style="text-align: center;" width="30" >产品颜色</th>
+                            <th style="text-align: center;" width="30" >69码</th>
                             <th style="text-align: center;" width="10">供应价格</th>
                             <th style="text-align: center;" width="10">供应渠道对象</th>
                             <th style="text-align: center;" width="5">操作</th>
@@ -243,11 +248,12 @@
                                         <input type="hidden" class="input-text dealerProductStoreIds" value="${dealerProduct.dealerProductStoreIds!''}" >
                                         <td class="productName">${dealerProduct.productName!''}</td>
                                         <td class="colorName">${dealerProduct.colorName!''}</td>
+                                        <td class="colorName">${dealerProduct.colorBar!''}</td>
                                         <td>
                                             <input type="text" style="text-align: center;" class="input-text input-number decimal_input dealProdPrice" value="${((dealerProduct.dealProdPrice/100)?string("0.##"))!''}"   onkeyup="keyFunDecimal($(this),9999999,0)" myMinVal="0" myMaxVal="9999999">
                                         </td>
                                         <#if dealerProduct.dealProdStoreArea == 1>
-                                            <td class="dealerProductStoreName">全部店铺</td>
+                                            <td class="dealerProductStoreName">全部渠道</td>
                                         <#elseif dealerProduct.dealProdStoreArea == 2>
                                             <td class="dealerProductStoreName"> ${dealerProduct.dealerProductStoreName}</td>
                                         </#if>

+ 66 - 15
watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/claim_delaer.ftl

@@ -44,29 +44,58 @@
 
 <article class="page-container" style="padding: 10px;">
     <div class="pd-20 cl" style="padding-top: 0px;">
-        <form action="${path}/admin/financial_receipt/claim_delaer" method="post" class="form form-horizontal" id="form-fr"  onkeydown="if(event.keyCode==13)return false;">
+        <form  method="post" class="form form-horizontal" id="form-fr"  onkeydown="if(event.keyCode==13)return false;">
 
-            <input type="hidden" name="frId" value="${frId}">
-            <input type="hidden" name="type" value="${type}">
+            <input type="hidden" name="frId" id="frId" value="${frId}">
+            <input type="hidden" name="type" id="type" value="${type}">
 
-            <div class="row cl" id="" style="margin-top: 40px">
-                <label class="form-label col-xs-3 col-sm-3" style="text-align: right;"><span class="c-red">*</span>回款客户:</label>
-                <div class="formControls col-xs-8 col-sm-8" >
+            <div class="row cl">
+                <label class="form-label col-3">
+                    <div class="tit-2">回款信息</div>
+                </label>
+                <div class="formControls col-9">
+                </div>
+            </div>
+
+            <div class="row cl" id="" style="">
+                <label class="form-label col-1 col-sm-1">回款账号:</label>
+                <div class="formControls col-5 col-sm-5" style="padding-top: 3px;">
+                    ${fr.frBank!''}
+                </div>
+            </div>
+
+            <div class="row cl" id="" style="">
+                <label class="form-label col-1 col-sm-1">回款金额:</label>
+                <div class="formControls col-5 col-sm-5" style="padding-top: 3px;">
+                ${((fr.frAmount/100)?string("0.##"))!''}
+                </div>
+            </div>
+
+            <div class="row cl" id="" style="">
+                <label class="form-label col-1 col-sm-1">打款备注:</label>
+                <div class="formControls col-5 col-sm-5" style="padding-top: 3px;">
+                ${fr.frBank!''}
+                </div>
+            </div>
+
+            <div class="row cl" id="" style="">
+                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>所属客户:</label>
+                <div class="formControls col-3 col-sm-3" style="padding-top: 3px;">
                     <span class="select-box">
                          <select name="dealerId" class="select chosen" id="dealerId">
-                            <#if dmDealerList?? &&  (dmDealerList?size > 0) >
-                                <#list dmDealerList as dmDealer >
-                                    <option value="${dmDealer.dealerId}">${dmDealer.dealerName}</option>
-                                </#list>
-                            </#if>
+                             <#if dmDealerList?? &&  (dmDealerList?size > 0) >
+                                 <#list dmDealerList as dmDealer >
+                                     <option value="${dmDealer.dealerId}">${dmDealer.dealerName}</option>
+                                 </#list>
+                             </#if>
                          </select>
 				    </span>
                 </div>
             </div>
 
            <div class="row cl" style="margin-top: 50px">
-               <div class="col-4 col-sm-4 col-offset-4" >
-                   <button type="submit" class="btn btn-primary " style="width: 100%;" >保存</button>
+               <div class="col-2 col-sm-2 col-offset-1" >
+                   <button type="button" class="btn btn-primary " style="width: 100%;" onclick="submitDelaerClaim()" >下一步</button>
                </div>
            </div>
 
@@ -79,7 +108,7 @@
 </script>
 <script type="text/javascript">
 
-    $(function(){
+    /*$(function(){
         var loadIndex = 0;
         $("#form-fr").Validform({
             tiptype: function (msg, o, cssctl) {
@@ -117,7 +146,29 @@
                 return false;
             }
         });
-    });
+    });*/
+
+
+    function submitDelaerClaim() {
+        var frId = $("#frId").val();
+        var dealerId = $("#dealerId").val();
+        $.ajax({
+            type: "POST",
+            data: {
+                frId:frId,
+                dealerId:dealerId,
+                type:1
+            },
+            url: "${path}/admin/financial_receipt/claim_delaer",
+            async: false,
+            success: function(data){
+                window.location.href= "${path}/admin/financial_receipt/to_order_desc?frId="+frId;
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
+                layer.close(index);
+            }
+        });
+    }
 </script>
 
 

+ 32 - 10
watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/fr_list.ftl

@@ -132,7 +132,7 @@
                             </#if>
 
                                 <#if financialReceipt.frClaimStatus == 2>
-                                       <a style="text-decoration:none" href="javascript:void(0);" title="绑定客户" onclick="claimDelaer(${financialReceipt.frId!''},1)">
+                                       <a style="text-decoration:none" href="javascript:void(0);" title="认款" onclick="claimDelaer(${financialReceipt.frId!''},1)">
                                             <font color=#06c>认款</font>
                                        </a>
                                 </#if>
@@ -143,21 +143,23 @@
                                 </#if>
 
                                 <#if financialReceipt.frClaimStatus == 1>
-                                       <a style="text-decoration:none" href="javascript:void(0);" title="绑定订单" onclick="toOrderDesc(${financialReceipt.frId!''})">
-                                            <font color=#06c>绑定订单</font>
+                                       <a style="text-decoration:none" href="javascript:void(0);" title="认领订单" onclick="toOrderDesc(${financialReceipt.frId!''})">
+                                            <font color=#06c>认领订单</font>
                                        </a>
                                 </#if>
                                 <#if financialReceipt.frClaimStatus == 3>
-                                    <a style="text-decoration:none" href="javascript:void(0);" title="继续绑定订单" onclick="toOrderDesc(${financialReceipt.frId!''})">
-                                        <font color=#06c>继续绑定订单</font>
+                                    <a style="text-decoration:none" href="javascript:void(0);" title="认领订单" onclick="toOrderDesc(${financialReceipt.frId!''})">
+                                        <font color=#06c>认领订单</font>
                                     </a>
                                 </#if>
 
-                               <#if financialReceipt.frClaimStatus == 2>
-                                   <a style="text-decoration:none" href="javascript:void(0);" title="删除" onclick="toUpdateDealer(${financialReceipt.frId!''})">
+                               <#if financialReceipt.frClaimStatus == 2 && admin.adminDept == 1>
+                                   <a style="text-decoration:none;" href="javascript:void(0);" title="删除" onclick="deleteFr(${financialReceipt.frId!''})">
                                        <font color=#06c>删除</font>
                                    </a>
                                </#if>
+
+
                             </td>
                         </tr>
                     </#list>
@@ -200,7 +202,7 @@
      * 跳转到认款
      */
     function claimDelaer(frId,type){
-        layer_show_norm("认款","${path}/admin/financial_receipt/to_claim_delaer?frId="+frId+"&type="+type,2);
+        window.location.href = "${path}/admin/financial_receipt/to_claim_delaer?frId="+frId+"&type="+type
     }
 
     /**
@@ -233,11 +235,31 @@
                 }
             });
     }
-
+    /**
+     * 取消认款
+     */
+    function deleteFr(frId){
+            $.ajax({
+                type: "POST",
+                data: {
+                    "frId" :frId
+                },
+                url: "${path}/admin/financial_receipt/delete_fr",
+                async: false,
+                success: function(data){
+                    if (data.returnCode == 200) {
+                        location.replace(location.href);
+                    }else{
+                        layer.msg("删除失败!", {icon: 5, time: 3000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                }
+            });
+    }
 
 
    /*
-
     /!**
      * 禁用
      * @param questionId

+ 165 - 15
watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/order_desc.ftl

@@ -131,10 +131,10 @@
                             <#if claimOrderList?? &&  (claimOrderList?size > 0) >
                                 <#list claimOrderList as claimOrder>
                                     <#if claimOrder.claimOrderType == 1 >
-                                        <tr class="text-c order_item itemNum_${claimOrder_index}" orderItem="1">
+                                        <tr class="text-c order_item itemNum_order_${claimOrder_index}" orderItem="1">
                                             <input type="hidden" class="itemId" value="${claimOrder.itemId}">
-                                            <input type="hidden" class="itemProductDiscount" value="${((claimOrder.itemProductDiscount/100)?string("0.##"))!''}">
-                                            <td class="itemTotal">${((claimOrder.claimOrderNum) * (claimOrder.frPrice/100))!'0'}</td>
+                                            <input type="hidden" class="itemProductDiscount" value="${((claimOrder.frPrice/100/claimOrder.claimOrderNum)?string("0.##"))!''}">
+                                            <td class="itemTotal">${((claimOrder.frPrice/100)?string("0.##"))!''}</td>
                                             <td>${claimOrder.salesDealCode!''}</td>
                                             <td>${claimOrder.storeName!''}</td>
                                             <td>${claimOrder.itemProductName!''}</td>
@@ -144,7 +144,14 @@
                                             <td>${(claimOrder.salesPayTime?string("yyyy-MM-dd"))!''}</td>
                                             <td>${claimOrder.salesAdminName!''}</td>
                                             <td>${claimOrder.salesAddressName!''}<br>${claimOrder.salesAddressTel!''}</td>
-                                            <td>${claimOrder.salesAddressInfo!''}</td>
+
+                                            <td alt="${claimOrder.salesAddressInfo!''}" title="${claimOrder.salesAddressInfo!''}">
+                                                <#if claimOrder.salesAddressInfo?length gt 15>
+                                                ${claimOrder.salesAddressInfo?substring(0,12)}...
+                                                <#else>
+                                                ${claimOrder.salesAddressInfo!''}
+                                                </#if>
+                                            </td>
                                             <td><a href="javascript:void(0)" class="all_down" onclick="deleteTableByTr_orderDesc($(this))">删除</a></td>
                                         </tr>
                                     </#if>
@@ -184,21 +191,27 @@
                             <#if claimOrderList?? &&  (claimOrderList?size > 0) >
                                 <#list claimOrderList as claimOrder>
                                     <#if claimOrder.claimOrderType == 2 >
-                                        <tr class="text-c order_item itemNum_${claimOrder_index}"  orderItem="2">
+                                        <tr class="text-c order_item itemNum_return_${claimOrder_index}"  orderItem="2">
                                             <input type="hidden" class="itemId" value="${claimOrder.itemId}">
-                                            <input type="hidden" class="itemProductDiscount" value="${((claimOrder.itemProductDiscount/100)?string("0.##"))!''}">
+                                            <input type="hidden" class="itemProductDiscount" value="${((claimOrder.itemProductDiscount/100/claimOrder.claimOrderNum)?string("0.##"))!''}">
                                             <td class="itemTotal">${((claimOrder.frPrice/100)?string("0.##"))!''}</td>
                                             <td>${claimOrder.salesDealCode!''}</td>
                                             <td>${claimOrder.storeName!''}</td>
                                             <td>${claimOrder.itemProductName!''}</td>
                                             <td>${claimOrder.itemProductColor!''}</td>
-                                            <td>${((claimOrder.frPrice/100)?string("0.##"))!''}</td>
+                                            <td>${((claimOrder.frPrice/100*-1)?string("0.##"))!''}</td>
                                             <td class="itemNum">${claimOrder.itemNum!'0'}</td>
                                             <td style="width: 70px;"><input type="text" style="text-align: center;" class="input-text input-number decimal_input itemReturnNum" value="${claimOrder.claimOrderNum}"    onkeyup="keyFun($(this),${claimOrder.itemNum!'999'},0)" onpaste="keyFun($(this),${claimOrder.itemNum!'999'},0)" ></td>
                                             <td>${(claimOrder.salesPayTime?string("yyyy-MM-dd"))!''}</td>
                                             <td>${claimOrder.salesAdminName!''}</td>
                                             <td>${claimOrder.salesAddressName!''}<br>${claimOrder.salesAddressTel!''}</td>
-                                            <td>${claimOrder.salesAddressInfo!''}</td>
+                                            <td alt="${claimOrder.salesAddressInfo!''}" title="${claimOrder.salesAddressInfo!''}">
+                                                <#if claimOrder.salesAddressInfo?length gt 15>
+                                                    ${claimOrder.salesAddressInfo?substring(0,12)}...
+                                                <#else>
+                                                    ${claimOrder.salesAddressInfo!''}
+                                                </#if>
+                                            </td>
                                             <td><a href="javascript:void(0)" class="all_down" onclick="deleteTableByTr_orderDesc($(this))">删除</a></td>
                                         </tr>
                                     </#if>
@@ -209,6 +222,76 @@
                 </div>
             </div>
 
+            <div class="row cl" id="" style="">
+                <div class="formControls col-5 col-sm-5" style="padding-top: 3px;">
+                    <button type="button" class="btn btn-primary" onclick="selectOrderReturnPost()">添加退货邮费</button>
+                </div>
+            </div>
+            <div class="row cl" id="" style="">
+                <div class="formControls col-12 col-sm-12" >
+                    <table class="table table-border table-bordered table-bg table-hover table-sort">
+                        <thead>
+                        <tr class="text-c">
+                            <th width="30">待结算金额</th>
+                            <th width="50">邮费金额</th>
+                            <th width="50">支付宝姓名</th>
+                            <th width="100">支付宝账号</th>
+                            <th width="30">转账类型</th>
+                            <th width="30">状态</th>
+                            <th width="60">备注</th>
+                            <th width="20">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="postageAll">
+                        <#if claimOrderList?? &&  (claimOrderList?size > 0) >
+                            <#list claimOrderList as claimOrder>
+                                <#if claimOrder.claimOrderType == 3 >
+                                    <tr class="text-c order_item itemNum_post_${claimOrder_index}" orderitem="3">
+                                        <input type="hidden" class="itemId" value="${claimOrder.itemId}">
+                                        <input type="hidden" class="postageAmount" value="${((claimOrder.frPrice/100)?string("0.##"))!''}">
+                                        <td class="itemTotal">${((claimOrder.frPrice/100)?string("0.##"))!''}</td>
+                                        <td>${((claimOrder.frPrice/100*-1)?string("0.##"))!''}</td>
+                                        <td>${claimOrder.postageAlipayName!''}</td>
+                                        <td>${claimOrder.postageAlipay!''}</td>
+                                        <td>
+                                            <#if claimOrder.postageAlipayType??>
+                                                <#if claimOrder.postageAlipayType = 1 >
+                                                    用户付款
+                                                <#elseif claimOrder.postageAlipayType = 2 >
+                                                    客户付款
+                                                <#elseif claimOrder.postageAlipayType = 3 >
+                                                    公司付款
+                                                </#if>
+                                            </#if>
+                                        </td>
+                                        <td>
+                                            <#if claimOrder.postageStatus?? >
+                                                <#if claimOrder.postageStatus = 1 >
+                                                    未申请
+                                                <#elseif claimOrder.postageStatus = 2 >
+                                                    已申请(待转账)
+                                                <#elseif claimOrder.postageStatus = 3 >
+                                                    已转账
+                                                <#elseif claimOrder.postageStatus = 4 >
+                                                    其他
+                                                </#if>
+                                             </#if>
+                                        </td>
+                                        <td>
+                                            ${claimOrder.postageDesc!''}
+                                        </td>
+                                        <td>
+                                            <a href="javascript:void(0)" class="all_down" onclick="deleteTableByTr_orderDesc($(this))">删除</a>
+                                        </td>
+                                    </tr>
+                                </#if>
+                            </#list>
+                        </#if>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+
             <div class="row cl" id="" style="margin-left: 16px;font-weight: bold;">
                 <p class=""  id="">
                 <#--    共<span id="allNormalProduct">0</span>个正常产品,
@@ -303,6 +386,10 @@
                             if(isAddOrderType == 1){
                                 var itemTotal = accDiv(salesOrderItem.itemTotal,100);
                                 var html = '';
+                                var address = salesOrder.salesAddressInfo;
+                                if(address.length > 15){
+                                    address = address.substring(0,12)+'…';
+                                }
                                 html = '<tr class="text-c order_item itemNum_'+ itemNum +'" orderItem="1">' +
                                         '<input type="hidden" class="itemId" value="'+  salesOrderItem.itemId +'">' +
                                         '<input type="hidden" class="itemProductDiscount" value="'+  accDiv(itemTotal,salesOrderItem.itemNum) +'">' +
@@ -316,7 +403,7 @@
                                         ' <td>'+ time +'</td>' +
                                         ' <td>'+ salesOrder.salesAdminName +'</td>' +
                                         ' <td>'+ salesOrder.salesAddressName +'<br>'+ salesOrder.salesAddressTel + '</td>' +
-                                        ' <td>'+ salesOrder.salesAddressInfo +'</td>' +
+                                        ' <td alt="'+ salesOrder.salesAddressInfo +'" title="'+ salesOrder.salesAddressInfo +'">'+ address +'</td>' +
                                         ' <td><a href="javascript:void(0)" class="all_down" onclick="deleteTableByTr_orderDesc($(this))">删除</a></td>' +
                                         '</tr>';
                                 $("#orderAll").append(html);
@@ -324,6 +411,10 @@
                                 var itemTotal = accDiv(salesOrderItem.itemTotal,100);
                                 var dis = accDiv(itemTotal,salesOrderItem.itemNum);
                                 var html = '';
+                                var address = salesOrder.salesAddressInfo;
+                                if(address.length > 15){
+                                    address = address.substring(0,12)+'…';
+                                }
                                 html = '<tr class="text-c order_item itemNum_'+ itemNum +'"  orderItem="2">' +
                                         '<input type="hidden" class="itemId" value="'+  salesOrderItem.itemId +'">' +
                                         '<input type="hidden" class="itemProductDiscount" value="'+dis +'">' +
@@ -338,7 +429,7 @@
                                         ' <td>'+ time +'</td>' +
                                         ' <td>'+ salesOrder.salesAdminName +'</td>' +
                                         ' <td>'+ salesOrder.salesAddressName +'<br>'+ salesOrder.salesAddressTel + '</td>' +
-                                        ' <td>'+ salesOrder.salesAddressInfo +'</td>' +
+                                        ' <td alt="'+ salesOrder.salesAddressInfo +'" title="'+ salesOrder.salesAddressInfo +'">'+ address +'</td>' +
                                         ' <td><a href="javascript:void(0)" class="all_down" onclick="deleteTableByTr_orderDesc($(this))">删除</a></td>' +
                                         '</tr>';
                                 $("#returnAll").append(html);
@@ -372,6 +463,58 @@
     }
 
     /**
+     *  搜索退货订单的邮费
+     */
+    function selectOrderReturnPost() {
+        var dealerId = $("#dealerId").val();
+        layer_show("搜索邮费信息",url_path + "/admin/financial_receipt/to_select_post?dealerId="+dealerId,"1200","500");
+    }
+
+    /**
+     * 展示邮费
+     */
+    function showPost(postageInfoArray) {
+        for(var i=0;i<postageInfoArray.length;i++){
+            var postageInfo = postageInfoArray[i];
+
+            //转账类型  1:用户付款  2:客户付款  3:公司付款
+            var postageAlipayType ='';
+            if(postageInfo.postageAlipayType == 1){
+                postageAlipayType = '用户付款';
+            }else if(postageInfo.postageAlipayType == 2){
+                postageAlipayType = '客户付款';
+            }else if(postageInfo.postageAlipayType == 3){
+                postageAlipayType = '公司付款';
+            }
+
+            var postageStatus = '';
+            if(postageInfo.postageStatus == 0 || postageInfo.postageStatus == 1){
+                postageStatus = '未申请';
+            }else if(postageInfo.postageStatus == 2){
+                postageStatus = '已申请(待转账)';
+            }else if(postageInfo.postageStatus == 3){
+                postageStatus = '已转账';
+            }else if(postageInfo.postageStatus == 4){
+                postageStatus = '未知';
+            }
+            html = '<tr class="text-c order_item itemNum_'+ i +'" orderItem="3">' +
+                    '<input type="hidden" class="itemId" value="'+  postageInfo.postageId +'">' +
+                    '<input type="hidden" class="postageAmount" value="'+  postageInfo.postageAmount +'">' +
+                    ' <td class="itemTotal">'+ -postageInfo.postageAmount +'</td>' +
+                    ' <td>'+ postageInfo.postageAmount +'</td>' +
+                    ' <td>'+ postageInfo.postageAlipayName +'</td>' +
+                    ' <td>'+ postageInfo.postageAlipay +'</td>' +
+                    ' <td>'+ postageAlipayType +'</td>' +
+                    ' <td>'+ postageStatus +'</td>' +
+                    ' <td>'+ postageInfo.postageDesc +'</td>' +
+                    ' <td><a href="javascript:void(0)" class="all_down" onclick="deleteTableByTr_orderDesc($(this))">删除</a></td>' +
+                    '</tr>';
+            $("#postageAll").append(html);
+        }
+        calculaAllAmount();
+    }
+
+    /**
      * 计算总金额
      */
     function calculaAllAmount(){
@@ -384,11 +527,15 @@
             if($(this).attr("orderItem") == 1){
                 total = accAdd(total,itemTotal);
                 var itemNum = $(this).find(".itemNum").text();
-                allNormalProduct = accAdd(allNormalProduct,itemNum);
-            }else{
+               // allNormalProduct = accAdd(allNormalProduct,itemNum);
+            }else if($(this).attr("orderItem") == 2){
+                total = accAdd(total,itemTotal);
+                //var itemReturnNum = $(this).find(".itemReturnNum").val();
+               // allReturnProduct = accAdd(allReturnProduct,itemReturnNum);
+            }else if($(this).attr("orderItem") == 3){
                 total = accAdd(total,itemTotal);
-                var itemReturnNum = $(this).find(".itemReturnNum").val();
-                allReturnProduct = accAdd(allReturnProduct,itemReturnNum);
+               // var itemReturnNum = $(this).find(".itemReturnNum").val();
+               // allReturnProduct = accAdd(allReturnProduct,itemReturnNum);
             }
         });
         $("#allAmount").text(total);
@@ -430,9 +577,12 @@
                     if($(this).attr("orderItem") == 1){
                         claimOrder.claimOrderType = 1;
                         claimOrder.claimOrderNum = $(this).find(".itemNum").text();
-                    }else{
+                    }else  if($(this).attr("orderItem") == 2){
                         claimOrder.claimOrderType = 2;
                         claimOrder.claimOrderNum = $(this).find(".itemReturnNum").val();
+                    }else  if($(this).attr("orderItem") == 3){
+                        claimOrder.claimOrderType = 3;
+                        claimOrder.claimOrderNum = 1;
                     }
 
                     var  frPrice =  $(this).find(".itemTotal").text();

+ 30 - 26
watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/select_order_list.ftl

@@ -63,17 +63,14 @@
             <form action="" method="post">
                 <div class="row cl" style="margin-left: 0px;">
 
-                 <#--   <div class="formControls col-1 col-sm-1" style="margin-right: 30px;">
-                        <button type="button" class="btn btn-primary" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);" id="" name="" onclick="addOrder()">添加订单</button>
-                    </div>-->
                     <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;" > <span class="select-box">
-                        <select name="companyId" class="select" id="companyId">
-                             <option value="">销售公司</option>
-                            <#if companyInfoList?? &&  (companyInfoList?size > 0) >
-                                <#list companyInfoList as companyInfo>
-                                    <option value ="${companyInfo.companyId!""}">${companyInfo.companyName!""}</option>
-                                </#list>
-                            </#if>
+                        <select name="dealerId" class="select" id="dealerId">
+                             <option value="">选择客户</option>
+                        <#if dmDealerList?? &&  (dmDealerList?size > 0) >
+                            <#list dmDealerList as dmDealer>
+                                <option value ="${dmDealer.dealerId!""}">${dmDealer.dealerName!""}</option>
+                            </#list>
+                        </#if>
                         </select>
                         </span>
                     </div>
@@ -83,7 +80,6 @@
                         </span>
                     </div>
 
-
                      <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;" > <span class="select-box">
                         <select name="salesStatus" class="select" id="salesStatus"  >
                              <option value="">状态</option>
@@ -105,6 +101,14 @@
                      <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;">
                          <input type="text" class="input-text" value="" placeholder="收货人电话" id="salesAddressTel" name="">
                      </div>
+
+                     <div class="formControls col-4 col-sm-4" style="padding: 0px 10px 0px 0px; width: 125px;">
+                         <input type="text" style="width:120px;height:30px;margin-right: 0px;font-size: 9px;" name="startDate" id="startDate" class="input-text" placeholder="开始时间" onClick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss'})"  readonly="readonly"/>
+                     </div>
+                    <div class="formControls col-4 col-sm-4" style="padding: 0px 10px 0px 0px; width: 125px;">
+                        <input type="text" style="width:120px;height:30px;margin-right: 0px;font-size: 9px;" name="endDate" id="endDate" class="input-text" placeholder="结束时间" onClick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss'})"  readonly="readonly"/>
+                     </div>
+
                      <div class="formControls col-1 col-sm-1" >
                          <button type="button" class="btn btn-primary" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);" id="searchOrder" name="">搜索</button>
                      </div>
@@ -158,9 +162,9 @@
 
     $(function () {
         /*选择店铺*/
-        $("[name='companyId']").change(function (){
-            var companyId = $(this).val();
-            setStore(companyId,$("#storeId"));       //获取店铺
+        $("[name='dealerId']").change(function (){
+            var dealerId = $(this).val();
+            setStore(dealerId,$("#storeId"));       //获取店铺
         });
 
         /*搜索*/
@@ -184,7 +188,7 @@
             shade: [0.5,'#fff'] //0.1透明度的白色背景
         });
 
-        var salesCompanyId = cufte($("#companyId").val());
+        var dealerId = cufte($("#dealerId").val());
         var salesStoreId = cufte($("#storeId").val());
         var salesOrderStatus = cufte($("#salesOrderStatus").val());
         var salesStatus = cufte($("#salesStatus").val());
@@ -192,10 +196,12 @@
         var salesAddressName =cufte($("#salesAddressName").val());
         var salesAddressTel = cufte($("#salesAddressTel").val());
         var salesOrderId = cufte($("#salesOrderId").val());
+        var startDate = cufte($("#startDate").val());
+        var endDate = cufte($("#endDate").val());
         $.ajax({
             type: "POST",
             data: {
-                salesCompanyId : salesCompanyId,
+                dealerId : dealerId,
                 salesStoreId : salesStoreId,
                 salesOrderStatus : salesOrderStatus,
                 salesStatus : salesStatus,
@@ -203,6 +209,9 @@
                 salesOrderId : salesOrderId,
                 salesAddressName : salesAddressName,
                 salesAddressTel : salesAddressTel,
+                startDate : startDate,
+                endDate : endDate,
+                orderDateType : 1,
                 pageSize : 100
             },
             url: "${path}/admin/salesOrder/select_order_page",
@@ -279,18 +288,16 @@
 
 
 <script>
-    /**
-     * 展示销售公司
-     */
-    function setStore(companyId,node){
-        var companyId = $("#companyId").val();
+    //展示销售公司
+    function setStore(dealerId,node){
+        var dealerId = cufte($("#dealerId option:checked").val());
         var html = '<option value="">店铺</option>';
         $.ajax({
             type: "POST",
             data: {
-                companyId : companyId
+                dealerId : dealerId
             },
-            url: "${path}/admin/salesChannel/select_storeInfo",
+            url: "${path}/admin/financial_receipt/select_storeInfo_by_dealer",
             success: function(data){
                 var id;
                 if (data.returnCode == 200) {
@@ -307,9 +314,6 @@
             }
         });
     }
-
-
-
 </script>
 </body>
 </html>

+ 350 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/dm/financialReceipt/select_post_list.ftl

@@ -0,0 +1,350 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <link rel="Bookmark" href="/favicon.ico" >
+    <link rel="Shortcut Icon" href="/favicon.ico" />
+<#include "/base/add_base.ftl">
+    <title>邮费列表</title>
+    <style>
+        .tit{position: relative;text-align: left;font-size: 16px;padding-left: 10px;}
+        .tit:after{content: '';position: absolute;left: 0;top: 20%;height: 60%;width: 3px;background-color: #32a3d8;}
+        .tit-2{position: relative;text-align: left;font-size: 16px;padding-left: 10px;color: #50a2ea;}
+        .tit-2:after{content: '';position: absolute;left: 0;top: 50%;height: 6px;width: 6px;border-radius: 6px;margin-top: -3px; background-color: #32a3d8;}
+        #province select{margin-right:10px; width:100px;height: 31px;-webkit-appearance:none !important;appearance:none;background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;padding-left:3px;padding-right: 25px;}
+
+        #suggest, #suggest2 {width:200px}
+        .gray {color:gray}
+        .ac_results {background:#fff;border:1px solid #7f9db9;position: absolute;z-index: 10000;display: none}
+        .ac_results li a {white-space: nowrap;text-decoration:none;display:block;color:#05a;padding:1px 3px}
+        .ac_results li {border:1px solid #fff}
+        .ac_over, .ac_results li a:hover {background:#c8e3fc}
+        .ac_results li a span {float:right}
+        .ac_result_tip {border-bottom:1px dashed #666;padding:3px}
+
+        .select-box{background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;}
+        .select-box select{-webkit-appearance:none !important;background-color: transparent; appearance:none;padding-right: 15px;}
+        .dalog-ask{position: absolute;left:60%;top:0;-webkit-transform: translateY(-30%);transform: translateY(-30%);display: none;background-color: #fff;z-index: 10;}
+        .tag{ width:300px; min-height:300px; border:1px solid #32a3d8; position:relative;background-color: #fff;line-height: 1.5;padding: 10px 12px;}
+        .tag em{display:block; border-width:15px; position:absolute; top:30%; left:-30px;border-style:solid dashed dashed; border-color:transparent  #32a3d8 transparent transparent;font-size:0; line-height:0;}
+        .dalog-ask .ask{color: #000;margin: 10px 0 5px 0;}
+        .dalog-ask .answer{color: #666;margin-bottom: 10px;}
+        .dalog-ask .answer:hover{color: #32a3d8;cursor: pointer;}
+        .time-line-list{list-style: none;width: 100%;margin-left: -20px;}
+        .time-line-list>li{position: relative;float: left; text-align: center;width: 100px;overflow: hidden;white-space: nowrap;word-break: break-all;padding: 2px 0;}
+        .time-line-list .number{display: inline-block; padding: 2px; background: #32a3d8;border: 2px solid #fff;box-shadow:0 0 0 1px #32a3d8;width: 20px;height: 20px;color: #fff;line-height: 20px;border-radius: 50%;}
+        .time-line-list>li:before{content:'';position: absolute;height: 1px;width: 30%;right:0;top: 15px; background-color: #32a3d8;}
+        .time-line-list>li:after{content: '';position: absolute;height: 1px;width: 30%;left: 0;top: 15px;background:#32a3d8;}
+        .time-line-list>li:first-child:after,.time-line-list>li:last-child:before{display: none;}
+        .time-line-list .arrow{border-width:7px; position:absolute; left:25%; top:9px;border-style:solid dashed dashed; border-color:transparent  transparent  transparent #32a3d8;font-size:0; line-height:0;}
+        .time-line-list>li:first-child .arrow{display: none;}
+        .table-bg th{background-color: #e2f6ff;}
+        .update-parts>span{margin-right: 10px;padding: 3px 4px;background-color: #effaff;border: 1px solid #32a3d8;}
+        .my-search-input{padding-left: 30px;background: url(${path}/common/images/cm/search.png) 6px center no-repeat;background-size: auto 60%; }
+        .input-produce{height: 25px;line-height: 25px}
+        .color-div{height: 30px;}
+        .table-td-color{}
+        .msg-phone{
+            height: 35px;
+            line-height: 35px;
+        }
+        .select-order{text-decoration:none;color: #32A3D8;}
+        .select-order:hover{text-decoration:underline;}
+    </style>
+</head>
+<body>
+<div class="page-container">
+    <div class="order-list">
+        <div class="text-c">
+            <form action="" method="post">
+                <div class="row cl" style="margin-left: 0px;">
+
+                    <input type="hidden" class="input-text" value="${dealerId}" id="dealerId" name="dealerId">
+
+                   <#-- <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;" > <span class="select-box">
+                        <select name="companyId" class="select" id="companyId">
+                             <option value="">销售公司</option>
+                            <#if companyInfoList?? &&  (companyInfoList?size > 0) >
+                                <#list companyInfoList as companyInfo>
+                                    <option value ="${companyInfo.companyId!""}">${companyInfo.companyName!""}</option>
+                                </#list>
+                            </#if>
+                        </select>
+                        </span>
+                    </div>-->
+
+                    <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;" > <span class="select-box">
+                        <select name="dealerId" class="select" id="dealerId">
+                             <option value="">选择客户</option>
+                            <#if dmDealerList?? &&  (dmDealerList?size > 0) >
+                                <#list dmDealerList as dmDealer>
+                                    <option value ="${dmDealer.dealerId!""}">${dmDealer.dealerName!""}</option>
+                                </#list>
+                            </#if>
+                        </select>
+                        </span>
+                    </div>
+
+                    <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;">
+                        <span class="select-box">
+                            <select name="storeId" class="select" id="storeId">
+
+                            </select>
+                        </span>
+                    </div>
+
+                    <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;"> <span class="select-box">
+                        <select name="postageAlipayType" class="select" id="postageAlipayType">
+                            <option value="">转账类型</option>
+                            <option value="1">用户付款</option>
+                            <option value="2">客户付款</option>
+                            <option value="3">公司付款</option>
+                        </select>
+                        </span>
+                    </div>
+
+                    <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;"> <span class="select-box">
+                        <select name="postageStatus" class="select" id="postageStatus">
+                            <option value="">状态</option>
+                            <option value="1">未申请</option>
+                            <option value="2">已申请</option>
+                            <option value="3" selected>已转账</option>
+                            <option value="4">其他</option>
+                        </select>
+                        </span>
+                    </div>
+
+                    <div class="formControls col-2 col-sm-2" style="padding: 0px 10px 0px 0px; width: 110px;" >
+                        <input type="text" class="input-text" value="" placeholder="客诉ID" id="customerId" name="customerId" >
+                    </div>
+
+                    <div class="formControls col-4 col-sm-4" style="padding: 0px 10px 0px 0px; width: 125px;">
+                        <input type="text" style="width:120px;height:30px;margin-right: 0px;font-size: 9px;" name="startDate" id="startDate" class="input-text" placeholder="开始时间(客诉创建日期)" onClick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss'})"  readonly="readonly"/>
+                    </div>
+                    <div class="formControls col-4 col-sm-4" style="padding: 0px 10px 0px 0px; width: 125px;">
+                        <input type="text" style="width:120px;height:30px;margin-right: 0px;font-size: 9px;" name="endDate" id="endDate" class="input-text" placeholder="结束时间(客诉创建日期)" onClick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss'})"  readonly="readonly"/>
+                    </div>
+
+                     <div class="formControls col-1 col-sm-1" >
+                         <button type="button" class="btn btn-primary" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);" id="searchOrder" name="">搜索</button>
+                     </div>
+                </div>
+            </form>
+        </div>
+
+        <div class="mt-20" style="height: 330px;overflow: auto;overflow-x: hidden;margin-bottom: 12px;border: 1px solid #ddd;">
+            <table class="table table-border table-bordered table-bg table-hover table-sort">
+                <thead>
+                <tr class="text-c">
+                    <th width="10"><input type="checkbox" class="selectAll" id="selectAll" value="selectAll" ></th>
+                    <th width="50">客诉ID</th>
+                    <th width="50">邮费金额</th>
+                    <th width="50">支付宝姓名</th>
+                    <th width="100">支付宝账号</th>
+                    <th width="100">转账类型</th>
+                    <th width="60">状态</th>
+                    <th width="80">备注</th>
+                    <th width="80">客诉创建时间</th>
+                </tr>
+                </thead>
+                <tbody id="orderAll">
+
+                     <tr class="text-c">
+                         <td colspan="12">请输入搜索条件,搜索邮费信息~
+                         </td>
+                     </tr>
+
+                </tbody>
+            </table>
+        </div>
+
+        <div class="formControls col-1 col-sm-1" style="margin-left: 45%;">
+            <button type="button" class="btn btn-primary" style="background: #32a3d8;color: #fff;" id="" name="" onclick="selectOrderInfo()">确认选择</button>
+        </div>
+    </div>
+
+</div>
+
+<tfoot>
+</tfoot>
+
+<#--时间控件-->
+<script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+
+<script>
+
+    $(function () {
+        /*选择店铺*/
+        $("[name='dealerId']").change(function (){
+            var dealerId = $(this).val();
+            setStore(dealerId,$("#storeId"));       //获取店铺
+        });
+
+        /*搜索*/
+        $(document).on('click', '#searchOrder', function() {
+            searchOrder();
+        });
+
+        /*回车搜索*/
+        $('.input-text').keydown(function(event){
+            if(event.keyCode == 13){ //绑定回车
+                $('#searchOrder').click();
+            }
+        });
+    })
+
+    /**
+     * 搜索订单
+     */
+    function searchOrder(){
+        var index = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
+
+        var dealerId = cufte($("#dealerId option:checked").val());
+        var storeId = cufte($("#storeId option:checked").val());
+        var postageAlipayType = cufte($("#postageAlipayType").val());
+        var customerId = cufte($("#customerId").val());
+        var postageStatus = cufte($("#postageStatus").val());
+        var startDate = cufte($("#startDate").val());
+        var endDate = cufte($("#endDate").val());
+
+        $.ajax({
+            type: "POST",
+            data: {
+                dealerId : dealerId,
+                storeId : storeId,
+                postageAlipayType : postageAlipayType,
+                customerId : customerId,
+                postageStatus : postageStatus,
+                startDate : startDate,
+                endDate : endDate,
+                pageSize : 100
+            },
+            url: "${path}/admin/financial_receipt/select_post",
+            async: true,
+            success: function(data){
+                var html = "";
+                if (data.returnCode == 200 && data.returnMsg.pagedResult.dataList.length > 0 ) {
+                    for(var i=0;i<data.returnMsg.pagedResult.dataList.length;i++){
+                        var postageInfo = data.returnMsg.pagedResult.dataList[i];
+                        var disHtml =  "";
+                        var productsHtml = '';
+
+                        if(postageInfo.postageStatus != 3){
+                            disHtml = 'disabled="disabled" title="只能选择已转账的邮费" ';
+                        }
+
+                        //转账类型  1:用户付款  2:客户付款  3:公司付款
+                        var postageAlipayType ='';
+                        if(postageInfo.postageAlipayType == 1){
+                            postageAlipayType = '用户付款';
+                        }else if(postageInfo.postageAlipayType == 2){
+                            postageAlipayType = '客户付款';
+                        }else if(postageInfo.postageAlipayType == 3){
+                            postageAlipayType = '公司付款';
+                        }
+
+                        var postageStatus = '';
+                        if(postageInfo.postageStatus == 0 || postageInfo.postageStatus == 1){
+                            postageStatus = '未申请';
+                        }else if(postageInfo.postageStatus == 2){
+                            postageStatus = '已申请(待转账)';
+                        }else if(postageInfo.postageStatus == 3){
+                            postageStatus = '已转账';
+                        }else if(postageInfo.postageStatus == 4){
+                            postageStatus = '未知';
+                        }
+                        var time = formatDate(new Date(postageInfo.customerCreateTime),"yyyy-MM-dd");
+
+                        html += '<tr class="text-c">' +
+                                '<input type="hidden" class="postageAlipayType" value="'+ postageInfo.postageAlipayType +'">' +
+                                '<input type="hidden" class="postageStatus" value="'+ postageInfo.postageStatus +'">' +
+                                ' <td><input type="checkbox" class="sales_order_id" title="" id="" value="'+ postageInfo.postageId +'" '+ disHtml  +'></td>' +
+                                ' <td class="customerId">'+ cufte(postageInfo.customerId) +'</td>' +
+                                ' <td class="postageAmount">'+ accDiv(cufte(postageInfo.postageAmount),100) +'</td>' +
+                                ' <td class="postageAlipayName">'+ cufte(postageInfo.postageAlipayName) +'</td>' +
+                                ' <td class="postageAlipay">'+ cufte(postageInfo.postageAlipay) +'</td>' +
+                                ' <td>'+ postageAlipayType +'</td>' +
+                                ' <td>'+ postageStatus +'</td>' +
+                                ' <td class="postageDesc">'+ cufte(postageInfo.postageDesc) +'</td>' +
+                                ' <td>'+ time +'</td>' +
+                                ' </tr>';
+                    }
+                }else{
+                    html = '<tr class="text-c"><td colspan="12">没有搜索到订单,请点击“添加订单”按钮,添加订单。</td></tr>';
+                }
+                $("#orderAll").html(html);
+                layer.close(index);
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
+                layer.close(index);
+            }
+        });
+    }
+
+    /**
+     * 选择订单,返回订单内容到父级
+     */
+    function selectOrderInfo() {
+        var postageInfoArray = new Array();
+        $(".sales_order_id").each(function(){
+            if($(this).is(':checked')){
+                var postageInfo = new Object();
+                postageInfo.postageId  = $(this).val();
+                var $postTr = $(this).parents("tr");
+                postageInfo.postageAlipayType  = $postTr.find(".postageAlipayType").val();
+                postageInfo.postageStatus  = $postTr.find(".postageStatus").val();
+                postageInfo.customerId  = $postTr.find(".customerId").text();
+                postageInfo.postageAmount  = $postTr.find(".postageAmount").text();
+                postageInfo.postageAlipayName  = $postTr.find(".postageAlipayName").text();
+                postageInfo.postageAlipay  = $postTr.find(".postageAlipay").text();
+                postageInfo.postageDesc  = $postTr.find(".postageDesc").text();
+                postageInfoArray.push(postageInfo)
+            }
+        })
+        parent.showPost(postageInfoArray);
+        parent.layer.close(parent.layer.getFrameIndex(window.name));
+    }
+
+    function toSearch(){
+        $(".order-add").hide();
+        $(".order-list").show();
+    }
+</script>
+
+
+<script>
+    //展示销售公司
+    function setStore(dealerId,node){
+        var dealerId = cufte($("#dealerId option:checked").val());
+        var html = '<option value="">店铺</option>';
+        $.ajax({
+            type: "POST",
+            data: {
+                dealerId : dealerId
+            },
+            url: "${path}/admin/financial_receipt/select_storeInfo_by_dealer",
+            success: function(data){
+                var id;
+                if (data.returnCode == 200) {
+                    for(var i=0;i<data.returnMsg.storeInfoList.length;i++){
+                        var storeInfo = data.returnMsg.storeInfoList[i];
+                        html += '<option value="'+ storeInfo.storeId +'">'+ storeInfo.storeName +'</option>';
+                    }
+                }else{
+                    html = '';
+                }
+                $(node).html(html);
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
+            }
+        });
+    }
+</script>
+</body>
+</html>

+ 1 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/home/pc_index.ftl

@@ -38,7 +38,7 @@
 <header class="navbar-wrapper">
     <input type="hidden" id="parent_is_login" value="1" placeholder="用于判断是否存在父级页面!">
     <div class="navbar navbar-fixed-top">
-        <div class="container-fluid cl"><a class="logo navbar-logo hidden-xs" href="#"><img src="/common/images/index/admin-login.png" style="height: 40px;"></a><a class="logo navbar-logo-m f-l mr-10 visible-xs" href="#">Watero-RST</a>
+        <div class="container-fluid cl"><a class="logo navbar-logo hidden-xs" href="#"><img src="${path}/common/images/index/admin-login.png" style="height: 40px;"></a><a class="logo navbar-logo-m f-l mr-10 visible-xs" href="#">Watero-RST</a>
             <span class="logo navbar-slogan f-l mr-10 hidden-xs"></span>
             <a aria-hidden="false" class="nav-toggle Hui-iconfont visible-xs" href="javascript:;">&#xe667;</a>
             <nav id="Hui-userbar" class="nav navbar-nav navbar-userbar hidden-xs">

+ 17 - 22
watero-rst-web/src/main/webapp/WEB-INF/views/order/excel_to_order_new.ftl

@@ -45,7 +45,7 @@
             <tr class="text-c">
                 <td width="55">收货人姓名</td>
                 <td style="text-align: left;">
-                    <select class="my-select" name="addr-name" id="addr-name" matchSelect="收件人|收货人|客户姓名|收件人姓名|收货人姓名" style="height: 30px;width: 180px;margin: 0px;">
+                    <select class="my-select" name="addr-name" id="addr-name" matchSelect="姓名|收件人|收货人|客户姓名|收件人姓名|收货人姓名" style="height: 30px;width: 180px;margin: 0px;">
                         <#list heads as head>
                             <option value="${head}" >${head}</option>
                         </#list>
@@ -142,7 +142,7 @@
             <tr class="text-c">
                 <td width="55">产品总额</td>
                 <td style="text-align: left;" id="self_operated_id">
-                    <div style="width: 100%;height: 30px;">
+                   <#-- <div style="width: 100%;height: 30px;">
                         <div class="formControls skin-minimal self_operated_div"  style="float: left;">
                             <div class="radio-box">
                                 <input type="radio" id="self_operated_1" name="self_operated" value="1" checked >
@@ -154,13 +154,15 @@
                             </div>
                         </div>
                         <div style="float: left;line-height: 30px;color: red;">*自营店铺导单需要导入产品总额,自营店铺指淘宝,天猫,京东</div>
-                    </div>
+                    </div>-->
 
-                    <select class="my-select"  name="product-shop-discount" id="product-shop-discount" matchSelect="售价|单价|折扣价|价格|产品价格|下单价格|商品金额合计" style="height: 30px;width: 180px;margin: 0px;">
+                    <select  class="my-select"  name="product-shop-discount" id="product-shop-discount" matchSelect="售价|单价|折扣价|价格|金额|产品价格|下单价格|商品金额合计" style="height: 30px;width: 180px;margin: 0px;float: left;">
                         <#list heads as head>
                             <option value="${head}" >${head}</option>
                         </#list>
                     </select>
+
+                    <div style="float: left;line-height: 30px;color: red;">&nbsp;&nbsp;*自营店铺导单需要导入产品总额,自营店铺指淘宝,天猫,京东,非自营不必在意该选项</div>
                 </td>
             </tr>
             <tr class="text-c">
@@ -587,13 +589,6 @@
             layer.msg('订单编号与产品数量列重复!',{icon: 5,time:3000});
             return false;
         }
-        //1自营 2非自营
-        var  self_operated = $("[name='self_operated']:checked").val();
-        if(platformOrdersName == discountArray[0] && self_operated==1){
-            layer.close(index);
-            layer.msg('订单编号与产品总金额列重复!',{icon: 5,time:3000});
-            return false;
-        }
         for(var k =0;k<infoArray.length;k++){
             if(infoArray[k] == platformOrdersName){
                 layer.close(index);
@@ -614,15 +609,15 @@
             storeArray.push(shopId);
         }
 
-//        for(var k=0;k<storeArray.length;k++){
-//            if(storeArray[k] == 3 || storeArray[k] == 40 || storeArray[k] == 86){
-//                if(self_operated == 2){
-//                    layer.close(index);
-//                    vailErrorMsg($("#self_operated_id"),"选择的店铺需要选择订单总额!",3500);
-//                    return false;
-//                }
-//            }
-//        }
+        for(var k=0;k<storeArray.length;k++){
+            if(storeArray[k] == 3 || storeArray[k] == 40 || storeArray[k] == 86){
+                if(platformOrdersName == discountArray[0] ){
+                    layer.close(index);
+                    layer.msg('订单编号与产品总金额列重复!',{icon: 5,time:3000});
+                    return false;
+                }
+            }
+        }
 
         /*Excel中的店铺名称*/
         var orderStoreInfoSt = $("#order_store_info").val();
@@ -649,8 +644,7 @@
                 "num":numArray,
                 "discount":discountArray,
                 "remark":remarkArray,
-                "orderBatch":orderBatch,
-                "selfOperated":self_operated
+                "orderBatch":orderBatch
             },
             dataType: 'json',
             async: false,
@@ -663,6 +657,7 @@
                     var faultNum = 0;
                     var newFaultNum = result.returnMsg.newFaultNum;
                     var mapSalesOrderSize = result.returnMsg.mapSalesOrderSize;
+                    $("#send_tbody").html("");
                     for (var i = 0; i < list.length; i++) {
                         var order = list[i];
                         // 推送失败 展示 颜色

+ 19 - 7
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/add_order.ftl

@@ -106,7 +106,7 @@
             <div class="row cl">
                 <label class="form-label col-1 col-sm-1">批次编号:</label>
                 <div class="formControls col-2 col-sm-2" style="">
-                    <input type="text" class="input-text" value="" placeholder="填写批次编号,新增可不填。" id="salesBatchId" name="salesBatchId">
+                    <input type="text" class="input-text trim_input" value="" placeholder="填写批次编号,新增可不填。" id="salesBatchId" name="salesBatchId">
                 </div>
             </div>
 
@@ -114,15 +114,15 @@
                     <label class="form-label col-1 col-sm-1">销售渠道:</label>
                     <div class="formControls col-2 col-sm-2" style="">
                     <span class="select-box">
-                        <select class="select init_company" name="salesCompanyId" id="" defValue="">
+                        <select class="select init_company" name="salesCompanyId" id="salesCompanyId" defValue="">
                         </select>
 				    </span>
                     </div>
                     <#--<div class="formControls col-2 col-sm-2">
-                    <span class="select-box">
-                        <select  class="select init_store"  name="salesStoreId" id="">
-                        </select>
-                    </span>
+                        <span class="select-box">
+                            <select  class="select init_store"  name="salesStoreId" id="">
+                            </select>
+                        </span>
                     </div>-->
                     <div class="formControls col-2 col-sm-2">
                         <input id="store_1" name="maktMaktx" class="input-text" list="datalist_1" value="" placeholder="输入店铺关键字或双击" datatype="*1-20"  />
@@ -206,7 +206,7 @@
                 </div>
             </div>
 
-            <div class="row cl" id="" style="">
+            <div class="row cl" id="product_color" style="">
                 <label class="form-label col-1 col-sm-1">产品信息:</label>
                 <div class="formControls col-10 col-sm-10">
                     <input type="button" style="color: #32a3d8;border: 1px solid #32a3d8;" class="btn add-order-button" onclick="add_product()" value="添加产品" >
@@ -228,6 +228,12 @@
                     </table>
                     <input type="hidden" id="orderItemString" name="orderItemString" value="" >
                 </div>
+                <br>
+            </div>
+
+            <div class="row cl" >
+                <label class="form-label col-1 col-sm-1"></label>
+                <div id="product_color_error" style="color: red;"></div>
             </div>
 
             <div class="row cl" id="" style="">
@@ -335,8 +341,14 @@
         }
     });
 
+    /*是否为修改*/
+    const isUpdate = false;
+
     /*如果修改信息时匹配地址出现失败,由此标识提醒一次,添加订单不需要次标识*/
     var isNameCorrect = true;
+
+    //所选店铺是否自营 1:自营 2:非自营
+    var dealerSelfOperated;
 </script>
 
 

+ 17 - 11
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_detail.ftl

@@ -75,13 +75,6 @@
         <table class="table table-border table-bg table-bordered" style="margin-top: 10px;">
             <thead>
             <tr>
-                <th width="10">批次号:</th>
-                <td width="10" style="font-weight: normal;"><span>${order.salesBatchId!'暂无批次'}</span></td>
-                <td width="10"></td>
-                <th width="10">下单日期:</th>
-                <td width="10" style="font-weight: normal;"><span>${(order.batchCreateTime?string("yyyy-MM-dd HH:mm:ss"))!''}</span></td>
-            </tr>
-            <tr>
                 <th width="10">订单编号:</th>
                 <td width="10" style="font-weight: normal;"><span>${order.salesOrderId!'暂无订单编号'}</span></td>
                 <td width="10"></td>
@@ -89,6 +82,13 @@
                 <td width="10" style="font-weight: normal;"><span>${order.salesDealCode!''}</span></td>
             </tr>
             <tr>
+                <th width="10">订单ID:</th>
+                <td width="10" style="font-weight: normal;"><span>${order.salesId!''}</span></td>
+                <td width="10"></td>
+                <th width="10">批次号:</th>
+                <td width="10" style="font-weight: normal;"><span>${order.salesBatchId!'暂无批次'}</span></td>
+            </tr>
+            <tr>
                 <th width="10">销售公司:</th>
                 <td width="10" style="font-weight: normal;"><span>${order.companyName!''}</span></td>
                 <td width="10"></td>
@@ -131,8 +131,8 @@
                 <td width="10" style="font-weight: normal;">${order.salesAdminName!''}</td>
 
                 <td width="10"></td>
-                <th width="10"></th>
-                <td width="10" style="font-weight: normal;"><span></span></td>
+                <th width="10">下单日期:</th>
+                <td width="10" style="font-weight: normal;"><span>${(order.batchCreateTime?string("yyyy-MM-dd HH:mm:ss"))!''}</span></td>
             </tr>
             </thead>
         </table>
@@ -153,6 +153,9 @@
                         <#--<th>产品图片</th>-->
                         <th>产品市场价(¥)</th>
                         <th>产品折扣价(¥)</th>
+                        <th>小结(¥)</th>
+                        <th>成本(¥)</th>
+                        <th>成本小结(¥)</th>
                         <th>未退货数量</th>
                         <th>已退货数量</th>
                         <th>产品总数</th>
@@ -163,8 +166,11 @@
                                 <td>${item.itemProductName!''}</td>
                                 <td>${item.itemProductColor!''}</td>
                                 <#--<td>${item.itemProductPic!''}</td>-->
-                                <td>${item.itemProductPrice/100!''}</td>
-                                <td>${item.itemProductDiscount/100!''}</td>
+                                <td>${((item.itemProductPrice/100)?string("0.##"))!''}</td>
+                                <td>${((item.itemProductDiscount/100)?string("0.##"))!''}</td>
+                                <td>${((item.itemTotal/100)?string("0.##"))!''}</td>
+                                <td>${((item.itemCost/100)?string("0.##"))!''}</td>
+                                <td>${((item.itemCostTotal/100)?string("0.##"))!''}</td>
                                 <td>${item.itemNum-item.itemReturnNum}</td>
                                 <td>${item.itemReturnNum}</td>
                                 <td>${item.itemNum}</td>

+ 1 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_list.ftl

@@ -399,7 +399,7 @@
      */
     function sales_order_detail(orderSaleId) {
         //window.location.href= "${path}/admin/salesOrder/select_sales_order?salesId="+orderSaleId;
-        layer_show("订单详情","${path}/admin/salesOrder/select_sales_order?salesId="+orderSaleId,800,600);
+        layer_show_norm("订单详情","${path}/admin/salesOrder/select_sales_order?salesId="+orderSaleId,6);
     }
 
     /*手动发货*/

+ 15 - 8
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/update_order.ftl

@@ -132,15 +132,15 @@
                     <label class="form-label col-1 col-sm-1">销售渠道:</label>
                     <div class="formControls col-2 col-sm-2" style="">
                     <span class="select-box">
-                        <select class="select init_company" name="salesCompanyId" id="" ulcId="${order.salesCompanyId!""}" >
+                        <select class="select init_company" name="salesCompanyId" id="salesCompanyId" ulcId="${order.salesCompanyId!""}" >
                         </select>
 				    </span>
                     </div>
                     <div class="formControls col-2 col-sm-2">
-                    <span class="select-box">
-                        <select  class="select init_store"  name="salesStoreId" id="" ulcId="${order.salesStoreId!""}" >
-                        </select>
-                    </span>
+                        <span class="select-box">
+                            <select  class="select init_store"  name="salesStoreId" id="" ulcId="${order.salesStoreId!""}" >
+                            </select>
+                        </span>
                     </div>
                 </div>
 
@@ -217,7 +217,7 @@
                 </div>
             </div>
 
-            <div class="row cl" id="" style="">
+            <div class="row cl" id="product_color" style="">
                 <label class="form-label col-1 col-sm-1">商品信息:</label>
                 <div class="formControls col-10 col-sm-10">
                     <input type="button" class="btn btn-primary add-order-button" onclick="add_product()" value="添加商品" >
@@ -279,7 +279,10 @@
                 </div>
             </div>
 
-
+            <div class="row cl" >
+                <label class="form-label col-1 col-sm-1"></label>
+                <div id="product_color_error" style="color: red;"></div>
+            </div>
 
             <div class="row cl" id="" style="">
                 <label class="form-label col-1 col-sm-1" style="display: none">总金额:</label>
@@ -355,10 +358,14 @@
 
     var sc = initSalesChannel($(".sales_channel"));
 
+    /*是否为修改*/
+    const isUpdate = true;
+
     /*如果修改信息时匹配地址出现失败,由此标识提醒一次*/
     var isNameCorrect = false;
 
-
+    //所选店铺是否自营 1:自营 2:非自营
+    var dealerSelfOperated = 0;
 </script>
 </body>
 </html>

+ 1 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/product/add_product.ftl

@@ -157,6 +157,7 @@
                     <table class="table table-border table-bg table-bordered" style="margin-top: 10px;" id="all_add_product">
                         <thead>
                             <tr class="text-c" id="table1">
+                                <th  width="10" >颜色ID</th>
                                 <th style="text-align: center;" width="30" ><span class="c-red">*</span>颜色名称</th>
                                 <th style="text-align: center;" width="30" ><span class="c-red">*</span>颜色简称</th>
                                 <th style="text-align: center;" width="10">售价</th>

+ 2 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/product/update_product.ftl

@@ -159,6 +159,7 @@
                     <table class="table table-border table-bg table-bordered" style="margin-top: 10px;" id="all_add_product">
                         <thead>
                         <tr class="text-c" id="table1">
+                            <th  width="10" >颜色ID</th>
                             <th  width="30" ><span class="c-red">*</span>颜色名称</th>
                             <th  width="30" ><span class="c-red">*</span>颜色简称</th>
                             <th  width="10">售价</th>
@@ -179,6 +180,7 @@
                                     <tr class="text-c">
                                         <input type="hidden" class="colorId" value="${productColor.colorId!''}">
                                         <input type="hidden" class="isUpdate" value="2">
+                                        <td width="30" class="colorIdHtml">${productColor.colorId!''}</td>
                                         <td width="30" class="colorName">${productColor.colorName!''}</td>
                                         <td width="30" class="colorAbbreviation">${productColor.colorAbbreviation!''}</td>
                                         <td width="10" class="colorDiscount">${((productColor.colorDiscount/100)?string("0.##"))!''}</td>

+ 6 - 0
watero-rst-web/src/main/webapp/common/js/common/common.js

@@ -18,6 +18,7 @@ var formatDate = function(date, format) {
     if (!date instanceof Date) return;
     var dict = {
         "yyyy": date.getFullYear(),
+        "yy": date.getFullYear(),
         "M": date.getMonth() + 1,
         "d": date.getDate(),
         "H": date.getHours(),
@@ -262,6 +263,9 @@ function layer_show_norm(name,url,type) {
         case 5:
             w=1000;h=570;
             break;
+        case 6:
+            w=1100;h=600;
+            break;
         default:
             break
     }
@@ -374,6 +378,8 @@ function verification(){
             myMinlength = 0;
         }
         if(!isEmpty(myValue) && myMinlength != 0){
+            vailErrorMsg_3($(this),$(this).attr("errormsg"));
+            flag = false;
             return false;
         }
         var myMaxlength = $node.attr("myMaxlength");

+ 37 - 29
watero-rst-web/src/main/webapp/common/js/dealer/dealer.js

@@ -66,7 +66,7 @@ function updateDealerContact($this) {
     contact.dealContactEmail=$contact.find(".dealContactEmail").text();
     contact.dealContactWechat=$contact.find(".dealContactWechat").text();
     contact.dealContactQq=$contact.find(".dealContactQq").text();
-    layer_show_height("添加对接人",url_path+"/admin/dealer/to_add_dealer_contact?"+parseParam(contact),1);
+    layer_show_height("修改对接人",url_path+"/admin/dealer/to_add_dealer_contact?"+parseParam(contact),1);
 }
 //-----------------------对接人 END -----------------------------
 
@@ -81,7 +81,7 @@ function addDealerChannnel() {
     CHANNEL_IS_UPDATE = 1;
     CHANNEL_ID_NUM ++;
     var dealChannelIdStr = CHANNEL_ID_PREFIX + CHANNEL_ID_NUM;
-    layer_show_height("添加对接人",url_path + "/admin/dealer/to_add_dealer_channel?dealChannelIdStr="+dealChannelIdStr,1);
+    layer_show_height("添加销售渠道",url_path + "/admin/dealer/to_add_dealer_channel?dealChannelIdStr="+dealChannelIdStr,2);
 }
 
 function showChannel(channel) {
@@ -92,10 +92,11 @@ function showChannel(channel) {
         html += ' <input type="hidden" class="input-text dealChannelIdStr" value="'+ cufte(channel.dealChannelIdStr) +'" >';
         html += ' <input type="hidden" class="input-text channelId" value="'+ cufte(channel.channelId) +'" >';
         html += ' <input type="hidden" class="input-text channelTypeId" value="'+ cufte(channel.channelTypeId) +'" >';
-        html += ' <input type="hidden" class="input-text storeId" value="'+ cufte(channel.storeId) +'" >';
+        html += ' <input type="hidden" class="input-text storeIdStr" value="'+ cufte(channel.storeIdStr) +'" >';
+        html += '<td class="dealChannelName">'+ cufte(channel.dealChannelName) +'</td>';
         html += '<td class="channelTypeName">'+ cufte(channel.channelTypeName) +'</td>';
         html += '<td class="channelName">'+ cufte(channel.channelName) +'</td>';
-        html += '<td class="storeName">'+ cufte(channel.storeName) +'</td>';
+        html += '<td class="storeNameStr">'+ cufte(channel.storeNameStr) +'</td>';
         html += '<td class="dealChannelAccountPeriod">'+ cufte(channel.dealChannelAccountPeriod) +'</td>';
         html += '<td><a href="javascript:void(0)" onclick="updateDealerChannel($(this))">修改</a>&nbsp;&nbsp;<a href="javascript:void(0)" onclick="delTableByTr($(this),2)">删除</a></td>';
         if(CHANNEL_TR_NUM == 0){
@@ -114,11 +115,12 @@ function showChannel(channel) {
             }
         });
         $channelTr.find(".channelId").val(cufte(channel.channelId));
-        $channelTr.find(".storeId").val(cufte(channel.storeId));
+        $channelTr.find(".storeIdStr").val(cufte(channel.storeIdStr));
+        $channelTr.find(".dealChannelName").text(cufte(channel.dealChannelName));
         $channelTr.find(".channelTypeId").val(cufte(channel.channelTypeId));
         $channelTr.find(".channelTypeName").text(cufte(channel.channelTypeName));
         $channelTr.find(".channelName").text(cufte(channel.channelName));
-        $channelTr.find(".storeName").text(cufte(channel.storeName));
+        $channelTr.find(".storeNameStr").text(cufte(channel.storeNameStr));
         $channelTr.find(".dealChannelAccountPeriod").text(cufte(channel.dealChannelAccountPeriod));
     }
 }
@@ -132,11 +134,12 @@ function updateDealerChannel($this) {
     var channel = new Object();
     channel.dealChannelId = $contact.find(".dealChannelId").val();
     channel.dealChannelIdStr = $contact.find(".dealChannelIdStr").val();
+    channel.dealChannelName= $contact.find(".dealChannelName").text();
     channel.channelId= $contact.find(".channelId").val();
     channel.channelTypeId= $contact.find(".channelTypeId").val();
-    channel.storeId=$contact.find(".storeId").val();
+    channel.storeIdStr=$contact.find(".storeIdStr").val();
     channel.dealChannelAccountPeriod=$contact.find(".dealChannelAccountPeriod").text();
-    layer_show_height("添加对接人",url_path+"/admin/dealer/to_add_dealer_channel?"+parseParam(channel),1);
+    layer_show_height("修改渠道商",url_path+"/admin/dealer/to_add_dealer_channel?"+parseParam(channel),1);
 }
 //-----------------------渠道商 END -----------------------------
 
@@ -149,25 +152,24 @@ var PRODUCT_IS_UPDATE = 1;  //用来标识渠道的弹窗是添加还是修改
  */
 function addDealerProduct() {
     PRODUCT_IS_UPDATE = 1;
-    PRODUCT_ID_NUM ++;
-    var dealProdIdStr = PRODUCT_ID_PREFIX + PRODUCT_ID_NUM;
-
-    var storeArray = new Array();
+    // PRODUCT_ID_NUM ++;
+    // var dealProdIdStr = PRODUCT_ID_PREFIX + PRODUCT_ID_NUM;
+    var dealerProductStoreArray = new Array();
     $("#add_dealer_channel").find("tr").each(function () {
-        var store = new Object();
-        if(!isEmpty($(this).find(".storeId").val())){
+        var dealerProductStore = new Object();
+        if(!isEmpty($(this).find(".dealChannelIdStr").val())){
             return false;
         }
-        store.storeId = $(this).find(".storeId").val();
-        store.storeName = $(this).find(".storeName").text();
-        store.productStoreIsSelect = 2;
-        storeArray.push(store);
+        dealerProductStore.dealChannelIdStr = $(this).find(".dealChannelIdStr").val();
+        dealerProductStore.dealChannelName = $(this).find(".dealChannelName").text();
+        dealerProductStore.productStoreIsSelect = 2;
+        dealerProductStoreArray.push(dealerProductStore);
     });
-    if(storeArray.length < 1){
-        vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个渠道信息");
+    if(dealerProductStoreArray.length < 1){
+        vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个销售渠道");
         return false;
     }
-    var url = url_path + '/admin/dealer/to_add_dealer_product?dealProdIdStr='+dealProdIdStr+'&storeJson='+ JSON.stringify(storeArray);
+    var url = url_path + '/admin/dealer/to_add_dealer_product?dealerProductStoreJson='+ JSON.stringify(dealerProductStoreArray);
     url = encodeURI(url);
     layer_show_norm("添加供应产品",url,5);
 }
@@ -176,19 +178,22 @@ function showDealerProduct(dealerProductArray) {
     var $addHtmlNode = $("#add_product");
     if(PRODUCT_IS_UPDATE == 1){ //添加
         for(var i=0;i<dealerProductArray.length;i++){
+            PRODUCT_ID_NUM ++;
+            var dealProdIdStr = PRODUCT_ID_PREFIX + PRODUCT_ID_NUM;
             var obj = dealerProductArray[i];
             var html = '<tr class="text-c" >';
             html += ' <input type="hidden" class="input-text dealProdId" value="" >';
-            html += ' <input type="hidden" class="input-text dealProdIdStr" value="'+ cufte(obj.dealProdIdStr) +'" >';
+            html += ' <input type="hidden" class="input-text dealProdIdStr" value="'+ dealProdIdStr +'" >';
             html += ' <input type="hidden" class="input-text colorProductId" value="'+ cufte(obj.colorProductId) +'" >';
             html += ' <input type="hidden" class="input-text colorId" value="'+ cufte(obj.colorId) +'" >';
             html += ' <input type="hidden" class="input-text dealProdStoreArea" value="'+ cufte(obj.dealProdStoreArea) +'" >';
             html += ' <input type="hidden" class="input-text dealerProductStoreIds" value="'+ cufte(obj.dealerProductStoreIds) +'" >';
             html += '<td class="productName">'+ cufte(obj.productName) +'</td>';
             html += '<td class="colorName">'+ cufte(obj.colorName) +'</td>';
+            html += '<td class="colorName">'+ cufte(obj.colorBar) +'</td>';
             html += '<td><input type="text" style="text-align: center;" class="input-text input-number dealProdPrice" value="'+ cufte(obj.dealProdPrice) +'"   onkeyup="keyFun($(this),99999,0)" onpaste="keyFun($(this),99999,0)"></td>';
             if(obj.dealProdStoreArea == 1){
-                html += '<td class="dealerProductStoreName">全部店铺</td>';
+                html += '<td class="dealerProductStoreName">全部渠道</td>';
             }else{
                 html += '<td class="dealerProductStoreName">'+ cufte(obj.dealerProductStoreName) +'</td>';
             }
@@ -260,7 +265,7 @@ function addCoopAgree() {
     COOPERATIONAGREE_IS_UPDATE = 1;
     COOPERATIONAGREE_ID_NUM ++;
     var coopAgreeIdStr = COOPERATIONAGREE_ID_PREFIX + COOPERATIONAGREE_ID_NUM;
-    layer_show_height("合作协议",url_path+"/admin/dealer/to_add_coop_agree?coopAgreeIdStr="+coopAgreeIdStr,0);
+    layer_show_height("添加合作协议",url_path+"/admin/dealer/to_add_coop_agree?coopAgreeIdStr="+coopAgreeIdStr,0);
 }
 /**
  * 修改合作协议
@@ -278,7 +283,7 @@ function updateCoopAgree($this) {
 
     var url = url_path+"/admin/dealer/to_add_coop_agree?"+parseParam(coopAgree);
     url = encodeURI(url);
-    layer_show_height("合作协议",url,0);
+    layer_show_height("修改合作协议",url,0);
 }
 //-----------------------合作协议 END -----------------------------
 /**
@@ -290,7 +295,7 @@ function delTableByTr($this,type) {
     if(type == 1 && $("#add_contact").find("tr").length < 2){
         vailErrorMsg_3($("#add_contact_make"),"必须要有一个对接人");
     }else if(type == 2 && $("#add_dealer_channel").find("tr").length < 2){
-        vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个渠道信息");
+        vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个销售渠道");
     }else{
         $this.parents("tr").remove();
     }
@@ -360,22 +365,24 @@ $(function(){
                 $("#add_dealer_channel").find("tr").each(function () {
                     var $contact = $(this);
                     var channel = new Object();
+                    channel.dealChannelName = $contact.find(".dealChannelName").text();
                     channel.dealChannelId = $contact.find(".dealChannelId").val();
                     channel.dealChannelIdStr = $contact.find(".dealChannelIdStr").val();
                     channel.channelId= $contact.find(".channelId").val();
                     channel.channelTypeId= $contact.find(".channelTypeId").val();
-                    channel.storeId=$contact.find(".storeId").val();
+                    //channel.storeId=$contact.find(".storeId").val();
+                    channel.storeIdStr=$contact.find(".storeIdStr").val();
                     channel.dealChannelAccountPeriod=$contact.find(".dealChannelAccountPeriod").text();
                     channelArray.push(channel);
                 });
                 if(channelArray.length > 0){
                     $("#add_dealer_channel_json").val(JSON.stringify(channelArray));
                 }else{
-                    vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个渠道信息");
+                    vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个销售渠道");
                     return false;
                 }
             }else{
-                vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个渠道信息");
+                vailErrorMsg_3($("#add_dealer_channel_make"),"必须要有一个销售渠道");
                 return false;
             }
 
@@ -386,6 +393,7 @@ $(function(){
                     var $productColor = $(this);
                     var productColor = new Object();
                     productColor.colorId = $productColor.find(".colorId").val();
+                    productColor.dealProdIdStr = $productColor.find(".dealProdIdStr").val();
                     productColor.dealProdStoreArea = $productColor.find(".dealProdStoreArea").val();
                     var dealProdPrice =  $productColor.find(".dealProdPrice").val();
                     if(!isEmpty(dealProdPrice)){

+ 4 - 0
watero-rst-web/src/main/webapp/common/js/product/product.js

@@ -20,6 +20,7 @@ function add_color(isUpdate){
         var colorHtml = '<tr class="text-c">' +
             '<input type="hidden" class="colorId" name="" id="" value="'+ colorId +'">'+
             '<input type="hidden" class="isUpdate" name="" id="" value="'+ isUpdate +'">';
+        colorHtml += '<td width="40" class="colorIdHtml">-</td>';
         colorHtml += '<td width="40" class="colorName">'+$node.find(".colorName").val()+'</td>';
         colorHtml += '<td width="40" class="colorAbbreviation">'+$node.find(".colorAbbreviation").val()+'</td>';
         colorHtml += '<td width="40" class="colorDiscount">'+$node.find(".colorDiscount").val()+'</td>';
@@ -72,6 +73,9 @@ function add_color(isUpdate){
             if($(this).find(".colorId").val() == colorId){
                 noHaveColorId = false;
                 $(this).find(".isUpdate").val(1);
+                if(colorId.indexOf(update_color_id_suff) < 0){
+                    $(this).find(".colorIdHtml").html(colorId);
+                }
                 $(this).find(".colorName").html($node.find(".colorName").val());
                 $(this).find(".colorAbbreviation").html($node.find(".colorAbbreviation").val());
                 $(this).find(".colorDiscount").html($node.find(".colorDiscount").val());

+ 97 - 6
watero-rst-web/src/main/webapp/common/js/salesOrder/salesOrder.js

@@ -2,10 +2,16 @@
 var allCustomerId = "";
 
 
+
 /**
  * 打开商品列表
  */
 function add_product() {
+    var storeId = getStoreId();
+    var salesOrderStatus = $("#salesOrderStatus").val();
+    if(salesOrderStatus == 1 && !isEmpty(storeId)){
+        vailErrorMsg_3($("#salesCompanyId"),"请选择店铺!");
+    }
     layer_show("商品列表",url_path + "/admin/salesOrder/to_add_product","1000","500");
 }
 /**
@@ -66,6 +72,17 @@ $(function(){
                 }
             }
 
+            //检测颜色与店铺之间关系
+            if(!storeProductColor()){
+                vailErrorMsg_3($("#product_color"),"店铺与商品信息不匹配!");
+                return false;
+            }
+
+            //计算价格
+            if(dealerSelfOperated == 2){
+                calculatePrice();
+            }
+
             var addressProvince = $("#addressProvince").find("option:selected").text();
             var addressCity = $("#addressCity").find("option:selected").text();
             var addressCountry = $("#addressCountry").find("option:selected").text();
@@ -123,6 +140,61 @@ $(function(){
 });
 
 
+//检测颜色与店铺之间关系
+function  storeProductColor() {
+    var colorIds = '';
+    $("#add_product").find("tr").each(function(){
+        colorIds += $(this).find(".color_id").val() +'_';
+    });
+
+    var storeId = getStoreId();
+    var salesOrderStatus = $("#salesOrderStatus").val();
+    if(salesOrderStatus == 1 && !isEmpty(storeId)){
+        vailErrorMsg_3($("#salesCompanyId"),"请选择店铺!");
+        return false;
+    }
+
+    var flag = false;
+
+    $.ajax({
+        type: "POST",
+        data: {
+            colorIds : colorIds,
+            storeId : storeId,
+            salesOrderStatus : salesOrderStatus
+        },
+        url: url_path +"/admin/salesOrder/get_product",
+        async:false,
+        success: function(data){
+            if (data.returnCode == 200 && data.returnMsg.productColorList.length > 0 ) {
+                //所选店铺是否自营 1:自营 2:非自营
+                dealerSelfOperated = data.returnMsg.dealerSelfOperated;
+                flag = true;
+            }else{
+                $("#product_color_error").html(data.resultMsg);
+                flag = false;
+            }
+        }
+    });
+    return flag;
+}
+
+function getStoreId() {
+    var storeId;
+    if(isUpdate){
+        storeId = $(".init_store").val();
+    }else{
+        var $options=$("#datalist_1").children();
+        for(var i=0;i<$options.length;i++){
+            if($options.eq(i).val().trim()==$("#store_1").val().trim()){
+                storeId = $options.eq(i).attr("data-id");
+            }
+        }
+    }
+    return storeId;
+}
+
+
 /**
  * 客诉回调
  * @param colorIds
@@ -224,8 +296,8 @@ function setSelectProduct(colorIds){
     $("#all_add_product").show();
 
     var colorIdArray = colorIds.split("_");
-    for(var i=0;i<colorIdArray.length;i++){
-        var colorId = colorIdArray[i];
+    for(var j=0;j<colorIdArray.length;j++){
+        var colorId = colorIdArray[j];
         if(colorId == ""){
             break;
         }
@@ -236,17 +308,35 @@ function setSelectProduct(colorIds){
             if(colId == colorId){
                 flag  = false;
             }
-        })
+        });
         if(!flag){
             continue;
         }
+
+        var storeId = getStoreId();
+        var salesOrderStatus = $("#salesOrderStatus").val();
+        if(salesOrderStatus == 1 && !isEmpty(storeId)){
+            vailErrorMsg_3($("#salesCompanyId"),"请选择店铺!");
+        }
+
         $.ajax({
             type: "POST",
-            data: { colorId : colorId},
-            url: url_path +"/admin/product/get_product",
+            data: {
+                colorId : colorId,
+                storeId : storeId,
+                salesOrderStatus : salesOrderStatus
+            },
+            url: url_path +"/admin/salesOrder/get_product",
+            async:false,
             success: function(data){
                 var html = "";
                 if (data.returnCode == 200 && data.returnMsg.productColorList.length > 0 ) {
+                    //所选店铺是否自营 1:自营 2:非自营
+                    dealerSelfOperated = data.returnMsg.dealerSelfOperated;
+                    // var priceHide = '';
+                    // if(data.returnMsg.dealerSelfOperated == 2){
+                    //     priceHide = 'readonly="readonly"';
+                    // }
                     for(var i=0;i<data.returnMsg.productColorList.length;i++){
                         var productColor = data.returnMsg.productColorList[i];
                         var discount = accDiv(productColor.colorDiscount,100);
@@ -263,7 +353,8 @@ function setSelectProduct(colorIds){
                             ' </tr>';
                     }
                 }else{
-                    html = '<tr class="text-c"><td colspan="12">没有搜索到商品,请重试!</td></tr>';
+                    $("#product_color_error").html(data.resultMsg);
+                    return false;
                 }
                 $("#add_product").append(html);
                 /*计算价格*/