Browse Source

Merge branch 'dev' of ssh://10.10.100.21/source/saas-platform into dev

jinsy 7 years ago
parent
commit
f48da48f4f
100 changed files with 913 additions and 243 deletions
  1. 7 2
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 10 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Status.java
  3. 4 57
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ExcelServiceImpl.java
  4. 12 0
      applications/commons/commons-server/src/main/resources/config/application-docker-test.yml
  5. 9 0
      applications/commons/commons-server/src/main/resources/logback-spring.xml
  6. 1 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/DataImportMapper.java
  7. 6 6
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  8. 8 8
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  9. 3 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/EmployeeServiceImpl.java
  10. 19 18
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  11. 6 7
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  12. 6 7
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/WarehouseServiceImpl.java
  13. 12 0
      applications/document/document-server/src/main/resources/config/application-docker-test.yml
  14. 9 0
      applications/document/document-server/src/main/resources/logback-spring.xml
  15. 1 1
      applications/document/document-server/src/main/resources/mapper/DataImportMapper.xml
  16. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  17. 12 0
      applications/money/money-server/src/main/resources/config/application-docker-test.yml
  18. 9 0
      applications/money/money-server/src/main/resources/logback-spring.xml
  19. 2 0
      applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdIODetailDTO.java
  20. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdIODetail.java
  21. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdInOutList.java
  22. 1 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java
  23. 12 0
      applications/purchase/purchase-server/src/main/resources/config/application-docker-test.yml
  24. 9 0
      applications/purchase/purchase-server/src/main/resources/logback-spring.xml
  25. 5 4
      applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml
  26. 2 0
      applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutListMapper.xml
  27. 1 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml
  28. 12 1
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/SaleApplication.java
  29. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java
  30. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  31. 30 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  32. 12 4
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  33. 12 0
      applications/sale/sale-server/src/main/resources/config/application-docker-test.yml
  34. 9 0
      applications/sale/sale-server/src/main/resources/logback-spring.xml
  35. 11 6
      applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml
  36. 7 2
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  37. 2 0
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/dto/ProdIODetailDTO.java
  38. 2 2
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/ProdIODetail.java
  39. 2 1
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/ProdInOutList.java
  40. 2 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  41. 12 0
      applications/storage/storage-server/src/main/resources/config/application-docker-test.yml
  42. 9 0
      applications/storage/storage-server/src/main/resources/logback-spring.xml
  43. 6 5
      applications/storage/storage-server/src/main/resources/mapper/ProdIODetailMapper.xml
  44. 1 0
      applications/storage/storage-server/src/main/resources/mapper/ProdInOutListMapper.xml
  45. 12 0
      base-servers/account/account-server/src/main/resources/config/application-docker-test.yml
  46. 9 0
      base-servers/account/account-server/src/main/resources/logback-spring.xml
  47. 5 3
      base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/api/AccountCacheTest.java
  48. 12 0
      base-servers/admin-server/src/main/resources/config/application-docker-test.yml
  49. 9 0
      base-servers/admin-server/src/main/resources/logback-spring.xml
  50. 12 0
      base-servers/auth/auth-server/src/main/resources/config/application-docker-test.yml
  51. 9 0
      base-servers/auth/auth-server/src/main/resources/logback-spring.xml
  52. 20 0
      base-servers/auth/auth-server/src/test/java/com/usoftchina/saas/auth/controller/JwtTest.java
  53. 5 0
      base-servers/eureka-server/src/main/resources/config/application-docker-test.yml
  54. 9 0
      base-servers/eureka-server/src/main/resources/logback-spring.xml
  55. 12 0
      base-servers/file/file-server/src/main/resources/config/application-docker-test.yml
  56. 9 0
      base-servers/file/file-server/src/main/resources/logback-spring.xml
  57. 12 0
      base-servers/gateway-server/src/main/resources/config/application-docker-test.yml
  58. 9 0
      base-servers/gateway-server/src/main/resources/logback-spring.xml
  59. 12 0
      base-servers/mail/mail-server/src/main/resources/config/application-docker-test.yml
  60. 9 0
      base-servers/mail/mail-server/src/main/resources/logback-spring.xml
  61. 12 0
      base-servers/socket/socket-server/src/main/resources/config/application-docker-test.yml
  62. 9 0
      base-servers/socket/socket-server/src/main/resources/logback-spring.xml
  63. 12 0
      base-servers/ui-server/src/main/resources/config/application-docker-test.yml
  64. 9 0
      base-servers/ui-server/src/main/resources/logback-spring.xml
  65. 56 0
      base-servers/ui-server/src/test/java/com/usoftchina/saas/ui/controller/co/CoViewControllerTest.java
  66. 13 0
      base-servers/zipkin-server/src/main/resources/config/application-docker-test.yml
  67. 9 0
      base-servers/zipkin-server/src/main/resources/logback-spring.xml
  68. 41 0
      frontend/saas-portal-web/build/build-dev.js
  69. 4 2
      frontend/saas-portal-web/build/webpack.prod.conf.js
  70. 3 4
      frontend/saas-portal-web/config/dev.env.js
  71. 2 2
      frontend/saas-portal-web/config/test.env.js
  72. 2 1
      frontend/saas-portal-web/package.json
  73. 19 4
      frontend/saas-web/app.json
  74. 9 0
      frontend/saas-web/app/view/core/base/BasePanel.scss
  75. 1 1
      frontend/saas-web/app/view/core/base/GridPanel.js
  76. 2 1
      frontend/saas-web/app/view/core/base/ImportWindow.js
  77. 12 0
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js
  78. 12 0
      frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js
  79. 1 1
      frontend/saas-web/app/view/core/dbfind/types/BomDbfindTrigger.js
  80. 1 1
      frontend/saas-web/app/view/core/dbfind/types/CustomerDbfindTrigger.js
  81. 2 2
      frontend/saas-web/app/view/core/dbfind/types/ProductDbfindTrigger.js
  82. 2 2
      frontend/saas-web/app/view/core/dbfind/types/ProductMultiDbfindTrigger.js
  83. 1 1
      frontend/saas-web/app/view/core/dbfind/types/VendorDbfindTrigger.js
  84. 1 1
      frontend/saas-web/app/view/core/dbfind/types/WarehouseDbfindTrigger.js
  85. 10 1
      frontend/saas-web/app/view/core/form/FormPanelController.js
  86. 17 51
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  87. 10 0
      frontend/saas-web/app/view/core/query/QueryGridPanel.scss
  88. 0 8
      frontend/saas-web/app/view/core/query/QueryPanel.js
  89. 9 1
      frontend/saas-web/app/view/core/report/ReportPanel.js
  90. 3 2
      frontend/saas-web/app/view/document/bom/BasePanel.js
  91. 2 2
      frontend/saas-web/app/view/document/bom/FormPanel.js
  92. 3 2
      frontend/saas-web/app/view/document/customer/BasePanel.js
  93. 2 2
      frontend/saas-web/app/view/document/customer/FormPanel.js
  94. 8 3
      frontend/saas-web/app/view/document/kind/ChildForm.js
  95. 132 0
      frontend/saas-web/app/view/document/kind/KindModel.js
  96. 3 2
      frontend/saas-web/app/view/document/product/BasePanel.js
  97. 3 3
      frontend/saas-web/app/view/document/product/FormPanel.js
  98. 3 2
      frontend/saas-web/app/view/document/vendor/BasePanel.js
  99. 2 2
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  100. 2 0
      frontend/saas-web/app/view/home/charts/MonthSale.scss

+ 7 - 2
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -34,6 +34,10 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_UNENDPRODUCT(79310,"系统还未结账,不能反结账"),
     BIZ_RELUPDATE_CODEANDNAME(79311,"存在关联单据,不允许更新编号,名称"),
     BIZ_RELUPDATE_AMOUNT(79312,"存在关联单据,不允许更新期初应收,期初预收,期初日期"),
+    BIZ_BANNED(79313, "只能禁用已开启的单据"),
+    BIZ_ENABLE(79314, "只能开启已禁用的单据"),
+
+
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),
 
@@ -75,13 +79,14 @@ public enum BizExceptionCode implements BaseExceptionCode {
     SALE_NULL_BILL(72002, "单据不存在或者明细为空"),
     SALEOUT_ALL_TURNIN(72003, "该出货单已全部转退货,无法转销售退货单"),
     SALEOUT_POSTSTATUS_ERROR(72004,"当前单据状态无法进行此操作。"),
-    SALEOUT_POST_ERROR(72005,""),
+    SALEOUT_POST_ERROR(72005,"编号:<u>%s</u>处理失败,%s"),
     SALEOUT_UNAUDIT_ERROR(72006,"销售订单已转出货单,无法反审核"),
     SALE_ORDER_HASAUDIT(72003, "存在已审核单据,单据编号:%s"),
     SALE_EXISTS_PURCHASE(72004, "存在已转的采购单据,单据编号:%s"),
     SALE_ALREADY_UNAUDIT(72007, "单据状态为未审核,无法反审核"),
     SALE_CUST_CLOSE(72008, "客户已关闭,无法审核"),
-
+    SALE_ORDER_ISUNAUDIT(72009, "存在未审核单据,单据编号:%s"),
+    SALE_ORDER_ISCOLSED(72010, "存在已关闭单据,单据编号:%s"),
     //资金
     PAYBALANCE_OUTNOWBALANCE(74001,"本次核销金额不能大于未核销金额"),
     PAYBALANCE_UNIQUESOURCECODE(74002, "保存失败!不能选择重复的源单"),

+ 10 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Status.java

@@ -17,6 +17,16 @@ public enum Status {
     OPEN("已开启"),
 
 
+    /**
+     * 已禁用
+     */
+    BANNED("已禁用"),
+
+    /**
+     * 已启用
+     */
+    ENABLE("已启用"),
+
     /**
      * 已审核
      */

+ 4 - 57
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ExcelServiceImpl.java

@@ -45,66 +45,13 @@ public class ExcelServiceImpl implements ExcelService{
         Map<String, Object> map = new HashMap<>();
         SXSSFWorkbook workbook = new SXSSFWorkbook();
         DataTemplet dataTemplet = dataTempletMapper.selectByCaller(caller, companyId);
+        //列
         String cols = dataTemplet.getDt_columns();
-      /*  String cols = "[{\"description\":\"物料编号\",\"necessary\":\"true\"},{\"description\":\"物料名称\",\"necessary\":\"true\"},{\"description\":\"物料类型\",\"necessary\":\"true\"},{\"description\":\"仓库编号\",\"necessary\":\"true\"},{\"description\":\"仓库名称\",\"necessary\":\"true\"}]";
-        cols = "[{\"description\":\"物料编号\",\"necessary\":\"true\",\"position\":\"main\",\"field\":\"pr_code\",\"codefield\":true}," +
-                "{\"description\":\"物料名称\",\"necessary\":\"true\",\"position\":\"main\",\"field\":\"pr_detail\",\"codefield\":false}," +
-                "{\"description\":\"更新时间\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"updateTime\",\"codefield\":false,\"type\":\"date\"}," +
-                "{\"description\":\"规格\",\"necessary\":\"true\",\"position\":\"main\",\"field\":\"pr_spec\",\"codefield\":false}," +
-                "{\"description\":\"类型\",\"necessary\":\"true\",\"position\":\"main\",\"field\":\"pr_kind\",\"codefield\":false}," +
-                "{\"description\":\"型号\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"pr_orispeccode\",\"codefield\":false}" +
-                ",{\"description\":\"品牌\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"pr_brand\",\"codefield\":false}," +
-                "{\"description\":\"单位\",\"necessary\":\"true\",\"position\":\"main\",\"field\":\"pr_unit\",\"codefield\":false}," +
-                "{\"description\":\"仓库编号\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"pr_whcode\",\"codefield\":false}," +
-                "{\"description\":\"仓库名称\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"pr_whname\",\"codefield\":false}," +
-                "{\"description\":\"最新采购单价\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"pr_purcprice\",\"codefield\":false}" +
-                ",{\"description\":\"最新出货单价\",\"necessary\":\"false\",\"position\":\"main\",\"field\":\"pr_saleprice\",\"codefield\":false}," +
-                "{\"description\":\"替代料仓库编号\",\"necessary\":\"true\",\"position\":\"detail\",\"field\":\"pd_whcode\",\"codefield\":false}," +
-                "{\"description\":\"替代料仓库名称\",\"necessary\":\"false\",\"position\":\"detail\",\"field\":\"pd_whname\",\"codefield\":false}," +
-                "{\"description\":\"期初数量\",\"necessary\":\"true\",\"position\":\"detail\",\"field\":\"pd_num\",\"codefield\":false}," +
-                "{\"description\":\"单位成本\",\"necessary\":\"true\",\"position\":\"detail\",\"field\":\"pd_price\",\"codefield\":false}]";
-      */
         JSONArray array = (JSONArray) JSONArray.parse(cols);
+        //模板数据
         String remark = dataTemplet.getDt_description();
-        //String exampledata = dataTemplet.getDt_exampledata();
-        //JSONArray datas = (JSONArray) JSONArray.parse(exampledata);
-        JSONArray datas = new JSONArray();
-        JSONObject data = new JSONObject();
-        data.put("物料编号", "code1");
-        data.put("物料名称", "name1");
-        data.put("规格", "spec1");
-        data.put("型号", "kind1");
-        data.put("品牌", "brand1");
-        data.put("更新时间", "2018-09-08");
-        data.put("单位", "nuit1");
-        data.put("类型", "leixin1");
-        data.put("仓库编号", "whcode1");
-        data.put("仓库名称", "whname1");
-        data.put("最新采购单价", "100");
-        data.put("最新出货单价", "22");
-        data.put("替代料仓库编号", "tcode1");
-        data.put("替代料仓库名称", "tname1");
-        data.put("期初数量", "22");
-        data.put("单位成本", "22");
-        datas.add(data);
-        JSONObject data2 = new JSONObject();
-        data2.put("物料编号", "code2");
-        data2.put("物料名称", "name2");
-        data2.put("规格", "spec2");
-        data2.put("型号", "kind2");
-        data2.put("品牌", "brand2");
-        data2.put("单位", "nuit2");
-        data2.put("类型", "leixin2");
-        data2.put("仓库编号", "whcode2");
-        data2.put("仓库名称", "whname2");
-        data2.put("最新采购单价", "100");
-        data2.put("最新出货单价", "22");
-        data2.put("替代料仓库编号", "tcode2");
-        data2.put("替代料仓库名称", "tname2");
-        data2.put("期初数量", "22");
-        data2.put("单位成本", "22");
-        datas.add(data2);
-        System.out.println(datas.toJSONString());
+        String exampledata = dataTemplet.getDt_exampledata();
+        JSONArray datas = (JSONArray) JSONArray.parse(exampledata);
         createWorkbook(workbook, 1, array, datas, remark);
         map.put("workbook", workbook);
         map.put("title", dataTemplet.getDt_title());

+ 12 - 0
applications/commons/commons-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-commons-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8915

+ 9 - 0
applications/commons/commons-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 1 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/DataImportMapper.java

@@ -14,7 +14,7 @@ public interface DataImportMapper {
 
     List<DataImportDetail> selectDataById(Integer id);
 
-    DataImportDetail selectProductBycode(@Param("code") String code, @Param("id") int id, @Param("companyid") Long companyId);
+    DataImportDetail selectMainBycode(@Param("code") String code, @Param("id") int id, @Param("companyid") Long companyId);
 
     void updateDataImport(Integer id);
 

+ 6 - 6
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java

@@ -209,8 +209,8 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
 
             bom = new Bom();
             bom.setId(id);
-            bom.setBo_status(Status.CLOSE.getDisplay());
-            bom.setBo_statuscode(Status.CLOSE.name());
+            bom.setBo_status(Status.BANNED.getDisplay());
+            bom.setBo_statuscode(Status.BANNED.name());
             bom.setUpdaterId(BaseContextHolder.getUserId());
             bom.setUpdateTime(new Date());
 
@@ -232,12 +232,12 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
             if(bom == null){
                 throw new BizException(BizExceptionCode.NO_DATA);
             }
-            if (Status.CLOSE.name().equals(bom.getBo_statuscode())){
+            if (Status.BANNED.name().equals(bom.getBo_statuscode())){
                 String code = bom.getBo_mothercode();
                 bom = new Bom();
                 bom.setId(id);
-                bom.setBo_statuscode(Status.OPEN.name());
-                bom.setBo_status(Status.OPEN.getDisplay());
+                bom.setBo_statuscode(Status.ENABLE.name());
+                bom.setBo_status(Status.ENABLE.getDisplay());
                 bom.setUpdateTime(new Date());
                 bom.setUpdaterId(BaseContextHolder.getUserId());
                 getMapper().updateByPrimaryKeySelective(bom);
@@ -246,7 +246,7 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
                 messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
-                throw new BizException(BizExceptionCode.BIZ_OPEN);
+                throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }
         }else {
             throw new BizException(BizExceptionCode.ILLEGAL_ID);

+ 8 - 8
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java

@@ -399,11 +399,11 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         DocBaseDTO docBaseDTO = null;
         if (null!=id) {
             Customer customer = getMapper().selectByPrimaryKey(id);
-            if(Status.CLOSE.name().equals(customer.getCu_statuscode())){
-                throw new BizException(BizExceptionCode.BIZ_CLOSE);
+            if(Status.BANNED.name().equals(customer.getCu_statuscode())){
+                throw new BizException(BizExceptionCode.BIZ_BANNED);
             }
-            customer.setCu_statuscode(Status.CLOSE.name());
-            customer.setCu_status(Status.CLOSE.getDisplay());
+            customer.setCu_statuscode(Status.BANNED.name());
+            customer.setCu_status(Status.BANNED.getDisplay());
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
@@ -434,11 +434,11 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         DocBaseDTO docBaseDTO = null;
         if (null!=id) {
             Customer customer = getMapper().selectByPrimaryKey(id);
-            if(Status.OPEN.name().equals(customer.getCu_statuscode())){
-                throw new BizException(BizExceptionCode.BIZ_OPEN);
+            if(Status.ENABLE.name().equals(customer.getCu_statuscode())){
+                throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }
-            customer.setCu_statuscode(Status.OPEN.name());
-            customer.setCu_status(Status.OPEN.getDisplay());
+            customer.setCu_statuscode(Status.ENABLE.name());
+            customer.setCu_status(Status.ENABLE.getDisplay());
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志

+ 3 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/EmployeeServiceImpl.java

@@ -68,17 +68,19 @@ public class EmployeeServiceImpl extends CommonBaseServiceImpl<EmployeeMapper, E
         Long companyId = BaseContextHolder.getCompanyId();
         employee.setCompanyId(companyId);
         if(employee.getId() == 0){
-            String code = pushMaxnubmer(employee.getEm_code(), employee.getId());
+            String code = employee.getEm_code();
             //检查名称和编号
             int count = getMapper().validateNameAndCodeWhenInsert(code,employee.getEm_name(),companyId);
             if (count>0) {
                 throw new BizException(BizExceptionCode.REPEAT_EMNAMECODE);
             }
+            code = pushMaxnubmer(employee.getEm_code(), employee.getId());
             //检查电话号码
             count = getMapper().validatePhoneWhenInsert(employee.getEm_mobile(),BaseContextHolder.getCompanyId());
             if (count>0) {
                 throw new BizException(BizExceptionCode.REPEAT_TEL);
             }
+            employee.setEm_code(code);
             employee.setCreatorId(BaseContextHolder.getUserId());
             employee.setCreateTime(new Date());
             employee.setCreatorName(BaseContextHolder.getUserName());

+ 19 - 18
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java

@@ -326,8 +326,8 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             String code = getMapper().getCodeById(id);
             Product product = new Product();
             product.setId(id);
-            product.setPr_status(Status.CLOSE.getDisplay());
-            product.setPr_statuscode(Status.CLOSE.name());
+            product.setPr_status(Status.BANNED.getDisplay());
+            product.setPr_statuscode(Status.BANNED.name());
             product.setUpdaterId(BaseContextHolder.getUserId());
             product.setUpdateTime(new Date());
             getMapper().updateByPrimaryKeySelective(product);
@@ -349,12 +349,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (product == null) {
                 throw new BizException(BizExceptionCode.NO_DATA);
             }
-            if (!Status.CLOSE.getDisplay().equals(product.getPr_status())){
-                throw new BizException(BizExceptionCode.BIZ_OPEN);
+            if (!Status.ENABLE.getDisplay().equals(product.getPr_status())){
+                throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }else{
                 product.setId(id);
-                product.setPr_statuscode(Status.OPEN.name());
-                product.setPr_status(Status.OPEN.getDisplay());
+                product.setPr_statuscode(Status.ENABLE.name());
+                product.setPr_status(Status.ENABLE.getDisplay());
                 product.setUpdaterId(BaseContextHolder.getUserId());
                 product.setUpdateTime(new Date());
                 getMapper().updateByPrimaryKeySelective(product);
@@ -549,7 +549,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 List<ProductDetail> productDetails = new ArrayList<>();
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
-                DataImportDetail main = dataImportMapper.selectProductBycode(code, id, companyId);
+                DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
                 Product product = JSONObject.parseObject(main.getDd_maindata(), Product.class);
                 Warehouse warehouse = null;
                 //验证仓库
@@ -563,6 +563,17 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                     product.setPr_status(Status.OPEN.getDisplay());
                     product.setPr_statuscode(Status.OPEN.name());
                 }
+                //编号不存在
+                if (i == 0) {
+                    product.setId(0l);
+                    //编号存在、需要更新
+                } else if (update){
+                    Long pr_id = getMapper().selectIdByCode(code, companyId);
+                    product.setId(pr_id);
+                    //编号存在、不需要处理
+                } else {
+                    continue;
+                }
                 //添加从表
                 if (data.size() > 0) {
                     detno = 1;
@@ -584,17 +595,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                         }
                     }
                 }
-                //编号不存在
-                if (i == 0) {
-                    product.setId(0l);
-                //编号存在、需要更新
-                } else if (update){
-                    Long pr_id = getMapper().selectIdByCode(code, companyId);
-                    product.setId(pr_id);
-                //编号存在、不需要处理
-                } else {
-                    continue;
-                }
+
                 listDTO.setMain(product);
                 listDTO.setItems(productDetails);
                 list.add(listDTO);

+ 6 - 7
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java

@@ -2,7 +2,6 @@ package com.usoftchina.saas.document.service.impl;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
 import com.usoftchina.saas.commons.api.MaxnumberService;
 import com.usoftchina.saas.commons.api.MessageLogService;
@@ -330,8 +329,8 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         if(id != null && id > 0){
             Vendor vendor = new Vendor();
             vendor.setId(id);
-            vendor.setVe_status(Status.CLOSE.getDisplay());
-            vendor.setVe_statuscode(Status.CLOSE.name());
+            vendor.setVe_status(Status.BANNED.getDisplay());
+            vendor.setVe_statuscode(Status.BANNED.name());
             vendor.setUpdaterId(BaseContextHolder.getUserId());
             vendor.setUpdateTime(new Date());
 
@@ -358,19 +357,19 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             if(vendor == null){
                 throw new BizException(BizExceptionCode.NO_DATA);
             }
-            if (Status.CLOSE.name().equals(vendor.getVe_statuscode())){
+            if (Status.BANNED.name().equals(vendor.getVe_statuscode())){
                 String code = vendor.getVe_code();
                 vendor = new Vendor();
                 vendor.setId(id);
-                vendor.setVe_statuscode(Status.OPEN.name());
-                vendor.setVe_status(Status.OPEN.getDisplay());
+                vendor.setVe_statuscode(Status.ENABLE.name());
+                vendor.setVe_status(Status.ENABLE.getDisplay());
                 getMapper().updateByPrimaryKeySelective(vendor);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
                 messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
-                throw new BizException(BizExceptionCode.BIZ_OPEN);
+                throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }
         }else {
             throw new BizException(BizExceptionCode.ILLEGAL_ID);

+ 6 - 7
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/WarehouseServiceImpl.java

@@ -21,7 +21,6 @@ import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.utils.RegexpUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.HashMap;
@@ -172,8 +171,8 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
             }
             Warehouse warehouse = new Warehouse();
             warehouse.setId(id);
-            warehouse.setWh_status(Status.CLOSE.getDisplay());
-            warehouse.setWh_statuscode(Status.CLOSE.name());
+            warehouse.setWh_status(Status.BANNED.getDisplay());
+            warehouse.setWh_statuscode(Status.BANNED.name());
             warehouse.setUpdaterId(BaseContextHolder.getUserId());
             warehouse.setUpdateTime(new Date());
 
@@ -195,12 +194,12 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
             if(warehouse == null){
                 throw new BizException(BizExceptionCode.NO_DATA);
             }
-            if (Status.CLOSE.name().equals(warehouse.getWh_statuscode())){
+            if (Status.BANNED.name().equals(warehouse.getWh_statuscode())){
                 String code = warehouse.getWh_code();
                 warehouse = new Warehouse();
                 warehouse.setId(id);
-                warehouse.setWh_statuscode(Status.OPEN.name());
-                warehouse.setWh_status(Status.OPEN.getDisplay());
+                warehouse.setWh_statuscode(Status.ENABLE.name());
+                warehouse.setWh_status(Status.ENABLE.getDisplay());
                 warehouse.setUpdaterId(BaseContextHolder.getUserId());
                 warehouse.setUpdateTime(new Date());
 
@@ -210,7 +209,7 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
                 messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
-                throw new BizException(BizExceptionCode.BIZ_OPEN);
+                throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }
         }else {
             throw new BizException(BizExceptionCode.ILLEGAL_ID);

+ 12 - 0
applications/document/document-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-document-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 9495

+ 9 - 0
applications/document/document-server/src/main/resources/logback-spring.xml

@@ -104,6 +104,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 1 - 1
applications/document/document-server/src/main/resources/mapper/DataImportMapper.xml

@@ -91,7 +91,7 @@
   where dd_diid = #{id}
 </select>
 
-  <select id="selectProductBycode" resultMap="DetailMap">
+  <select id="selectMainBycode" resultMap="DetailMap">
     select * from  data_importdetail
     where dd_codevalue = #{code} and dd_diid=#{id} and ifnull(dd_success,0)=0 and dd_maindata is not null and companyid=#{companyid}
   </select>

+ 1 - 1
applications/document/document-server/src/main/resources/mapper/ProductMapper.xml

@@ -902,7 +902,7 @@
         DELETE FROM PRODIODETAIL WHERE PD_PIID IN (SELECT PI_ID FROM PRODINOUT WHERE PI_INOUTNO=#{code} AND PRODINOUT.COMPANYID = #{companyId}) AND PRODIODETAIL.COMPANYID = #{companyId}
     </delete>
 
-    <select id="selectIdByCode" parameterType="long">
+    <select id="selectIdByCode" resultType="long">
         select pr_id from product where pr_code=#{code} and companyId=#{companyId}
     </select>
 </mapper>

+ 12 - 0
applications/money/money-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-money-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8895

+ 9 - 0
applications/money/money-server/src/main/resources/logback-spring.xml

@@ -104,6 +104,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 2 - 0
applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdIODetailDTO.java

@@ -49,6 +49,8 @@ public class ProdIODetailDTO extends CommonBaseDTO implements Serializable {
 
     private Double pd_nettotal;
 
+    private Double pd_ordertotal;
+
     private Integer pd_whid;
 
     private String pd_whcode;

+ 2 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdIODetail.java

@@ -44,6 +44,8 @@ public class ProdIODetail extends CommonBaseEntity implements Serializable {
 
     private Double pd_nettotal;
 
+    private Double pd_ordertotal;
+
     private Integer pd_whid;
 
     private String pd_whcode;

+ 2 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdInOutList.java

@@ -102,6 +102,8 @@ public class ProdInOutList extends CommonBaseEntity{
 
     private Double pd_nettotal;
 
+    private Double pd_ordertotal;
+
     private Integer pd_whid;
 
     private String pd_whcode;

+ 1 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java

@@ -119,6 +119,7 @@ public class PurchaseReportDetail extends CommonBaseEntity implements Serializab
 
     private Double pd_accepttotal;
 
+    private String pd_remark;
     //private ProductDTO productDTO;
     private Long pr_id;
     private String pr_code;

+ 12 - 0
applications/purchase/purchase-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-purchase-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8815

+ 9 - 0
applications/purchase/purchase-server/src/main/resources/logback-spring.xml

@@ -104,6 +104,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 5 - 4
applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -21,6 +21,7 @@
     <result column="pd_taxrate" jdbcType="DOUBLE" property="pd_taxrate" />
     <result column="pd_netprice" jdbcType="DOUBLE" property="pd_netprice" />
     <result column="pd_nettotal" jdbcType="DOUBLE" property="pd_nettotal" />
+    <result column="pd_ordertotal" jdbcType="DOUBLE" property="pd_ordertotal" />
     <result column="pd_whid" jdbcType="INTEGER" property="pd_whid" />
     <result column="pd_whcode" jdbcType="VARCHAR" property="pd_whcode" />
     <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />
@@ -654,15 +655,15 @@
 
   <update id="calcProdIn">
     update prodiodetail set pd_netprice = ifnull(pd_orderprice,0)/(1+ifnull(pd_taxrate,0)/100) where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodiodetail set pd_total = round(ifnull(pd_orderprice,0)*ifnull(pd_inqty,0),2),pd_nettotal = round(pd_netprice*ifnull(pd_inqty,0),2)  where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodinout set pi_total = round((select sum(pd_total) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ),2)  where pi_id = #{pi_id,jdbcType=INTEGER};
+    update prodiodetail set pd_ordertotal = round(ifnull(pd_orderprice,0)*ifnull(pd_inqty,0),2),pd_nettotal = round(pd_netprice*ifnull(pd_inqty,0),2)  where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_total = round((select sum(pd_ordertotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ),2)  where pi_id = #{pi_id,jdbcType=INTEGER};
     update prodinout set pi_nettotal = round((select sum(pd_nettotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ),2)  where pi_id = #{pi_id,jdbcType=INTEGER};
   </update>
 
   <update id="calcProdOut">
     update prodiodetail set pd_netprice = ifnull(pd_orderprice,0)/(1+ifnull(pd_taxrate,0)/100) where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodiodetail set pd_total = round(ifnull(pd_orderprice,0)*ifnull(pd_outqty,0),2),pd_nettotal = round(pd_netprice*ifnull(pd_outqty,0),2)  where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodinout set pi_total = round((select sum(pd_total) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ),2)  where pi_id = #{pi_id,jdbcType=INTEGER};
+    update prodiodetail set pd_ordertotal = round(ifnull(pd_orderprice,0)*ifnull(pd_outqty,0),2),pd_nettotal = round(pd_netprice*ifnull(pd_outqty,0),2)  where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_total = round((select sum(pd_ordertotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ),2)  where pi_id = #{pi_id,jdbcType=INTEGER};
     update prodinout set pi_nettotal = round((select sum(pd_nettotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ),2)  where pi_id = #{pi_id,jdbcType=INTEGER};
   </update>
 

+ 2 - 0
applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutListMapper.xml

@@ -48,6 +48,7 @@
     <result column="pd_taxrate" jdbcType="DOUBLE" property="pd_taxrate" />
     <result column="pd_netprice" jdbcType="DOUBLE" property="pd_netprice" />
     <result column="pd_nettotal" jdbcType="DOUBLE" property="pd_nettotal" />
+    <result column="pd_ordertotal" jdbcType="DOUBLE" property="pd_ordertotal" />
     <result column="pd_whid" jdbcType="INTEGER" property="pd_whid" />
     <result column="pd_whcode" jdbcType="VARCHAR" property="pd_whcode" />
     <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />
@@ -148,6 +149,7 @@
     <result column="pd_taxrate" jdbcType="DOUBLE" property="pd_taxrate" />
     <result column="pd_netprice" jdbcType="DOUBLE" property="pd_netprice" />
     <result column="pd_nettotal" jdbcType="DOUBLE" property="pd_nettotal" />
+    <!--<result column="pd_ordertotal" jdbcType="DOUBLE" property="pd_ordertotal" />-->
     <result column="pd_whid" jdbcType="INTEGER" property="pd_whid" />
     <result column="pd_whcode" jdbcType="VARCHAR" property="pd_whcode" />
     <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />

+ 1 - 0
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml

@@ -70,6 +70,7 @@
     <result column="pd_text4" property="pd_text4" jdbcType="VARCHAR" />
     <result column="pd_text5" property="pd_text5" jdbcType="VARCHAR" />
     <result column="pd_yqty" property="pd_yqty" jdbcType="DOUBLE" />
+    <result column="pd_remark" property="pd_remark" jdbcType="VARCHAR" />
     <result column="pr_id" property="pr_id"/>
     <result column="pr_code" property="pr_code"/>
     <result column="pr_detail" property="pr_detail"/>

+ 12 - 1
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/SaleApplication.java

@@ -6,6 +6,8 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
 
 /**
@@ -17,9 +19,18 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 @EnableEurekaClient
 @EnableFeignClients("com.usoftchina.saas")
 @EnableAuthClient
-public class SaleApplication  {
+public class SaleApplication extends WebMvcConfigurerAdapter {
     public static void main(String[] args) {
         SpringApplication.run(SaleApplication.class, args);
     }
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+
+        registry.addMapping("/**")
+                .allowCredentials(true)
+                .allowedHeaders("*")
+                .allowedOrigins("*")
+                .allowedMethods("*");
+    }
 
 }

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java

@@ -34,6 +34,8 @@ public interface ProdInOutMapper extends CommonBaseMapper<ProdInOut> {
 
     String validateAudit(List<DocBaseDTO> baseDTOs);
 
+    String validateClose(List<DocBaseDTO> baseDTOs);
+
     String validateBatchUnAudit(List<DocBaseDTO> baseDTOs);
 
     String validateBatchClose(List<DocBaseDTO> baseDTOs);

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java

@@ -56,4 +56,6 @@ public interface SaleMapper extends CommonBaseMapper<Sale> {
     Integer checkCustomer(Long id);
 
     String validateCustAudit(List<DocBaseDTO> baseDTOs);
+
+    String validateClose(List<DocBaseDTO> baseDTOs);
 }

+ 30 - 2
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java

@@ -283,6 +283,20 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 baseDTOs.getBaseDTOs().size() == 0) {
             return "没有可审核单据。";
         }
+        //存在已审核单据,单据编号:XXXX
+        String msg = prodInOutMapper.validateAudit(baseDTOs.getBaseDTOs());
+        if (null != msg) {
+            String message = BizExceptionCode.SALE_ORDER_HASAUDIT.getMessage();
+            int code = BizExceptionCode.SALE_ORDER_HASAUDIT.getCode();
+            throw new BizException(code, String.format(message, msg));
+        }
+        //存在已关闭单据,单据编号:XXXX
+        msg = prodInOutMapper.validateClose(baseDTOs.getBaseDTOs());
+        if (null != msg) {
+            String message = BizExceptionCode.SALE_ORDER_ISCOLSED.getMessage();
+            int code = BizExceptionCode.SALE_ORDER_ISCOLSED.getCode();
+            throw new BizException(code, String.format(message, msg));
+        }
         StringBuffer errorMsg = new StringBuffer();
         for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
             try{
@@ -291,7 +305,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 ProdInOutDTO prodInOutDTO = BeanMapper.map(prodInOut,ProdInOutDTO.class);
                 singleAudit(prodInOutDTO);
             }catch (Exception e){
-                String msg = BizExceptionCode.DEAL_FAILED.getMessage();
+                msg = BizExceptionCode.DEAL_FAILED.getMessage();
                 errorMsg.append(String.format(msg, base.getCode(), e.getMessage()));
             }
         }
@@ -337,6 +351,20 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 baseDTOs.getBaseDTOs().size() == 0) {
             return "无可反审核单据。";
         }
+        //存在未审核单据,单据编号:XXXX
+        String msg = prodInOutMapper.validateBatchUnAudit(baseDTOs.getBaseDTOs());
+        if (null != msg) {
+            String message = BizExceptionCode.SALE_ORDER_ISUNAUDIT.getMessage();
+            int code = BizExceptionCode.SALE_ORDER_ISUNAUDIT.getCode();
+            throw new BizException(code, String.format(message, msg));
+        }
+        //存在已关闭单据,单据编号:XXXX
+        msg = prodInOutMapper.validateClose(baseDTOs.getBaseDTOs());
+        if (null != msg) {
+            String message = BizExceptionCode.SALE_ORDER_ISCOLSED.getMessage();
+            int code = BizExceptionCode.SALE_ORDER_ISCOLSED.getCode();
+            throw new BizException(code, String.format(message, msg));
+        }
         StringBuffer errorMsg = new StringBuffer();
         for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
             try {
@@ -345,7 +373,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 ProdInOutDTO prodInOutDTO = BeanMapper.map(prodInOut,ProdInOutDTO.class);
                 singleUnAudit(prodInOutDTO);
             }catch (Exception e){
-                String msg = BizExceptionCode.DEAL_FAILED.getMessage();
+                msg = BizExceptionCode.DEAL_FAILED.getMessage();
                 errorMsg.append(String.format(msg, base.getCode(), e.getMessage()));
             }
         }

+ 12 - 4
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java

@@ -328,13 +328,21 @@ public class SaleServiceImpl implements SaleService{
                 baseDTOs.getBaseDTOs().size() == 0) {
             return;
         }
-      /*  String msg = saleMapper.validateBatchUnAudit(baseDTOs.getBaseDTOs());
+        //存在未审核单据,单据编号:XXXX
+        String msg = saleMapper.validateBatchUnAudit(baseDTOs.getBaseDTOs());
         if (null != msg) {
-            String message = BizExceptionCode.SALE_ORDER_HASAUDIT.getMessage();
-            int code = BizExceptionCode.SALE_ORDER_HASAUDIT.getCode();
+            String message = BizExceptionCode.SALE_ORDER_ISUNAUDIT.getMessage();
+            int code = BizExceptionCode.SALE_ORDER_ISUNAUDIT.getCode();
+            throw new BizException(code, String.format(message, msg));
+        }
+        //存在已关闭单据,单据编号:XXXX
+        msg = saleMapper.validateClose(baseDTOs.getBaseDTOs());
+        if (null != msg) {
+            String message = BizExceptionCode.SALE_ORDER_ISCOLSED.getMessage();
+            int code = BizExceptionCode.SALE_ORDER_ISCOLSED.getCode();
             throw new BizException(code, String.format(message, msg));
         }
-        saleMapper.BatchcheckSendStatus();*/
+        //saleMapper.BatchcheckSendStatus();
         for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
             unAudit(base.getId());
         }

+ 12 - 0
applications/sale/sale-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-sale-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-dev:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8835

+ 9 - 0
applications/sale/sale-server/src/main/resources/logback-spring.xml

@@ -104,6 +104,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 11 - 6
applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml

@@ -494,31 +494,36 @@
     select count(1) from prodinout where pi_inoutno = #{code} and pi_id != #{id}
   </select>
   <select id="validateUnAudit" parameterType="long" resultType="java.lang.String">
-    select pi_inoutno from prodinout where pi_id = #{id} and IFNULL(pi_statuscode,'UNAUDITED')!='AUDITED'
+    select pi_inoutno from prodinout where pi_id = #{id} and IFNULL(pi_statuscode,' ')!='AUDITED'
   </select>
   <select id="validateAudit" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
-    select GROUP_CONCAT(pi_inoutno) from prodinout where pi_statuscode='AUDITED' and pi_id in
+    select GROUP_CONCAT(pi_inoutno) from prodinout where IFNULL(pi_statuscode,' ')='AUDITED' and pi_id in
+    <foreach collection="list" item="item" open="(" close=")" separator=",">
+      #{item.id}
+    </foreach>
+  </select>
+  <select id="validateClose" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
+    select GROUP_CONCAT(pi_inoutno) from prodinout where IFNULL(pi_statuscode,' ')='CLOSE' and pi_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
       #{item.id}
     </foreach>
   </select>
-
   <select id="validateBatchUnAudit" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
-    select GROUP_CONCAT(pi_inoutno) from prodinout where pi_statuscode='UNAUDITED' and pi_id in
+    select GROUP_CONCAT(pi_inoutno) from prodinout where IFNULL(pi_statuscode,' ')='UNAUDITED' and pi_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
       #{item.id}
     </foreach>
   </select>
 
   <select id="validateBatchClose" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
-    select GROUP_CONCAT(pi_inoutno) from prodinout where pi_statuscode!='AUDITED' and pi_id in
+    select GROUP_CONCAT(pi_inoutno) from prodinout where IFNULL(pi_statuscode,' ')!='AUDITED' and pi_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
       #{item.id}
     </foreach>
   </select>
 
   <select id="validateBatchOpen" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
-    select GROUP_CONCAT(pi_inoutno) from prodinout where pi_statuscode!='CLOSE' and pi_id in
+    select GROUP_CONCAT(pi_inoutno) from prodinout where IFNULL(pi_statuscode,' ')!='CLOSE' and pi_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
       #{item.id}
     </foreach>

+ 7 - 2
applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml

@@ -356,7 +356,12 @@
       #{item.id}
     </foreach>
   </select>
-
+  <select id="validateClose" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
+      select GROUP_CONCAT(sa_code) from sale where IFNULL(sa_sendstatuscode,' ')='CLOSE' and sa_id in
+    <foreach collection="list" item="item" open="(" close=")" separator=",">
+      #{item.id}
+    </foreach>
+  </select>
   <select id="validateCustAudit" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
     select GROUP_CONCAT(sa_code) from sale left join customer on cu_id=sa_custid  where sa_statuscode='AUDITED' and sa_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
@@ -364,7 +369,7 @@
     </foreach>
   </select>
   <select id="validateBatchUnAudit" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
-    select GROUP_CONCAT(sa_code) from sale where sa_statuscode='UNAUDITED' and sa_id in
+    select GROUP_CONCAT(sa_code) from sale where IFNULL(sa_statuscode,'UNAUDITED') = 'UNAUDITED' and sa_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
       #{item.id}
     </foreach>

+ 2 - 0
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/dto/ProdIODetailDTO.java

@@ -49,6 +49,8 @@ public class ProdIODetailDTO extends CommonBaseDTO implements Serializable {
 
     private Double pd_nettotal;
 
+    private Double pd_ordertotal;
+
     private Long pd_whid;
 
     private String pd_whcode;

+ 2 - 2
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/ProdIODetail.java

@@ -45,6 +45,8 @@ public class ProdIODetail extends CommonBaseEntity implements Serializable {
 
     private Double pd_nettotal;
 
+    private Double pd_ordertotal;
+
     private Long pd_whid;
 
     private String pd_whcode;
@@ -81,8 +83,6 @@ public class ProdIODetail extends CommonBaseEntity implements Serializable {
 
     private Long pd_ioid;
 
-    private Double pd_ordertotal;
-
     private ProductDTO productDTO;
 
 }

+ 2 - 1
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/ProdInOutList.java

@@ -96,6 +96,8 @@ public class ProdInOutList extends CommonBaseEntity{
 
     private Double pd_nettotal;
 
+    private Double pd_ordertotal;
+
     private Integer pd_whid;
 
     private String pd_whcode;
@@ -130,7 +132,6 @@ public class ProdInOutList extends CommonBaseEntity{
 
     private String pd_remark;
 
-    private Double pd_ordertotal;
 
     private Long pd_ioid;
 

+ 2 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java

@@ -618,6 +618,8 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         updateMake.setId(make.getId());
         updateMake.setMa_status(Status.UNAUDITED.getDisplay());
         updateMake.setMa_statuscode(Status.UNAUDITED.name());
+        commonService.commonResAudit("make", "ma_id=" + id, "ma_status",
+                "ma_statuscode", "ma_auditdate", "ma_auditman");
         updateMake.setUpdateTime(new Date());
         updateMake.setUpdaterId(BaseContextHolder.getUserId());
         getMapper().updateByPrimaryKeySelective(updateMake);

+ 12 - 0
applications/storage/storage-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-storage-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 9015

+ 9 - 0
applications/storage/storage-server/src/main/resources/logback-spring.xml

@@ -104,6 +104,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 6 - 5
applications/storage/storage-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -21,6 +21,7 @@
     <result column="pd_taxrate" jdbcType="DOUBLE" property="pd_taxrate" />
     <result column="pd_netprice" jdbcType="DOUBLE" property="pd_netprice" />
     <result column="pd_nettotal" jdbcType="DOUBLE" property="pd_nettotal" />
+    <result column="pd_ordertotal" jdbcType="DOUBLE" property="pd_ordertotal" />
     <result column="pd_whid" jdbcType="INTEGER" property="pd_whid" />
     <result column="pd_whcode" jdbcType="VARCHAR" property="pd_whcode" />
     <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />
@@ -739,19 +740,19 @@
 
   <update id="calcProdIn">
     update prodiodetail set pd_netprice = ifnull(pd_orderprice,0)/(1+ifnull(pd_taxrate,0)/100) where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodiodetail set pd_total = ifnull(pd_orderprice,0)*ifnull(pd_inqty,0),pd_nettotal = pd_netprice*ifnull(pd_inqty,0) where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodinout set pi_total = (select sum(pd_total) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
+    update prodiodetail set pd_ordertotal = ifnull(pd_orderprice,0)*ifnull(pd_inqty,0),pd_nettotal = pd_netprice*ifnull(pd_inqty,0) where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_total = (select sum(pd_ordertotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
     update prodinout set pi_nettotal = (select sum(pd_nettotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
   </update>
 
   <update id="calcProdOut">
     update prodiodetail set pd_netprice = ifnull(pd_orderprice,0)/(1+ifnull(pd_taxrate,0)/100) where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodiodetail set pd_total = ifnull(pd_orderprice,0)*ifnull(pd_outqty,0),pd_nettotal = pd_netprice*ifnull(pd_outqty,0) where pd_piid = #{pi_id,jdbcType=INTEGER};
-    update prodinout set pi_total = (select sum(pd_total) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
+    update prodiodetail set pd_ordertotal = ifnull(pd_orderprice,0)*ifnull(pd_outqty,0),pd_nettotal = pd_netprice*ifnull(pd_outqty,0) where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_total = (select sum(pd_ordertotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
     update prodinout set pi_nettotal = (select sum(pd_nettotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
   </update>
 
   <delete id="deleteByInOutNo" >
       DELETE FROM prodiodetail WHERE PD_INOUTNO=#{code} AND PD_PICLASS=#{type} AND COMPANYID=#{companyId}
   </delete>
-</mapper>
+</mapper>

+ 1 - 0
applications/storage/storage-server/src/main/resources/mapper/ProdInOutListMapper.xml

@@ -48,6 +48,7 @@
     <result column="pd_taxrate" jdbcType="DOUBLE" property="pd_taxrate" />
     <result column="pd_netprice" jdbcType="DOUBLE" property="pd_netprice" />
     <result column="pd_nettotal" jdbcType="DOUBLE" property="pd_nettotal" />
+    <result column="pd_ordertotal" jdbcType="DOUBLE" property="pd_ordertotal" />
     <result column="pd_whid" jdbcType="INTEGER" property="pd_whid" />
     <result column="pd_whcode" jdbcType="VARCHAR" property="pd_whcode" />
     <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />

+ 12 - 0
base-servers/account/account-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-account-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8595

+ 9 - 0
base-servers/account/account-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 5 - 3
base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/api/AccountCacheTest.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.api;
 
 import com.usoftchina.saas.account.cache.AccountCache;
+import com.usoftchina.saas.account.cache.ResourceCache;
 import com.usoftchina.saas.context.BaseContextHolder;
 import org.junit.Assert;
 import org.junit.Test;
@@ -18,8 +19,9 @@ public class AccountCacheTest {
 
     @Test
     public void hdel() {
-//        AccountCache.of(43).hdel();
-        BaseContextHolder.setToken("eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJzdWx5IiwiYXBwSWQiOiJ0cmFkZS1hcHAiLCJ1c2VySWQiOjQzLCJjb21wYW55SWQiOjEsInVzZXJOYW1lIjoic3VseSIsInJlYWxOYW1lIjoi6IuP54G16LCjIiwiZXhwIjoxNTQzNDg5NjM0fQ.oqOIqO97zAH2W1RZsofmCstKHNYsQlnMr_UkOw69zw175fhAefysux2njV1FEbldTQA62RiQ7JrnntWPqOmsNmrBsD0cwvy9xkUma3CNjIuZirbg09CYjUVIFnDpwz-WpmZMQFDIBVQYchCDRzDUgPYPB4phptCGNpTG6VpztPo");
-        System.out.println(AccountCache.of(43).getAccount());
+        ResourceCache.of("trade-app").hdel();
+        AccountCache.of(55).hdel();
+//        BaseContextHolder.setToken("eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMzc5ODQ5MDU2NSIsImFwcElkIjoidHJhZGUtYXBwIiwidXNlcklkIjo2MSwiY29tcGFueUlkIjoyMSwidXNlck5hbWUiOiIxMzc5ODQ5MDU2NSIsInJlYWxOYW1lIjoi5bqU6bmPIiwiZXhwIjoxNTQzODIxMjkxfQ.DF5RT-g1Fi1czCb1-0EqI_Q9VTrwKskdzQtrpsdlcw-WyuN2xx2nqQqahLQIu836apeD3kptXxEtS2j3ArJKRzqrw4z6SFo-kFOl5cQpFLJxpVyrLl6i8ON33VO05uDRORWieNiWqSTDHFqqfOE5PaoocnCugOvweZaev7BmedQ");
+//        System.out.println(AccountCache.of(55).getAccount());
     }
 }

+ 12 - 0
base-servers/admin-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-admin-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8535

+ 9 - 0
base-servers/admin-server/src/main/resources/logback-spring.xml

@@ -103,6 +103,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 12 - 0
base-servers/auth/auth-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-auth-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8615

+ 9 - 0
base-servers/auth/auth-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 20 - 0
base-servers/auth/auth-server/src/test/java/com/usoftchina/saas/auth/controller/JwtTest.java

@@ -0,0 +1,20 @@
+package com.usoftchina.saas.auth.controller;
+
+import com.usoftchina.saas.auth.common.jwt.JwtHelper;
+import com.usoftchina.saas.auth.common.jwt.JwtInfo;
+import com.usoftchina.saas.auth.common.jwt.JwtToken;
+import org.junit.Test;
+
+/**
+ * @author yingp
+ * @date 2018/12/3
+ */
+public class JwtTest {
+
+    @Test
+    public void generateToken() {
+        JwtInfo info = new JwtInfo("trade-app", 1L, 55L, "13907997999", "hey");
+        JwtToken jwtToken = JwtHelper.generateToken(info, "auth/pri.key", 18000);
+        System.out.println(jwtToken.getToken());
+    }
+}

+ 5 - 0
base-servers/eureka-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,5 @@
+eureka:
+  instance:
+    hostname: saas-eureka-server-test
+server:
+  port: 8515

+ 9 - 0
base-servers/eureka-server/src/main/resources/logback-spring.xml

@@ -109,6 +109,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 12 - 0
base-servers/file/file-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-file-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8655

+ 9 - 0
base-servers/file/file-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 12 - 0
base-servers/gateway-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-gateway-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8575

+ 9 - 0
base-servers/gateway-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 12 - 0
base-servers/mail/mail-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-mail-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8675

+ 9 - 0
base-servers/mail/mail-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 12 - 0
base-servers/socket/socket-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-socket-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8695

+ 9 - 0
base-servers/socket/socket-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 12 - 0
base-servers/ui-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-ui-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+spring:
+  rabbitmq:
+    virtual-host: test
+server:
+  port: 8635

+ 9 - 0
base-servers/ui-server/src/main/resources/logback-spring.xml

@@ -110,6 +110,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 56 - 0
base-servers/ui-server/src/test/java/com/usoftchina/saas/ui/controller/co/CoViewControllerTest.java

@@ -0,0 +1,56 @@
+package com.usoftchina.saas.ui.controller.co;
+
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.junit.Test;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.security.cert.X509Certificate;
+
+public class CoViewControllerTest {
+
+    public static RestTemplate buildRestTemplate() throws Exception {
+        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
+        // https
+        SSLContextBuilder builder = new SSLContextBuilder();
+        builder.loadTrustMaterial(null, (X509Certificate[] x509Certificates, String s) -> true);
+        SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
+        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
+                .register("http", new PlainConnectionSocketFactory())
+                .register("https", socketFactory).build();
+        PoolingHttpClientConnectionManager phccm = new PoolingHttpClientConnectionManager(registry);
+        phccm.setMaxTotal(200);
+        CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).setConnectionManager(phccm).setConnectionManagerShared(true).build();
+        factory.setHttpClient(httpClient);
+
+        return new RestTemplate(factory);
+    }
+
+    @Test
+    public void getViewConfig() throws Exception {
+        RestTemplate restTemplate = buildRestTemplate();
+        MultiValueMap headers = new LinkedMultiValueMap();
+        headers.add("Authorization", "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMzkwNzk5Nzk5OSIsImFwcElkIjoidHJhZGUtYXBwIiwidXNlcklkIjo1NSwiY29tcGFueUlkIjoxLCJ1c2VyTmFtZSI6IjEzOTA3OTk3OTk5IiwicmVhbE5hbWUiOiJoZXkiLCJleHAiOjE1NDM4NDUyMDB9.eKN7UZTdFfAQLj_FB80ifxYu8nF_j-UQtKXSxPGA706iaJyIjR_LM_vbp-ZXx2GLBvZaH89o1qTUxleCCCepl27lvJPgyMqoZWW1YXDfO3hT25DEQoe8zzLH2Dd4GIj8jZ8zEMOhaFsvwMKWNqfCS6ML7pqfhoeoDihyZcv165s");
+        HttpEntity entity = new HttpEntity(headers);
+        ResponseEntity<String> result = restTemplate.exchange("http://192.168.0.174:8560/api/purchase/purchase/list",
+                HttpMethod.GET, entity, String.class);
+        if (result.getStatusCodeValue() == 200) {
+            System.out.println(result.getBody());
+        }
+    }
+
+}

+ 13 - 0
base-servers/zipkin-server/src/main/resources/config/application-docker-test.yml

@@ -0,0 +1,13 @@
+eureka:
+  instance:
+    hostname: saas-zipkin-server-test
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-test:8515/eureka/
+zipkin:
+  collector:
+    rabbitmq:
+      uri: amqp://saas:select123***@192.168.0.176:5672/test
+server:
+  port: 8555

+ 9 - 0
base-servers/zipkin-server/src/main/resources/logback-spring.xml

@@ -103,6 +103,15 @@
         </root>
     </springProfile>
 
+    <springProfile name="docker-test">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
     <springProfile name="docker-prod">
         <logger name="org.springframework" level="WARN"/>
         <logger name="com.usoftchina.saas" level="WARN"/>

+ 41 - 0
frontend/saas-portal-web/build/build-dev.js

@@ -0,0 +1,41 @@
+'use strict'
+require('./check-versions')()
+
+process.env.NODE_ENV = 'development'
+
+const ora = require('ora')
+const rm = require('rimraf')
+const path = require('path')
+const chalk = require('chalk')
+const webpack = require('webpack')
+const config = require('../config')
+const webpackConfig = require('./webpack.prod.conf')
+
+const spinner = ora('building for development...')
+spinner.start()
+
+rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
+  if (err) throw err
+  webpack(webpackConfig, (err, stats) => {
+    spinner.stop()
+    if (err) throw err
+    process.stdout.write(stats.toString({
+      colors: true,
+      modules: false,
+      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
+      chunks: false,
+      chunkModules: false
+    }) + '\n\n')
+
+    if (stats.hasErrors()) {
+      console.log(chalk.red('  Build failed with errors.\n'))
+      process.exit(1)
+    }
+
+    console.log(chalk.cyan('  Build complete.\n'))
+    console.log(chalk.yellow(
+      '  Tip: built files are meant to be served over an HTTP server.\n' +
+      '  Opening index.html over file:// won\'t work.\n'
+    ))
+  })
+})

+ 4 - 2
frontend/saas-portal-web/build/webpack.prod.conf.js

@@ -13,7 +13,9 @@ const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
 
 const env = process.env.NODE_ENV === 'testing'
   ? require('../config/test.env')
-  : require('../config/prod.env')
+  : (process.env.NODE_ENV === 'development'
+    ? require('../config/dev.env')
+    : require('../config/prod.env'))
 
 const webpackConfig = merge(baseWebpackConfig, {
   module: {
@@ -48,7 +50,7 @@ const webpackConfig = merge(baseWebpackConfig, {
       filename: utils.assetsPath('css/[name].[contenthash].css'),
       // Setting the following option to `false` will not extract CSS from codesplit chunks.
       // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
-      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 
+      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
       // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
       allChunks: true,
     }),

+ 3 - 4
frontend/saas-portal-web/config/dev.env.js

@@ -6,11 +6,10 @@ module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
   BASE_URL: {
     // 前端地址
-    web: '"http://192.168.0.181"',
+    web: '"https://trade-dev.usoftchina.com:5443"',
     // 后端接口网关
-    api: '"http://192.168.0.181:8560"',
-    // api:'"http://192.168.253.31:8560"',
+    api: '"https://saas-api-dev.usoftchina.com:5443"',
     // 账户中心接口
-    sso: '"http://192.168.253.12:32323"'
+    sso: '"https://sso-dev.usoftchina.com:5443"'
   }
 })

+ 2 - 2
frontend/saas-portal-web/config/test.env.js

@@ -6,9 +6,9 @@ module.exports = merge(devEnv, {
   NODE_ENV: '"testing"',
   BASE_URL: {
     // 前端地址
-    web: '"https://trade-dev.usoftchina.com:5443"',
+    web: '"https://trade-test.usoftchina.com:5443"',
     // 后端接口网关
-    api: '"https://saas-api-dev.usoftchina.com:5443"',
+    api: '"https://saas-api-test.usoftchina.com:5443"',
     // 账户中心接口
     sso: '"https://sso-dev.usoftchina.com:5443"'
   }

+ 2 - 1
frontend/saas-portal-web/package.json

@@ -11,7 +11,8 @@
     "e2e": "node test/e2e/runner.js",
     "test": "npm run unit && npm run e2e",
     "build": "node build/build.js",
-    "build-test": "node build/build-test.js"
+    "build-test": "node build/build-test.js",
+    "build-dev": "node build/build-dev.js"
   },
   "dependencies": {
     "axios": "^0.18.0",

+ 19 - 4
frontend/saas-web/app.json

@@ -306,12 +306,27 @@
      * Settings specific to testing builds.
      */
     "testing": {
+        "output": {
+            "appCache": {
+                "enable": true,
+                "path": "cache.appcache"
+            }
+        },
+        "loader": {
+            "cache": "${build.timestamp}"
+        },
+        "cache": {
+            "enable": true
+        },
+        "compressor": {
+            "type": "yui"
+        },
         "server": {
-            "accountCenter":"http://192.168.0.181:8000",
-            "accountEnterprise":"http://192.168.0.181:8000/#/enterprise",
+            "accountCenter": "https://saas-test.usoftchina.com:5443",
+            "accountEnterprise": "https://saas-test.usoftchina.com:5443/#/enterprise",
             "basePath": {
-                "https": "https://saas-api-dev.usoftchina.com:5443",
-                "http": "http://192.168.0.181:8560"
+                "https": "https://saas-api-test.usoftchina.com:5443",
+                "http": "http://192.168.0.181:8575"
             },
             "urlPattern": "^\/api\/"
         }

+ 9 - 0
frontend/saas-web/app/view/core/base/BasePanel.scss

@@ -19,6 +19,15 @@
         border-bottom-color: #fff !important;
         border-bottom-width: 1px !important;
     }
+    .x-btn-menu-active{
+        .x-btn-wrap{
+            .x-btn-button{
+                .x-btn-inner{
+                    color:#fff;
+                }
+            }
+        }
+    }
 }
 .core-base-gridpanel{
     .x-grid-body{

+ 1 - 1
frontend/saas-web/app/view/core/base/GridPanel.js

@@ -53,7 +53,7 @@ Ext.define('saas.view.core.base.GridPanel', {
                                 }
                             }else {
                                 console.error('exception: ', response.responseJson);
-                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                             }
                         }
                     }

+ 2 - 1
frontend/saas-web/app/view/core/base/ImportWindow.js

@@ -166,7 +166,8 @@ Ext.define('saas.view.core.base.ImportWindow', {
                         handler:function(b){
                             var caller = b.ownerCt.ownerCt.ownerCt.ownerCt.caller;
                             //获取模版
-                            window.location.href = '/api/commons/excel/import/templet?caller='+caller;
+                            var serverOptions = Ext.manifest.server;
+                            window.location.href = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
                         }
                     }
                 },{

+ 12 - 0
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js

@@ -27,6 +27,18 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                         type: 'json',
                         rootProperty: 'data.list',
                         totalProperty: 'data.total',
+                    },
+                    listeners: {
+                        exception: function(proxy, response, operation, eOpts) {
+                            if(operation.success) {
+                                if(response.timedout) {
+                                    saas.util.BaseUtil.showErrorToast('请求超时');
+                                }
+                            }else {
+                                console.error('exception: ', response.responseJson);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            }
+                        }
                     }
                 },
                 listeners: {

+ 12 - 0
frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js

@@ -66,6 +66,18 @@ Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
                         type: 'json',
                         rootProperty: 'data.list',
                         totalProperty: 'data.total',
+                    },
+                    listeners: {
+                        exception: function(proxy, response, operation, eOpts) {
+                            if(operation.success) {
+                                if(response.timedout) {
+                                    saas.util.BaseUtil.showErrorToast('请求超时');
+                                }
+                            }else {
+                                console.error('exception: ', response.responseJson);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            }
+                        }
                     }
                 },
                 listeners: {

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/types/BomDbfindTrigger.js

@@ -18,7 +18,7 @@ Ext.define('saas.view.core.dbfind.types.BomDbfindTrigger', {
         width: 200
     }],
     
-    defaultCondition: "bo_statuscode='OPEN'",
+    defaultCondition: "bo_statuscode='ENABLE'",
     //窗口字段设置
     dbSearchFields: [{
         emptyText: '输入BOM编号或名称',

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/types/CustomerDbfindTrigger.js

@@ -8,7 +8,7 @@ Ext.define('saas.view.core.dbfind.types.CustomerDbfindTrigger', {
     dataUrl: '/api/document/customer/dbfind',
     addXtype: 'document-customer-formpanel',
     addTitle: '客户资料',
-    defaultCondition: "cu_statuscode='OPEN'",
+    defaultCondition: "cu_statuscode='ENABLE'",
     
     dbtpls: [{
         field: 'cu_code',

+ 2 - 2
frontend/saas-web/app/view/core/dbfind/types/ProductDbfindTrigger.js

@@ -13,7 +13,7 @@ Ext.define('saas.view.core.dbfind.types.ProductDbfindTrigger', {
     },{
         field:'pr_detail',width:200
     }],
-    defaultCondition: "pr_statuscode='OPEN'",
+    defaultCondition: "pr_statuscode='ENABLE'",
     dbSearchFields:[{
         emptyText:'输入物料编号、名称或规格',
         xtype : "textfield", 
@@ -102,7 +102,7 @@ Ext.define('saas.view.core.dbfind.types.ProductDbfindTrigger', {
             return Ext.util.Format.number(v, format);
         }
     },{
-        text: "L/T",
+        text: "采购提前期",
         dataIndex: "pr_leadtime",
         width: 80
     }]

+ 2 - 2
frontend/saas-web/app/view/core/dbfind/types/ProductMultiDbfindTrigger.js

@@ -40,7 +40,7 @@ Ext.define('saas.view.core.dbfind.types.ProductMultiDbfindTrigger', {
         field: 'pr_detail',
         width: 200
     }],
-    defaultCondition: "pr_statuscode='OPEN'",
+    defaultCondition: "pr_statuscode='ENABLE'",
     dbSearchFields: [{
         emptyText: '输入物料编号、名称或规格',
         width: 200,
@@ -133,7 +133,7 @@ Ext.define('saas.view.core.dbfind.types.ProductMultiDbfindTrigger', {
             return Ext.util.Format.number(v, format);
         },
     }, {
-        text: "L/T",
+        text: "采购提前期",
         dataIndex: "pr_leadtime",
         width: 80
     }]

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/types/VendorDbfindTrigger.js

@@ -9,7 +9,7 @@ Ext.define('saas.view.core.dbfind.types.VendorDbfindTrigger', {
     dataUrl:'/api/document/vendor/list',
     addXtype: 'document-vendor-formpanel',
     addTitle: '供应商资料',
-    defaultCondition:"ve_statuscode='OPEN'",
+    defaultCondition:"ve_statuscode='ENABLE'",
 
     //联想设置
     dbtpls:[{

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/types/WarehouseDbfindTrigger.js

@@ -9,7 +9,7 @@ Ext.define('saas.view.core.dbfind.types.WarehouseDbfindTrigger', {
     // dataUrl:'http://localhost:9480/warehouse/list',
     addXtype: 'other-warehouse',
     addTitle: '仓库资料',
-    defaultCondition: "wh_statuscode='OPEN'",
+    defaultCondition: "wh_statuscode='ENABLE'",
     dbtpls: [{
         field: 'wh_code',
         width: 150

+ 10 - 1
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -180,28 +180,31 @@ Ext.define('saas.view.core.form.FormPanelController', {
             delete params.items1;
         }
 
+        form.setLoading(true);
         saas.util.BaseUtil.request({
             url: form._saveUrl,
             params: JSON.stringify(params),
             method: 'POST',
         })
         .then(function(localJson) {
+            form.setLoading(false);
             if(localJson.success){
                 var id = localJson.data.id;
                 var code = localJson.data.code;
                 form.initId = id;
                 saas.util.FormUtil.loadData(form);
-                saas.util.BaseUtil.showSuccessToast('保存成功');
 
                 var newId = form.xtype + '-' + id;
                 var newTitle = form._title + '(' + code + ')';
 
                 saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
 
+                saas.util.BaseUtil.showSuccessToast('保存成功');
                 form.fireEvent('aftersave', true, form, localJson);
             }
         })
         .catch(function(res) {
+            form.setLoading(false);
             console.error(res);
             saas.util.BaseUtil.showErrorToast('保存失败: ' + res.message);
             form.fireEvent('aftersave', false, form, res);
@@ -263,12 +266,14 @@ Ext.define('saas.view.core.form.FormPanelController', {
             delete params.items1;
         }
 
+        form.setLoading(true);
         saas.util.BaseUtil.request({
             url: form._auditUrl,
             params: JSON.stringify(params),
             method: 'POST',
         })
         .then(function(localJson) {
+            form.setLoading(false);
             if(localJson.success){
                 // 未保存直接审核会返回id
                 if(localJson.data) {
@@ -289,6 +294,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
             }
         })
         .catch(function(res) {
+            form.setLoading(false);
             console.error(res);
             if(res.data) {
                 var id = localJson.data.id;
@@ -330,11 +336,13 @@ Ext.define('saas.view.core.form.FormPanelController', {
         var id = viewModel.get(form._idField);
         var code = viewModel.get(form._codeField);
 
+        form.setLoading(true);
         saas.util.BaseUtil.request({
             url: form._unAuditUrl + '/' + id,
             method: 'POST',
         })
         .then(function(localJson) {
+            form.setLoading(false);
             if(localJson.success){
                 //解析参数
                 saas.util.BaseUtil.showSuccessToast('反审核成功');
@@ -342,6 +350,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
             }
         })
         .catch(function(res) {
+            form.setLoading(false);
             console.error(res);
             saas.util.BaseUtil.showErrorToast('反审核失败: ' + res.message);
         });

+ 17 - 51
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -9,9 +9,12 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
     requires: [
         'Ext.grid.plugin.Exporter'
     ],
-    plugins: {
-        gridexporter: true
-    },
+
+    plugins: [{
+        ptype: 'gridexporter',
+    }, {
+        ptype: 'menuclipboard'
+    }],
 
     idField:'',
     codeField:'',
@@ -58,26 +61,9 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
         }
 
         Ext.apply(me, {
-            actions: {
-                copy: {
-                    iconCls: 'x-fa fa-copy',
-                    text: '复制单元格',
-                    handler: function() {
-                        me.onCopy(me.selectedData);
-                    }
-                }
-            },
             viewConfig: {
                 deferEmptyText: false,
-                emptyText: '无数据',
-                listeners: {
-                    itemcontextmenu: function(view, rec, node, index, e) {
-                        e.stopEvent();
-                        me.getContextMenu().show().setLocalXY(e.getXY());
-                        me.selectedData = e.target.innerText;
-                        return false;
-                    }
-                }
+                emptyText: '无数据'
             },
             columns: me.initColumns(),
             store: Ext.create('Ext.data.Store', {
@@ -107,7 +93,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                                 if(response.timedout) {
                                     saas.util.BaseUtil.showErrorToast('请求超时');
                                 }else{
-                                    saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                    saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                                 }
                             }
                         }
@@ -287,11 +273,19 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                     // exportStyle: {
                     //     format: 'Medium Date'
                     // },
+                    copyRender: function(value) {
+                        return Ext.Date.format(new Date(value), 'Y-m-d');
+                    },
                     exportRenderer: function (value) {
                         return Ext.Date.format(new Date(value), 'Y-m-d');
                     }
                 })
             }
+            if(c.xtype == 'numbercolumn') {
+                Ext.applyIf(c, {
+                    align: 'end'
+                });
+            }
         });
 
         return columns;
@@ -322,10 +316,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
     onExport: function () {
         var grid = this.up('grid');
         //导出接口权限设置
-        var _url = grid.baseVastUrl.substring(0,grid.baseVastUrl.length-1);
-        var lastIndex = _url.lastIndexOf('/');
-        var caller = _url.substring(lastIndex);
-        var url = '/api/commons'+caller+'/export';
+        var url = '/api/commons/'+grid.caller+'/export';
         saas.util.BaseUtil.request({
             url: url,
             params: '',
@@ -422,29 +413,4 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
             });
 		return data;
     },
-
-    getContextMenu: function() {
-        var me = this;
-
-        return me.contextMenu || (me.contextMenu = me.add({
-            xtype: 'menu',
-            items: [
-                // Actions can be converted into MenuItems
-                '@copy',
-            ]
-        }));
-    },
-
-    onCopy: function(text) {
-		var target = Ext.DomHelper.append(document.body, {
-			tag: 'textarea',
-			style: 'opacity: 0;position: absolute;top: -10000px;right: 0;',
-			html: text
-		});
-		target.focus();
-		target.select();
-	    document.execCommand('Copy');
-	    target.blur();
-	    document.body.removeChild(target);
-	},
 });

+ 10 - 0
frontend/saas-web/app/view/core/query/QueryGridPanel.scss

@@ -9,6 +9,16 @@
         }
     }
 
+    .x-btn-menu-active{
+        .x-btn-wrap{
+            .x-btn-button{
+                .x-btn-inner{
+                    color:#fff;
+                }
+            }
+        }
+    }
+
     .x-panel-default-outer-border-trl {
         border-top-color: #fff !important;
         border-top-width: 1px !important;

+ 0 - 8
frontend/saas-web/app/view/core/query/QueryPanel.js

@@ -102,14 +102,6 @@ Ext.define('saas.view.core.query.QueryPanel', {
         
         var columns = queryGridConfig.baseColumn || [];
 
-        Ext.Array.each(columns, function(c) {
-            if(c.xtype == 'numbercolumn') {
-                Ext.applyIf(c, {
-                    align: 'end'
-                });
-            }
-        });
-
         if(columns[columns.length - 1].flex != 1) {
             columns.push({
                 flex: 1,

+ 9 - 1
frontend/saas-web/app/view/core/report/ReportPanel.js

@@ -239,7 +239,15 @@ Ext.define('saas.view.core.report.ReportPanel', {
                                     return s.hasOwnProperty(name);
                                 })
                                 if(type && d) {
-                                    c.summaryValue = Ext.util.Format.number(d[name], c.format || '0.00');
+                                    if(type == 'count') {
+                                        c.summaryValue = Ext.util.Format.number(d[name], c.format || '0');
+                                    }else if(typeof c.summaryRender == 'function') {
+                                        c.summaryValue = c.summaryRender(d[name]);
+                                    }else if(typeof c.renderer == 'function') {
+                                        c.summaryValue = c.renderer(d[name]);
+                                    }else {
+                                        c.summaryValue = Ext.util.Format.number(d[name], c.format || '0.00');
+                                    }
                                 }else {
                                     c.summaryValue = 0;
                                 }

+ 3 - 2
frontend/saas-web/app/view/document/bom/BasePanel.js

@@ -34,8 +34,8 @@ Ext.define('saas.view.document.bom.BasePanel', {
         fields: ['bo_statuscode', 'bo_status'],
         data: [
             ["ALL", "全部"],
-            ["OPEN", "已启"],
-            ["CLOSE", "已关闭"]
+            ["ENABLE", "已启"],
+            ["BANNED", "已禁用"]
         ]
         }),
         getCondition: function(value) {
@@ -61,6 +61,7 @@ Ext.define('saas.view.document.bom.BasePanel', {
         codeField: 'bo_mothercode',
         statusCodeField:'bo_statuscode',
         dataUrl: '/api/document/bom/list',
+        caller: 'Bom',
         columns : [{
             text : "id", 
             width : 0, 

+ 2 - 2
frontend/saas-web/app/view/document/bom/FormPanel.js

@@ -220,9 +220,9 @@ Ext.define('saas.view.document.bom.FormPanel', {
 
     auditTexts: {
         auditCode: 'CLOSE',
-        auditText: '已关闭',
+        auditText: '已禁用',
         unAuditCode: 'OPEN',
-        unAuditText: '已启',
+        unAuditText: '已启',
         auditBtnText: '禁用',
         unAuditBtnText: '启用',
     }

+ 3 - 2
frontend/saas-web/app/view/document/customer/BasePanel.js

@@ -43,8 +43,8 @@ Ext.define('saas.view.document.customer.BasePanel', {
         fields: ['cu_statuscode', 'cu_status'],
         data: [
             ["ALL", "全部"],
-            ["OPEN", "已启"],
-            ["CLOSE", "已关闭"]
+            ["ENABLE", "已启"],
+            ["BANNED", "已禁用"]
         ]
         }),
         getCondition: function(value) {
@@ -70,6 +70,7 @@ Ext.define('saas.view.document.customer.BasePanel', {
         codeField: 'cu_code',
         statusCodeField:'cu_statuscode',
         dataUrl: '/api/document/customer/list',
+        caller: 'Customer',
         columns : [
         {
             text : "客户id", 

+ 2 - 2
frontend/saas-web/app/view/document/customer/FormPanel.js

@@ -438,9 +438,9 @@ Ext.define('saas.view.document.customer.FormPanel', {
     }],
     auditTexts: {
         auditCode: 'CLOSE',
-        auditText: '已关闭',
+        auditText: '已禁用',
         unAuditCode: 'OPEN',
-        unAuditText: '已启',
+        unAuditText: '已启',
         auditBtnText: '禁用',
         unAuditBtnText: '启用',
     }

+ 8 - 3
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -316,14 +316,19 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 hideTrigger:true,
                 allowBlank:false,
                 maxLength: 30,
-                regex:/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/,
+                regex:/^1(3|4|5|7|8)\d{9}$/,
                 regexText:'请输入正确的手机号码',
                 listeners:{
+                    change:function(f,a,b){
+                        if(a==''){
+                            f._lastCheckValue = ''
+                        }
+                    },
                     blur:function(f,a,b,c){
                         var form = f.ownerCt;
                         if(f.value&&f.value!=''&&f.isValid()&&f._lastCheckValue!=f.value){
+                            f._lastCheckValue = f.value;
                             form.setLoading(true);
-                            f._lastCheckValue = f.value
                             Ext.Ajax.request({
                                 url: '/api/account/account/checkMobile?mobile='+f.value,
                                 method: 'GET',
@@ -465,7 +470,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 xtype:'textfield',
                 fieldLabel: '仓库状态',
                 name: 'wh_status',   
-                value:'已启',
+                value:'已启',
                 maxLength: 20
             },{
                 xtype:'hidden',

+ 132 - 0
frontend/saas-web/app/view/document/kind/KindModel.js

@@ -22,6 +22,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -49,6 +61,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -76,6 +100,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -103,6 +139,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -136,6 +184,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data.list'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -164,6 +224,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -195,6 +267,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data.list'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -222,6 +306,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -249,6 +345,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -279,6 +387,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data.list'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,
@@ -306,6 +426,18 @@ Ext.define('saas.view.document.kind.KindModel', {
                 reader: {
                     type: 'json',
                     rootProperty: 'data'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                        }
+                    }
                 }
             },
             pageSize: null,

+ 3 - 2
frontend/saas-web/app/view/document/product/BasePanel.js

@@ -44,8 +44,8 @@ Ext.define('saas.view.document.product.BasePanel', {
         fields: ['pr_statuscode', 'pr_status'],
         data: [
             ["ALL", "全部"],
-            ["OPEN", "已启"],
-            ["CLOSE", "已关闭"]
+            ["ENABLE", "已启"],
+            ["BANNED", "已禁用"]
         ]
         }),
         getCondition: function(value) {
@@ -71,6 +71,7 @@ Ext.define('saas.view.document.product.BasePanel', {
         codeField: 'pr_code',
         statusCodeField:'pr_statuscode',
         dataUrl: '/api/document/product/list',
+        caller: 'Product',
         columns : [{
             text : "id", 
             width : 0, 

+ 3 - 3
frontend/saas-web/app/view/document/product/FormPanel.js

@@ -198,7 +198,7 @@ Ext.define('saas.view.document.product.FormPanel', {
         fieldLabel : "更新时间"
     }, {
         xtype: 'numberfield',
-        fieldLabel: 'L/T',
+        fieldLabel: '采购提前期',
         name: 'pr_leadtime',
         minValue: 0,
         maxLength: 10
@@ -357,9 +357,9 @@ Ext.define('saas.view.document.product.FormPanel', {
     }],
     auditTexts: {
         auditCode: 'CLOSE',
-        auditText: '已关闭',
+        auditText: '已禁用',
         unAuditCode: 'OPEN',
-        unAuditText: '已启',
+        unAuditText: '已启',
         auditBtnText: '禁用',
         unAuditBtnText: '启用',
     },

+ 3 - 2
frontend/saas-web/app/view/document/vendor/BasePanel.js

@@ -38,8 +38,8 @@ Ext.define('saas.view.document.vendor.BasePanel', {
         fields: ['ve_statuscode', 've_status'],
         data: [
             ["ALL", "全部"],
-            ["OPEN", "已启"],
-            ["CLOSE", "已关闭"]
+            ["ENABLE", "已启"],
+            ["BANNED", "已禁用"]
         ]
         }),
         getCondition: function(value) {
@@ -65,6 +65,7 @@ Ext.define('saas.view.document.vendor.BasePanel', {
         codeField: 've_code',
         statusCodeField:'ve_statuscode',
         dataUrl: '/api/document/vendor/list',
+        caller: 'Vendor',
         columns : [{
             text : "供应商id", 
             width : 0, 

+ 2 - 2
frontend/saas-web/app/view/document/vendor/FormPanel.js

@@ -322,9 +322,9 @@ Ext.define('saas.view.document.vendor.FormPanel', {
     }],
     auditTexts: {
         auditCode: 'CLOSE',
-        auditText: '已关闭',
+        auditText: '已禁用',
         unAuditCode: 'OPEN',
-        unAuditText: '已启',
+        unAuditText: '已启',
         auditBtnText: '禁用',
         unAuditBtnText: '启用',
     }

+ 2 - 0
frontend/saas-web/app/view/home/charts/MonthSale.scss

@@ -1,9 +1,11 @@
 .x-pie-legend {
 
     .x-legend-inner {
+        display: block;
         padding: 0;
 
         .x-legend-container {
+            display: block;
 
             .x-legend-item {
                 font-size: 12px;

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