Browse Source

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

jinsy 7 years ago
parent
commit
3135bb1c4c
100 changed files with 1425 additions and 307 deletions
  1. 6 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 5 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java
  3. 4 4
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/JasperReportController.java
  4. 1 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/JasperReportService.java
  5. 10 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/JasperReportServiceImpl.java
  6. 3 2
      applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties
  7. 29 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/EmployeeController.java
  8. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/AddressMapper.java
  9. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BankinformationMapper.java
  10. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerMapper.java
  11. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerkindMapper.java
  12. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java
  13. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java
  14. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java
  15. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorkindMapper.java
  16. 4 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/EmployeeService.java
  17. 13 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/AddressServiceImpl.java
  18. 19 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BankinformationServiceImpl.java
  19. 4 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  20. 21 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  21. 13 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerkindServiceImpl.java
  22. 52 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/EmployeeServiceImpl.java
  23. 6 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  24. 15 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java
  25. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java
  26. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java
  27. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  28. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorkindServiceImpl.java
  29. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/WarehouseServiceImpl.java
  30. 3 0
      applications/document/document-server/src/main/resources/mapper/AddressMapper.xml
  31. 8 0
      applications/document/document-server/src/main/resources/mapper/BankinformationMapper.xml
  32. 1 1
      applications/document/document-server/src/main/resources/mapper/BomMapper.xml
  33. 5 0
      applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml
  34. 3 0
      applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml
  35. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  36. 3 0
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  37. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  38. 3 0
      applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml
  39. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/FundtransferdetailMapper.java
  40. 19 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtransferdetail.java
  41. 27 27
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/RecdetailView.java
  42. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  43. 3 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  44. 3 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  45. 1 1
      applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml
  46. 15 0
      applications/money/money-server/src/main/resources/mapper/FundtransferdetailMapper.xml
  47. 1 1
      applications/money/money-server/src/main/resources/mapper/PaybalancedetMapper.xml
  48. 1 1
      applications/money/money-server/src/main/resources/mapper/RecbalancedetMapper.xml
  49. 4 4
      applications/money/money-server/src/main/resources/mapper/RecdetailViewMapper.xml
  50. 4 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java
  51. 11 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  52. 9 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml
  53. 66 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/PurchaseDTO.java
  54. 62 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/PurchaseDetailDTO.java
  55. 156 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/PurchaseListDTO.java
  56. 7 1
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java
  57. 8 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  58. 6 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java
  59. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/report/SaleProfitView.java
  60. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java
  61. 1 1
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  62. 59 4
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  63. 7 0
      applications/sale/sale-server/src/main/resources/mapper/ProdIODetailMapper.xml
  64. 3 0
      applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml
  65. 242 0
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  66. 1 0
      applications/sale/sale-server/src/main/resources/mapper/SaleProfitViewMapper.xml
  67. 2 1
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMapper.java
  68. 102 60
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  69. 56 2
      applications/storage/storage-server/src/main/resources/mapper/MakeMapper.xml
  70. 2 23
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java
  71. 2 2
      base-servers/account/account-server/src/main/resources/mapper/AccountRoleMapper.xml
  72. 4 4
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  73. 0 28
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ServletErrorUtils.java
  74. 41 0
      framework/server-starter/src/main/java/com/usoftchina/saas/server/web/ServletUtils.java
  75. 2 1
      frontend/saas-web/Dockerfile
  76. 1 1
      frontend/saas-web/app.json
  77. 1 0
      frontend/saas-web/app/view/auth/CompanyPicker.scss
  78. 2 1
      frontend/saas-web/app/view/auth/LoginController.js
  79. 6 3
      frontend/saas-web/app/view/core/base/BasePanel.js
  80. 29 18
      frontend/saas-web/app/view/core/base/GridPanel.js
  81. 3 0
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.scss
  82. 34 44
      frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js
  83. 1 1
      frontend/saas-web/app/view/core/dbfind/types/BankInfoDbfindTrigger.js
  84. 1 1
      frontend/saas-web/app/view/core/dbfind/types/CustomerDbfindTrigger.js
  85. 2 2
      frontend/saas-web/app/view/core/dbfind/types/EmployeeDbfindTrigger.js
  86. 1 1
      frontend/saas-web/app/view/core/dbfind/types/ProductMultiDbfindTrigger.js
  87. 1 1
      frontend/saas-web/app/view/core/dbfind/types/WarehouseDbfindTrigger.js
  88. 8 4
      frontend/saas-web/app/view/core/form/DataMultiCombo.js
  89. 3 2
      frontend/saas-web/app/view/core/form/FormPanel.js
  90. 30 1
      frontend/saas-web/app/view/core/form/FormPanelController.js
  91. 1 0
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  92. 1 1
      frontend/saas-web/app/view/core/form/RemoteCombo.js
  93. 4 1
      frontend/saas-web/app/view/core/form/field/ConDateField.js
  94. 37 14
      frontend/saas-web/app/view/core/form/field/DetailGridField.js
  95. 14 8
      frontend/saas-web/app/view/core/query/QueryFormPanel.js
  96. 7 3
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  97. 0 5
      frontend/saas-web/app/view/core/report/ReportPanel.js
  98. 2 0
      frontend/saas-web/app/view/document/bom/BasePanel.js
  99. 4 4
      frontend/saas-web/app/view/document/bom/FormPanel.js
  100. 3 0
      frontend/saas-web/app/view/document/customer/BasePanel.js

+ 6 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -26,11 +26,13 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_UNAUDITED(79304,"只能反审核已审核的单据"),
     BIZ_DELETE(79305,"只能删除未审核的单据"),
     BIZ_RELDELETE(79305,"存在关联单据,不允许删除"),
+    BIZ_RELCLOSE(79305,"存在关联单据,不允许禁用"),
     BIZ_RELDELETE_UPDATE(79306,"存在关联单据,不允许更新编号"),
     BIZ_RELDELETE_UPDATEPROD(79307,"存在关联单据,不允许更新"),
     BIZ_RELDELETE_DELETEPROD(79308,"存在关联单据,不允许删除"),
     BIZ_PRODWHCODE_REPEAT(79309, "明细仓库重复"),
     BIZ_UNENDPRODUCT(79310,"系统还未结账,不能反结账"),
+    BIZ_RELUPDATE_CODEANDNAME(79311,"存在关联单据,不允许更新编号,名称"),
     NO_OPRATIONDATA(79400,"无可操作单据"),
     BOM_SAVE(79401, "产品编号+版本号已存在"),
     REPEAT_NAME(79501, "名称重复"),
@@ -46,6 +48,9 @@ public enum BizExceptionCode implements BaseExceptionCode {
     DEAL_FAILED(79800, "编号:<u>%s</u>处理失败,%s"),
     USING_EXISTS(79504, ""),
 
+    VENDOR_ISCLOSE(79505, "供应商已关闭"),
+    PRODUCT_ISCLOSE(79506, "物料已关闭"),
+    CUSTOMER_ISCLOSE(79507, "客户资料已关闭"),
 
 
     //采购 70000-71999
@@ -74,6 +79,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     RECALANCE_OUTNOWBALANCE(74003,"本次核销金额不能大于未核销金额"),
     BEFORE_UNAUDIT(74006, "单据:<u>%s</u>未审核,无法反审核"),
     BANK_AMOUNT_NOTENOUGH(74004, "资金账号不足"),
+    SUBLEDGER_NOT_EXIS(74005,"来源单据不存在"),
 
 
 

+ 5 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java

@@ -51,6 +51,11 @@ public enum Operation {
      */
     BANNED("msg.banned", "msg.bannedSuccess"),
 
+    /**
+     * 启用操作
+     */
+    ENABLE("msg.enable", "msg.enableSuccess"),
+
     /**
      * 记账
      */

+ 4 - 4
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/JasperReportController.java

@@ -30,14 +30,14 @@ public class JasperReportController {
     }
 
     @PostMapping("/print")
-    public Result print(String caller, String reportName, Integer id, boolean isProdIO) {
-        JasperResult print = jasperReportService.print(caller, reportName, id, isProdIO, false);
+    public Result print(String caller, String code, String reportName, Integer id, boolean isProdIO) {
+        JasperResult print = jasperReportService.print(caller, code, reportName, id, isProdIO, false);
         return Result.success(print);
     }
 
     @PostMapping("/printByDefault")
-    public Result printByDefault(String caller, String reportName, Integer id, boolean isProdIO) {
-        JasperResult print = jasperReportService.print(caller, reportName, id, isProdIO, true);
+    public Result printByDefault(String caller, String code, String reportName, Integer id, boolean isProdIO) {
+        JasperResult print = jasperReportService.print(caller, code, reportName, id, isProdIO, true);
         return Result.success(print);
     }
 }

+ 1 - 1
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/JasperReportService.java

@@ -9,5 +9,5 @@ public interface JasperReportService {
 
     List<SysPrintSet> getPrintSet(String caller);
 
-    JasperResult print(String caller, String reportName, Integer id, boolean isProdIO, boolean isDefault);
+    JasperResult print(String caller, String code, String reportName, Integer id, boolean isProdIO, boolean isDefault);
 }

+ 10 - 2
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/JasperReportServiceImpl.java

@@ -1,11 +1,14 @@
 package com.usoftchina.saas.commons.service.impl;
 
+import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.mapper.SysprintsetMapper;
 import com.usoftchina.saas.commons.po.Configs;
 import com.usoftchina.saas.commons.po.JasperResult;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.SysPrintSet;
 import com.usoftchina.saas.commons.service.ConfigsService;
 import com.usoftchina.saas.commons.service.JasperReportService;
+import com.usoftchina.saas.commons.service.MessageLogService;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.context.SpringContextHolder;
 import com.usoftchina.saas.exception.BizException;
@@ -29,6 +32,8 @@ public class JasperReportServiceImpl implements JasperReportService{
     private SysprintsetMapper sysprintsetMapper;
     @Autowired
     private ConfigsService configsService;
+    @Autowired
+    private MessageLogService messageLogService;
 
     @Override
     public List<SysPrintSet> getPrintSet(String caller) {
@@ -40,7 +45,7 @@ public class JasperReportServiceImpl implements JasperReportService{
     }
 
     @Override
-    public JasperResult print(String caller, String reportName, Integer id, boolean isProdIO, boolean isDefault) {
+    public JasperResult print(String caller, String code, String reportName, Integer id, boolean isProdIO, boolean isDefault) {
         Long companyId = BaseContextHolder.getCompanyId();
         JasperResult result = new JasperResult();
         SysPrintSet printSet = null;
@@ -71,9 +76,12 @@ public class JasperReportServiceImpl implements JasperReportService{
         if (!StringUtils.isEmpty(printSet.getDefaultcondition())) {
             condition += " and " + printSet.getDefaultcondition();
         }
+        //日志记录
+        DocBaseDTO baseDTO = new DocBaseDTO(Long.valueOf(id), code, caller);
+        messageLogService.customizeLog(baseDTO, Operation.PRINT);
 
         result.setReportName(printSet.getReportname());
-        result.setTitle(printSet.getTitle());
+        result.setTitle(StringUtils.isEmpty(code) ? printSet.getTitle() : printSet.getTitle() + "(" + code + ")");
         result.setPrinturl(printUrl);
         result.setWhereCondition(condition);
         result.setPrinttype(StringUtils.isEmpty(printSet.getPrinttype()) ? "" : printSet.getPrinttype());

+ 3 - 2
applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties

@@ -33,6 +33,7 @@ msg.resHungSuccess=\u89e3\u6302\u6210\u529f
 msg.checkSuccess=\u6838\u5bf9\u6210\u529f
 msg.printSuccess=\u6253\u5370\u6210\u529f
 msg.bannedSuccess=\u7981\u7528\u6210\u529f
+msg.enableSuccess=\u542f\u7528\u6210\u529f
 msg.resBannedSuccess=\u53cd\u7981\u7528\u6210\u529f
 msg.modifySuccess=\u6570\u636e\u66f4\u65b0\u6210\u529f
 msg.modifyDetailSuccess=\u66f4\u65b0\u660e\u7ec6\u6570\u636e\u6210\u529f
@@ -120,7 +121,7 @@ msg.endProdudct=\u7ed3\u8d26\u64cd\u4f5c
 msg.endProdudctSuccess=\u7ed3\u8d26\u6210\u529f
 msg.unEndProduct=\u53cd\u7ed3\u8d26\u64cd\u4f5c
 msg.unEndProductSuccess=\u53cd\u7ed3\u8d26\u6210\u529f
-msg.turnPurcCheckin=\u8F6C\u6570\u91C7\u8D2D\u9A8C\u6536\u5355\u64CD\u4F5C
-msg.turnPurcCheckinSuccess=\u8F6C\u6570\u91C7\u8D2D\u9A8C\u6536\u5355\u64CD\u4F5C\u6210\u529F
+msg.turnPurcCheckin=\u8F6C\u91C7\u8D2D\u9A8C\u6536\u5355\u64CD\u4F5C
+msg.turnPurcCheckinSuccess=\u8F6C\u91C7\u8D2D\u9A8C\u6536\u5355\u64CD\u4F5C\u6210\u529F
 msg.turnPurcCheckout=\u8F6C\u91C7\u8D2D\u9A8C\u9000\u5355\u64CD\u4F5C
 msg.turnPurcCheckoutSuccess=\u8F6C\u91C7\u8D2D\u9A8C\u9000\u5355\u64CD\u4F5C\u6210\u529F

+ 29 - 3
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/EmployeeController.java

@@ -7,7 +7,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.document.dto.CustomerFormDTO;
 import com.usoftchina.saas.document.dto.EmployeeDTO;
-import com.usoftchina.saas.document.dto.EmployeeFormDTO;
+import com.usoftchina.saas.document.entities.Employee;
 import com.usoftchina.saas.document.service.EmployeeService;
 import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,8 +60,8 @@ public class EmployeeController {
      * @return
      */
     @PostMapping("/save")
-    public Result<DocBaseDTO> saveFormData(@RequestBody EmployeeFormDTO data) {
-        DocBaseDTO save = employeeService.saveFormData(data.getMain());
+    public Result<DocBaseDTO> saveFormData(@RequestBody Employee employee) {
+        DocBaseDTO save = employeeService.saveFormData(employee);
         return Result.success(save);
     }
 
@@ -90,6 +90,32 @@ public class EmployeeController {
         return Result.success();
     }
 
+    /**
+     * 关闭
+     * @param id
+     * @return
+     */
+    @PostMapping("/close/{id}")
+    public Result close(@PathVariable("id") Long id){
+        DocBaseDTO docBaseDTO = employeeService.close(id);
+        return Result.success(docBaseDTO);
+    }
+
+    /**
+     * 开启
+     * @param id
+     * @return
+     */
+    @PostMapping("/open/{id}")
+    public Result open(@PathVariable("id") Long id){
+        DocBaseDTO docBaseDTO = employeeService.open(id);
+        return Result.success(docBaseDTO);
+    }
+
+
+
+
+
     @GetMapping("/getEmployeeByAccount")
     public Map<String,Object> getEmployeeByAccount(){
         return employeeService.getEmployeeByAccount();

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/AddressMapper.java

@@ -30,4 +30,6 @@ public interface AddressMapper extends CommonBaseMapper<Address> {
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
 
     List<Address> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromPurchase(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BankinformationMapper.java

@@ -29,4 +29,6 @@ public interface BankinformationMapper extends CommonBaseMapper<Bankinformation>
 
     void check(Map<String, Object> map);
 
+    Double selectamount(Long id);
+
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerMapper.java

@@ -31,4 +31,6 @@ public interface CustomerMapper extends CommonBaseMapper<Customer> {
     int validFinish(@Param("id") Long id,@Param("companyId") Long companyId);
 
     void check(Map<String, Object> map);
+
+    int validNameAndCodeWhenRelated(Customer customer);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerkindMapper.java

@@ -25,4 +25,6 @@ public interface CustomerkindMapper extends CommonBaseMapper<Customerkind> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<Customerkind> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromCustomer(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java

@@ -26,4 +26,6 @@ public interface ProductbrandMapper extends CommonBaseMapper<Productbrand> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<Productbrand> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java

@@ -25,4 +25,6 @@ public interface ProducttypeMapper extends CommonBaseMapper<Producttype> {
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
 
     List<Producttype> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java

@@ -25,4 +25,6 @@ public interface ProductunitMapper extends CommonBaseMapper<Productunit> {
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
 
     List<Productunit> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorkindMapper.java

@@ -26,4 +26,6 @@ public interface VendorkindMapper extends CommonBaseMapper<Vendorkind> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<Vendorkind> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromVendor(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 4 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/EmployeeService.java

@@ -29,4 +29,8 @@ public interface EmployeeService extends CommonBaseService<EmployeeMapper, Emplo
     void batchDelete(BatchDealBaseDTO baseDTOs);
 
     Map<String,Object> getEmployeeByAccount();
+
+    DocBaseDTO close(Long id);
+
+    DocBaseDTO open(Long id);
 }

+ 13 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/AddressServiceImpl.java

@@ -65,12 +65,25 @@ public class AddressServiceImpl extends CommonBaseServiceImpl<AddressMapper, Add
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            //校验是否有采购单使用了这个地址
+            validUse(id);
             addressMapper.deleteByPrimaryKey(id);
             messageLogService.delete(generateMsgObj(id));
         }
         return true;
     }
 
+    /**
+     * 校验采购地址是否已经被使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromPurchase(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 批量删除
      * @param ids

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

@@ -47,6 +47,7 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
         bankinformation.setCompanyId(BaseContextHolder.getCompanyId());
         bankinformation.setBk_income(new Double(0));
         bankinformation.setBk_spending(new Double(0));
+        int bid = Math.toIntExact(bankinformation.getId());
 
         String bktion = bankinformationMapper.selectBankcode(bankinformation.getBk_bankcode());
         //先判断ID,再判断编号
@@ -58,6 +59,24 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
             bankinformation.setBk_thisamount(bankinformation.getBk_beginamount());
             bankinformationMapper.insertSelective(bankinformation);
         }else {
+            //判断是否能修改期初金额
+            Double beginamount = bankinformationMapper.selectamount(bankinformation.getId());
+            Double fbeginamount = bankinformation.getBk_beginamount();
+            if (!(fbeginamount.equals(beginamount))){
+                DocBaseDTO docBaseDTO = getBaseDTOById(bid);
+                Map<String, Object> map = new HashMap<String, Object>();
+                map.put("v_id",bid);
+                map.put("v_code", docBaseDTO.getCode());
+                map.put("v_type","bank");
+                map.put("v_companyid",BaseContextHolder.getCompanyId());
+                map.put("v_res","");
+                bankinformationMapper.check(map);
+                Object result =  map.get("v_res");
+                if(!StringUtils.isEmpty(result)){
+                    throw new BizException(BizExceptionCode.USING_EXISTS.getCode(),result.toString());
+                }
+            }
+
             Long id = bankinformationMapper.selectBankId(bankinformation.getBk_bankcode());
             if (bktion != null){
                 if (id.equals(bankinformation.getId())){

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.entities.Bom;
@@ -186,7 +187,7 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
             Long prodId = getMapper().selectByPrimaryKey(id).getBo_motherid();
             int count = getMapper().getCountFromMake(prodId);
             if (count > 0){
-                throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+                throw new BizException(BizExceptionCode.BIZ_RELCLOSE);
             }
 
             Bom bom = new Bom();
@@ -200,7 +201,7 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
             getMapper().updateByPrimaryKeySelective(bom);
             //记录LOG
             DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -226,7 +227,7 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
                 getMapper().updateByPrimaryKeySelective(bom);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
                 throw new BizException(BizExceptionCode.BIZ_OPEN);

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.dto.CustomerDTO;
@@ -137,13 +138,13 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         cu_code = pushMaxnubmer(cu_code, cu_id);
         //单号赋值
         customer.setCu_code(cu_code);
+        //新增
         if (StringUtils.isEmpty(cu_id) || "0".equals(cu_id.toString())) {
             //检查名称和编号
             int count = getMapper().validNameAndCodeWhenInsert(customer);
             if (count>0) {
                 throw new BizException(BizExceptionCode.REPEAT_CUSTOMERCODE);
             }
-            //插入操作
             getMapper().insertSelective(customer);
             cu_id = customer.getId();
             //添加从表传输对象
@@ -172,6 +173,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             if (insertDetail2.size()>0) {
                 customeraddressMapper.batchInsert(insertDetail2);
             }
+            //更新
         }else {
             //检查名称和编号
             int count = getMapper().validNameAndCodeWhenUpdate(customer);
@@ -179,6 +181,22 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 throw new BizException(BizExceptionCode.REPEAT_CUSTOMERCODE);
             }
 
+            //有关联时不可修改名称编号
+            Map<String, Object> map = new HashMap<String, Object>();
+            map.put("v_id",cu_id);
+            map.put("v_code", cu_code);
+            map.put("v_type","cust");
+            map.put("v_companyid",BaseContextHolder.getCompanyId());
+            map.put("v_res","");
+            customerMapper.check(map);
+            Object result =  map.get("v_res");
+            if(!StringUtils.isEmpty(result)){
+                count = getMapper().validNameAndCodeWhenRelated(customer);
+                if (count > 0) {
+                    throw new BizException(BizExceptionCode.BIZ_RELUPDATE_CODEANDNAME);
+                }
+            }
+
             //检查期初日期是否已结转
             count = getMapper().validFinish(cu_id, companyId);
             if (count > 0) {
@@ -365,7 +383,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
         }
         return docBaseDTO;
     }
@@ -400,7 +418,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
-        messageLogService.open(docBaseDTO);
+        messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
         }
         return docBaseDTO;
     }

+ 13 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerkindServiceImpl.java

@@ -60,12 +60,25 @@ public class CustomerkindServiceImpl extends CommonBaseServiceImpl<CustomerkindM
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            //查找客户资料里是否用了该客户类型
+            validUse(id);
             customerkindMapper.deleteByPrimaryKey(id);
             messageLogService.delete(generateMsgObj(id));
         }
         return true;
     }
 
+    /**
+     * 校验客户资料里是否已使用这个客户类型
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromCustomer(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 构造 记录日志对象
      * @param id

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

@@ -122,6 +122,58 @@ public class EmployeeServiceImpl extends CommonBaseServiceImpl<EmployeeMapper, E
         return map;
     }
 
+    @Override
+    public DocBaseDTO close(Long id) {
+        if (id != null && id > 0){
+            Employee employee = getMapper().selectByPrimaryKey(id);
+            if (employee == null) {
+                throw new BizException(BizExceptionCode.NO_DATA);
+            }
+            if ("正式".equals(employee.getEm_class())){
+                String code = employee.getEm_code();
+                employee = new Employee();
+                employee.setId(id);
+                employee.setEm_class("离职");
+                employee.setUpdaterId(BaseContextHolder.getUserId());
+                employee.setUpdateTime(new Date());
+                getMapper().updateByPrimaryKeySelective(employee);
+                DocBaseDTO docBaseDTO = generateMsgObj(id,code);
+                messageLogService.open(docBaseDTO);
+                return docBaseDTO;
+            }else {
+                throw new BizException(BizExceptionCode.BIZ_CLOSE);
+            }
+        }else {
+            throw new BizException(BizExceptionCode.ILLEGAL_ID);
+        }
+    }
+
+    @Override
+    public DocBaseDTO open(Long id) {
+        if (id != null && id > 0){
+            Employee employee = getMapper().selectByPrimaryKey(id);
+            if (employee == null) {
+                throw new BizException(BizExceptionCode.NO_DATA);
+            }
+            if ("离职".equals(employee.getEm_class())){
+                String code = employee.getEm_code();
+                employee = new Employee();
+                employee.setId(id);
+                employee.setEm_class("正式");
+                employee.setUpdaterId(BaseContextHolder.getUserId());
+                employee.setUpdateTime(new Date());
+                getMapper().updateByPrimaryKeySelective(employee);
+                DocBaseDTO docBaseDTO = generateMsgObj(id,code);
+                messageLogService.open(docBaseDTO);
+                return docBaseDTO;
+            }else {
+                throw new BizException(BizExceptionCode.BIZ_OPEN);
+            }
+        }else {
+            throw new BizException(BizExceptionCode.ILLEGAL_ID);
+        }
+    }
+
     private List<EmployeeDTO> getList(ListReqDTO listReqDTO){
         Long companyId = BaseContextHolder.getCompanyId();
         String condition = listReqDTO.getFinalCondition();

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

@@ -12,6 +12,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.dto.ProductDTO;
@@ -120,11 +121,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (!product.getPr_code().equals(oldCode)){
                 validEnableUpdateCode(product.getId());
             }
-            //物料发生过除库存初始化外的出入库单时,不能新增,修改,删除
-            validProductOperation(product.getId(), BizExceptionCode.BIZ_RELDELETE_UPDATEPROD);
 
             //明细数据有更新/插入动作
             if (productDetailList.size() > 0){
+                //物料发生过除库存初始化外的出入库单时,不能新增,修改,删除
+                validProductOperation(product.getId(), BizExceptionCode.BIZ_RELDELETE_UPDATEPROD);
+
                 //找到原始单据,反过账并删除
                 String inoutCode = getMapper().selectProdIOCode(product.getPr_code(), BaseContextHolder.getCompanyId(), "库存初始化");
                 if (!StringUtils.isEmpty(inoutCode)) {
@@ -309,7 +311,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             getMapper().updateByPrimaryKeySelective(product);
             //记录LOG
             docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -336,7 +338,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 getMapper().updateByPrimaryKeySelective(product);
                 //记录LOG
                 docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }
         }else{

+ 15 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java

@@ -56,6 +56,10 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
 
     @Override
     public boolean removeByPrimaryKey(Long id){
+        if (id == null || id < 0){
+            throw new BizException(BizExceptionCode.ILLEGAL_ID);
+        }
+        validUse(id);
         productbrandMapper.deleteByPrimaryKey(id);
         //记录日志
         DocBaseDTO docBaseDTO = new DocBaseDTO(id, null, LOG_NAME);
@@ -63,6 +67,17 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
         return true;
     }
 
+    /**
+     * 校验物料品牌是否已经在使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromProduct(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     @Override
     public List<ComboDTO> getCombo() {
         return getMapper().getCombo(BaseContextHolder.getCompanyId());

+ 12 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java

@@ -64,6 +64,7 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            validUse(id);
             producttypeMapper.deleteByPrimaryKey(id);
             //记录LOG
             messageLogService.delete(generateMsgObj(id));
@@ -71,6 +72,17 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
         return true;
     }
 
+    /**
+     * 校验物料类型是否已经被物料资料所使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromProduct(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 构造 记录日志对象
      * @param id

+ 12 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java

@@ -52,6 +52,7 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            validUse(id);
             getMapper().deleteByPrimaryKey(id);
             //记录LOG
             messageLogService.delete(generateMsgObj(id));
@@ -59,6 +60,17 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
         return true;
     }
 
+    /**
+     * 校验物料单位是否已使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromProduct(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     @Override
     public List<Productunit> findAll(){
         List<Productunit> productunitList = getMapper().selectAll();

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

@@ -11,6 +11,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.dto.VendorDTO;
@@ -303,7 +304,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             getMapper().updateByPrimaryKeySelective(vendor);
             //记录LOG
             DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -331,7 +332,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 getMapper().updateByPrimaryKeySelective(vendor);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
                 throw new BizException(BizExceptionCode.BIZ_OPEN);

+ 12 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorkindServiceImpl.java

@@ -54,6 +54,7 @@ public class VendorkindServiceImpl extends CommonBaseServiceImpl<VendorkindMappe
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            validUse(id);
             vendorkindMapper.deleteByPrimaryKey(id);
             //记录LOG
             messageLogService.delete(generateMsgObj(id));
@@ -61,6 +62,17 @@ public class VendorkindServiceImpl extends CommonBaseServiceImpl<VendorkindMappe
         return true;
     }
 
+    /**
+     * 校验供应商类型是否已被供应商资料使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromVendor(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 构造 记录日志对象
      * @param id

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.entities.Warehouse;
@@ -180,7 +181,7 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
             getMapper().updateByPrimaryKeySelective(warehouse);
             //记录LOG
             DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -206,7 +207,7 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
                 getMapper().updateByPrimaryKeySelective(warehouse);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
                 throw new BizException(BizExceptionCode.BIZ_OPEN);

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/AddressMapper.xml

@@ -198,4 +198,7 @@
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
         SELECT AD_ADDRESS display,AD_ADDRESS value FROM ADDRESS WHERE COMPANYID=#{companyId}
     </select>
+    <select id="getCountFromPurchase" resultType="int">
+        SELECT COUNT(*) FROM PURCHASE WHERE PU_SHIPADDRESSCODE = (SELECT AD_ADDRESS FROM ADDRESS WHERE AD_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 8 - 0
applications/document/document-server/src/main/resources/mapper/BankinformationMapper.xml

@@ -340,6 +340,14 @@
         select bk_bankcode from bankinformation where bk_bankcode = #{bk_bankcode,jdbcType=VARCHAR}
     </select>
 
+  <select id="selectBankId" parameterType="java.lang.String" resultType="java.lang.Long">
+        select bk_id from bankinformation where bk_bankcode = #{bk_bankcode,jdbcType=VARCHAR}
+   </select>
+
+  <select id="selectamount" parameterType="java.lang.Long" resultType="java.lang.Double">
+        select bk_beginamount from bankinformation where bk_id = #{bk_id,jdbcType=INTEGER}
+   </select>
+
   <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">
         CALL SP_LIMITBASE(?, ?, ?, ?,?)
     </select>

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

@@ -273,7 +273,7 @@
     </where>
     ORDER BY BO_ID DESC
   </select>
-    <select id="getCountFromMake" parameterType="java.lang.Long">
+    <select id="getCountFromMake" parameterType="java.lang.Long" resultType="int">
         SELECT COUNT(*) FROM MAKE WHERE MA_PRODID = #{id}
     </select>
 </mapper>

+ 5 - 0
applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml

@@ -402,5 +402,10 @@
     <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
   </parameterMap>
 
+  <select id="validNameAndCodeWhenRelated" parameterType="com.usoftchina.saas.document.entities.Customer" resultType="int">
+    select count(1) from customer where (cu_code != #{cu_code,jdbcType=VARCHAR} or cu_name != #{cu_name,jdbcType=VARCHAR})
+    and cu_id != #{id} and companyId =#{companyId}
+  </select>
+
 
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml

@@ -139,4 +139,7 @@
             </if>
         </where>
     </select>
+    <select id="getCountFromCustomer" resultType="int">
+        SELECT COUNT(*) FROM CUSTOMER WHERE CU_TYPE = (SELECT CK_NAME FROM CUSTOMERKIND WHERE CK_ID = #{id}) AND companyid = #{companyId};
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml

@@ -146,4 +146,7 @@
         </if>
     </where>
   </select>
+    <select id="getCountFromProduct" resultType="int">
+        SELECT COUNT(*) FROM PRODUCT WHERE PR_BRAND = (SELECT PB_NAME FROM PRODUCTBRAND WHERE PB_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml

@@ -145,4 +145,7 @@
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
         SELECT PT_NAME display,PT_NAME value FROM PRODUCTTYPE WHERE COMPANYID=#{companyId}
     </select>
+    <select id="getCountFromProduct" resultType="int">
+        SELECT COUNT(*) FROM PRODUCT WHERE PR_KIND = (SELECT PT_NAME FROM PRODUCTTYPE WHERE PT_ID = #{id}) AND companyId=#{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml

@@ -139,4 +139,7 @@
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
         SELECT PU_NAME display,PU_NAME value FROM PRODUCTUNIT WHERE COMPANYID=#{companyId}
     </select>
+    <select id="getCountFromProduct" resultType="int">
+        SELECT COUNT(*) FROM PRODUCT WHERE PR_UNIT = (SELECT PU_NAME FROM PRODUCTUNIT WHERE PU_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml

@@ -145,4 +145,7 @@
         </if>
     </where>
   </select>
+    <select id="getCountFromVendor" resultType="int">
+        SELECT COUNT(*) FROM VENDOR WHERE VE_TYPE = (SELECT VK_NAME FROM VENDORKIND WHERE VK_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 1 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/FundtransferdetailMapper.java

@@ -13,7 +13,7 @@ public interface FundtransferdetailMapper {
 
     int insertSelective(Fundtransferdetail record);
 
-    List<Fundtransferdetail> selectByPrimaryKey(@Param("id") Integer ftdId, @Param("companyId") Integer companyId);
+    List<Fundtransferdetail> selectByPrimaryKeyList(@Param("id") Integer ftdId, @Param("companyId") Integer companyId);
 
     int updateByPrimaryKeySelective(Fundtransferdetail record);
 

+ 19 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtransferdetail.java

@@ -47,6 +47,25 @@ public class Fundtransferdetail extends CommonBaseEntity implements Serializable
 
     private String ftd_text5;
 
+    private Double bk_outthisamount;
+    private Double bk_inthisamount;
+
+    public Double getBk_outthisamount() {
+        return bk_outthisamount;
+    }
+
+    public void setBk_outthisamount(Double bk_outthisamount) {
+        this.bk_outthisamount = bk_outthisamount;
+    }
+
+    public Double getBk_inthisamount() {
+        return bk_inthisamount;
+    }
+
+    public void setBk_inthisamount(Double bk_inthisamount) {
+        this.bk_inthisamount = bk_inthisamount;
+    }
+
     public Date getFt_date() {
         return ft_date;
     }

+ 27 - 27
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/RecdetailView.java

@@ -15,13 +15,13 @@ public class RecdetailView {
 
     private String PU_BUYERNAME;
 
-    private Date pb_date;
+    private Date rb_date;
 
     private Double cu_beginaramount;
 
-    private Double pb_pdamount;
+    private Double rb_rdamount;
 
-    private Double pb_pbdamount;
+    private Double rb_rbdamount;
 
     private Double mustpay;
 
@@ -88,14 +88,6 @@ public class RecdetailView {
         this.PU_BUYERNAME = PU_BUYERNAME == null ? null : PU_BUYERNAME.trim();
     }
 
-    public Date getPb_date() {
-        return pb_date;
-    }
-
-    public void setPb_date(Date pb_date) {
-        this.pb_date = pb_date;
-    }
-
     public Double getCu_beginaramount() {
         return cu_beginaramount;
     }
@@ -104,22 +96,6 @@ public class RecdetailView {
         this.cu_beginaramount = cu_beginaramount;
     }
 
-    public Double getPb_pdamount() {
-        return pb_pdamount;
-    }
-
-    public void setPb_pdamount(Double pb_pdamount) {
-        this.pb_pdamount = pb_pdamount;
-    }
-
-    public Double getPb_pbdamount() {
-        return pb_pbdamount;
-    }
-
-    public void setPb_pbdamount(Double pb_pbdamount) {
-        this.pb_pbdamount = pb_pbdamount;
-    }
-
     public Double getMustpay() {
         return mustpay;
     }
@@ -151,4 +127,28 @@ public class RecdetailView {
     public void setPi_remark(String pi_remark) {
         this.pi_remark = pi_remark == null ? null : pi_remark.trim();
     }
+
+    public Date getRb_date() {
+        return rb_date;
+    }
+
+    public void setRb_date(Date rb_date) {
+        this.rb_date = rb_date;
+    }
+
+    public Double getRb_rdamount() {
+        return rb_rdamount;
+    }
+
+    public void setRb_rdamount(Double rb_rdamount) {
+        this.rb_rdamount = rb_rdamount;
+    }
+
+    public Double getRb_rbdamount() {
+        return rb_rbdamount;
+    }
+
+    public void setRb_rbdamount(Double rb_rbdamount) {
+        this.rb_rbdamount = rb_rbdamount;
+    }
 }

+ 2 - 2
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java

@@ -200,7 +200,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
 
         //资金
         //取从表金额
-        List<Fundtransferdetail> fundtransferdetailList = fundtransferdetailMapper.selectByPrimaryKey(id, Math.toIntExact(BaseContextHolder.getCompanyId()));
+        List<Fundtransferdetail> fundtransferdetailList = fundtransferdetailMapper.selectByPrimaryKeyList(id, Math.toIntExact(BaseContextHolder.getCompanyId()));
         Iterator isList = fundtransferdetailList.iterator();
         while (isList.hasNext()){
             Fundtransferdetail fundtransferdetail = (Fundtransferdetail) isList.next();
@@ -305,7 +305,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
     public Fundtran select(int id) {
         Fundtran fundtran = new Fundtran();
         fundtran.setMain(fundtransferMapper.selectByPrimaryKey(id));
-        fundtran.setItems(fundtransferdetailMapper.selectByPrimaryKey(id, Math.toIntExact(BaseContextHolder.getCompanyId())));
+        fundtran.setItems(fundtransferdetailMapper.selectByPrimaryKeyList(id, Math.toIntExact(BaseContextHolder.getCompanyId())));
         return fundtran;
     }
 

+ 3 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java

@@ -137,6 +137,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
             Double namount = new Double(0);
             if(sourceId!=0){
                 Subledger subledger = subledgerMapper.selectByPrimaryKey(sourceId);
+                if (subledger == null){
+                    throw new BizException(500, BizExceptionCode.SUBLEDGER_NOT_EXIS.getMessage());
+                }
                 namount = subledger.getSl_namount();
             }
             //本次核销金额不能大于未核销金额

+ 3 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java

@@ -135,6 +135,9 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
             Double namount = new Double(0);
             if(sourceId!=0){
                 Subledger subledger = subledgerMapper.selectByPrimaryKey(sourceId);
+                if (subledger == null){
+                    throw new BizException(500, BizExceptionCode.SUBLEDGER_NOT_EXIS.getMessage());
+                }
                 namount = subledger.getSl_namount()==null?new Double(0):subledger.getSl_namount();
             }
             //本次核销金额不能大于未核销金额

+ 1 - 1
applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml

@@ -27,7 +27,7 @@
         and  companyId = #{companyId}
       </if>
     </where>
-    order by date, bankid desc
+    order by bankname, date, bankid desc
   </select>
 
 </mapper>

+ 15 - 0
applications/money/money-server/src/main/resources/mapper/FundtransferdetailMapper.xml

@@ -25,12 +25,17 @@
     <result column="ftd_text3" property="ftd_text3" jdbcType="VARCHAR" />
     <result column="ftd_text4" property="ftd_text4" jdbcType="VARCHAR" />
     <result column="ftd_text5" property="ftd_text5" jdbcType="VARCHAR" />
+      <result column="bk_outthisamount" property="bk_outthisamount" jdbcType="DOUBLE" />
+      <result column="bk_inthisamount" property="bk_inthisamount" jdbcType="DOUBLE" />
   </resultMap>
   <sql id="Base_Column_List" >
     ftd_id, ftd_ftid, ftd_detno, ftd_ym, ftd_bankid, ftd_bankcode, ftd_bankname, ftd_inbankid, 
     ftd_inbankcode, ftd_inbankname, ftd_nowbalance, ftd_paymethod, ftd_paycode, ftd_remark, 
     companyid, updaterId, updatedate, ftd_text1, ftd_text2, ftd_text3, ftd_text4, ftd_text5
   </sql>
+    <sql id="Bank_Column_List">
+        b.bk_thisamount as bk_outthisamount,c.bk_thisamount as bk_inthisamount
+    </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
     select 
     <include refid="Base_Column_List" />
@@ -38,6 +43,16 @@
     where ftd_ftid = #{id,jdbcType=INTEGER} and companyId = #{companyId}
   </select>
 
+    <select id="selectByPrimaryKeyList" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select
+    <include refid="Base_Column_List"/>,
+        <include refid="Bank_Column_List" />
+    from fundtransferdetail,
+    (select bk_id,bk_thisamount from bankinformation) b,
+    (select bk_id, bk_thisamount from bankinformation)c
+    where ftd_ftid = #{id,jdbcType=INTEGER} and companyId = #{companyId} and ftd_bankid = b.bk_id and
+    ftd_inbankid = c.bk_id
+    </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
     delete from fundtransferdetail
     where ftd_ftid = #{id,jdbcType=INTEGER}

+ 1 - 1
applications/money/money-server/src/main/resources/mapper/PaybalancedetMapper.xml

@@ -32,7 +32,7 @@
     select 
     <include refid="Base_Column_List" />
     from paybalancedet
-    where pd_pbid = #{id,jdbcType=INTEGER} order by pd_id desc
+    where pd_pbid = #{id,jdbcType=INTEGER} order by pd_detno asc
   </select>
   <delete id="deleteItem" parameterType="java.lang.Integer" >
     delete from paybalancedet

+ 1 - 1
applications/money/money-server/src/main/resources/mapper/RecbalancedetMapper.xml

@@ -90,7 +90,7 @@
     select 
     <include refid="Base_Column_List" />
     from recbalancedet
-    where rd_rbid = #{id,jdbcType=INTEGER} order by rd_id desc
+    where rd_rbid = #{id,jdbcType=INTEGER} order by rd_detno asc
   </select>
   <delete id="deleteItem" parameterType="java.lang.Integer">
     delete from recbalancedet

+ 4 - 4
applications/money/money-server/src/main/resources/mapper/RecdetailViewMapper.xml

@@ -8,10 +8,10 @@
     <result column="pi_class" property="pi_class" jdbcType="VARCHAR" />
     <result column="PU_BUYERCODE" property="PU_BUYERCODE" jdbcType="VARCHAR" />
     <result column="PU_BUYERNAME" property="PU_BUYERNAME" jdbcType="VARCHAR" />
-    <result column="pb_date" property="pb_date" jdbcType="TIMESTAMP" />
+    <result column="rb_date" property="rb_date" jdbcType="TIMESTAMP" />
     <result column="cu_beginaramount" property="cu_beginaramount" jdbcType="DOUBLE" />
-    <result column="pb_pdamount" property="pb_pdamount" jdbcType="DOUBLE" />
-    <result column="pb_pbdamount" property="pb_pbdamount" jdbcType="DOUBLE" />
+    <result column="rb_rdamount" property="rb_rdamount" jdbcType="DOUBLE" />
+    <result column="rb_rbdamount" property="rb_rbdamount" jdbcType="DOUBLE" />
     <result column="mustpay" property="mustpay" jdbcType="DOUBLE" />
     <result column="mustdate" property="mustdate" jdbcType="DOUBLE" />
     <result column="pi_total" property="pi_total" jdbcType="DOUBLE" />
@@ -29,6 +29,6 @@
         and  companyId = #{companyId}
       </if>
     </where>
-    order by pb_date desc
+    order by rb_date desc
   </select>
 </mapper>

+ 4 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java

@@ -32,4 +32,8 @@ public interface PurchaseMapper extends CommonBaseMapper<Purchase>{
     Integer checkTurnInstatus(Long id);
 
     void updateCreator(@Param("userId") Long userId,@Param("userName") String userName,@Param("id") Long pu_id);
+
+    Integer validateVendor(@Param("id") Long id);
+
+    Integer validateProduct(@Param("id") Long id);
 }

+ 11 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java

@@ -499,6 +499,17 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     public Result singleAudit(Long id) {
         DocBaseDTO docBaseDTO = getBaseDTOById(id);
         Result result = Result.success(docBaseDTO);
+        //检查供应商是否开启状态
+        Integer count =0;
+        count = purchaseMapper.validateVendor(id);
+        if (count != 0) {
+            throw new BizException(BizExceptionCode.VENDOR_ISCLOSE);
+        }
+        //检查物料是否开启状态
+        count = purchaseMapper.validateProduct(id);
+        if (count != 0) {
+            throw new BizException(BizExceptionCode.PRODUCT_ISCLOSE);
+        }
         //检查最小包装数
         result.setMessage(purchasedetailMapper.checkzxbzs(id));
         commonService.commonAudit("purchase", "pu_id=" + id, "pu_status",

+ 9 - 0
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml

@@ -436,5 +436,14 @@
     update purchase set creatorId = #{userId} , creatorName=#{userName} where pu_id=#{id}
   </update>
 
+  <select id="validateVendor" resultType="int" >
+    select count(1) from vendor where ve_id = (select pu_vendid from purchase where pu_id=#{id}) and ve_statuscode='CLOSE';
+  </select>
+
+  <select id="validateProduct" resultType="int" >
+    select count(1) from purchasedetail left join product on PD_PRODID=pr_id where  pd_puid=#{id} and pr_statuscode='CLOSE';
+  </select>
+
+
 
 </mapper>

+ 66 - 0
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/PurchaseDTO.java

@@ -0,0 +1,66 @@
+package com.usoftchina.saas.sale.dto;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class PurchaseDTO extends CommonBaseEntity implements Serializable {
+
+    private String pu_code;
+
+    private Date pu_date;
+
+    private Integer pu_vendid;
+
+    private String pu_vendcode;
+
+    private String pu_vendname;
+
+    private Integer pu_buyerid;
+
+    private String pu_buyercode;
+
+    private String pu_buyername;
+
+    private Date pu_delivery;
+
+    private Double pu_taxtotal;
+
+    private Double pu_total;
+
+    private String pu_remark;
+
+    private String pu_totalupper;
+
+    private String pu_printstatus;
+
+    private String pu_printstatuscode;
+
+    private String pu_acceptstatuscode;
+
+    private String pu_acceptstatus;
+
+    private String pu_statuscode;
+
+    private String pu_status;
+
+    private String pu_text1;
+
+    private String pu_text2;
+
+    private String pu_text3;
+
+    private String pu_text4;
+
+    private String pu_text5;
+
+    private String pu_shipaddresscode;
+
+    private String pu_auditman;
+
+    private Date pu_auditdate;
+
+}

+ 62 - 0
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/PurchaseDetailDTO.java

@@ -0,0 +1,62 @@
+package com.usoftchina.saas.sale.dto;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import com.usoftchina.saas.document.dto.ProductDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class PurchaseDetailDTO extends CommonBaseEntity implements Serializable {
+
+    private  Long pd_puid;
+
+    private String pd_code;
+
+    private Integer pd_detno;
+
+    private Long pd_prodid;
+
+    private String pd_prodcode;
+
+    private String pd_unit;
+
+    private Double pd_qty;
+
+    private Double pd_price;
+
+    private Double pd_taxprice;
+
+    private Double pd_total;
+
+    private Double pd_taxrate;
+
+    private Double pd_taxtotal;
+
+    private Double pd_acceptqty;
+
+    private Date pd_delivery;
+
+    private String pd_salecode;
+
+    private Integer pd_saledetno;
+
+    private Integer pd_sdid;
+
+    private String pd_text1;
+
+    private String pd_text2;
+
+    private String pd_text3;
+
+    private String pd_text4;
+
+    private String pd_text5;
+
+    private Double pd_yqty;
+
+    private  String pd_remark;
+
+    private ProductDTO productDTO;
+}

+ 156 - 0
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/PurchaseListDTO.java

@@ -0,0 +1,156 @@
+package com.usoftchina.saas.sale.dto;
+
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2018-10-10 16:42
+ **/
+@Data
+public class PurchaseListDTO extends CommonBaseEntity implements Serializable {
+
+    //主表信息
+    private  Integer pu_id;
+
+    private String pu_code;
+
+    private Date pu_date;
+
+    private Integer pu_vendid;
+
+    private String pu_vendcode;
+
+    private String pu_vendname;
+
+    private Integer pu_buyerid;
+
+    private String pu_buyercode;
+
+    private String pu_buyername;
+
+    private Date pu_delivery;
+
+    private Double pu_taxtotal;
+
+    private Double pu_total;
+
+    private String pu_remark;
+
+    private String pu_totalupper;
+
+    private String pu_printstatus;
+
+    private String pu_printstatuscode;
+
+    private String pu_acceptstatuscode;
+
+    private String pu_acceptstatus;
+
+    private String pu_statuscode;
+
+    private String pu_status;
+
+    private String pu_text1;
+
+    private String pu_text2;
+
+    private String pu_text3;
+
+    private String pu_text4;
+
+    private String pu_text5;
+
+    private String pu_shipaddresscode;
+
+    private Date pu_auditdate;
+
+    private String pu_auditman;
+
+    //从表字段
+    private Long pd_id;
+
+    private  Long pd_puid;
+
+    private String pd_code;
+
+    private Integer pd_detno;
+
+    private Integer pd_prodid;
+
+    private String pd_prodcode;
+
+    private String pd_unit;
+
+    private Double pd_qty;
+
+    private Double pd_price;
+
+    private Double pd_taxprice;
+
+    private Double pd_total;
+
+    private Double pd_taxrate;
+
+    private Double pd_taxtotal;
+
+    private Double pd_acceptqty;
+
+    private Date pd_delivery;
+
+    private String pd_salecode;
+
+    private Integer pd_saledetno;
+
+    private Integer pd_sdid;
+
+    private String pd_text1;
+
+    private String pd_text2;
+
+    private String pd_text3;
+
+    private String pd_text4;
+
+    private String pd_text5;
+
+    private Double pd_yqty;
+
+    private String pd_remark;
+
+    private String pd_ordercode;
+
+    //private ProductDTO productDTO;
+    private Long pr_id;
+    private String pr_code;
+    private String pr_detail;
+    private String pr_spec;
+    private String pr_unit;
+    private String pr_kind;
+    private String pr_orispeccode;
+    private long pr_whid;
+    private String pr_whcode;
+    private String pr_whname;
+    private long pr_zxbzs;
+    private long pr_leadtime;
+    private String pr_brand;
+    private String pr_standardprice;
+    private String pr_purcprice;
+    private String pr_saleprice;
+    private long pr_vendid;
+    private String pr_vendname;
+    private String pr_vendcode;
+    private Date pr_docdate;
+    private long pr_recordmanid;
+    private String pr_recordman;
+    private String pr_status;
+    private String pr_statuscode;
+    private String pr_text1;
+    private String pr_text2;
+    private String pr_text3;
+    private String pr_text4;
+}

+ 7 - 1
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java

@@ -186,7 +186,13 @@ public class SaleController {
        return Result.success();
     }
 
-    @GetMapping("/test")
+    @PostMapping("/saleTurnPurchase/{id}")
+    public Result saleTurnPurchase(@PathVariable("id") Long id){
+        DocBaseDTO baseDTO = saleService.saleTurnPurchase(id);
+        return Result.success(baseDTO);
+    }
+
+  @GetMapping("/test")
     public String test() {
         return "配置构建success-1";
     }

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

@@ -2,6 +2,8 @@ package com.usoftchina.saas.sale.mapper;
 
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.sale.dto.PurchaseDTO;
+import com.usoftchina.saas.sale.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.sale.po.Sale;
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
@@ -42,4 +44,10 @@ public interface SaleMapper extends CommonBaseMapper<Sale> {
     Integer checkSendStatus(Long id);
 
     void updateCreator(@Param("userId") Long userId, @Param("userName") String userName, @Param("id") Long id);
+
+    void turnPurchase(PurchaseDTO purchase);
+
+    void turnPurchaseDetail(List<PurchaseDetailDTO> list);
+
+    Integer selectPurchaseId(@Param("code") String code,@Param("companyid") Long companyid);
 }

+ 6 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java

@@ -67,6 +67,10 @@ public class SaleList implements Serializable {
 
     private String sa_text5;
 
+    private String creatorname;
+
+    private String sa_auditman;
+
     private Integer sd_id;
 
     private Integer sd_said;
@@ -106,6 +110,8 @@ public class SaleList implements Serializable {
     private String sd_text4;
 
     private String sd_text5;
+    //已转数
+    private Double sd_yqty;
 
     //private ProductDTO productDTO;级联属性会导致分页查询出现BUG,设置数与查询数量不一致
     private Long pr_id;

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/report/SaleProfitView.java

@@ -56,4 +56,6 @@ public class SaleProfitView {
     private String pd_remark;
 
     private Double pd_profitpresent;
+
+    private Double pw_costprice;
 }

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java

@@ -44,4 +44,6 @@ public interface SaleService {
     void batchClose(BatchDealBaseDTO baseDTOs);
 
     void batchOpen(BatchDealBaseDTO baseDTOs);
+
+    DocBaseDTO saleTurnPurchase(Long id);
 }

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

@@ -481,7 +481,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         setTotal(targetPi);
 
         //日志记录
-        DocBaseDTO baseDTO = new DocBaseDTO(pi_id, piInoutno, BillCodeSeq.SALEIN.getName());
+        DocBaseDTO baseDTO = new DocBaseDTO(id, sourcePi.getPi_inoutno(), BillCodeSeq.SALEIN.getCaller());
         messageLogService.customizeLog(baseDTO, Operation.TURNPRODOUTRETURN);
         return baseDTO;
 

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

@@ -2,6 +2,7 @@ package com.usoftchina.saas.sale.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.CommonService;
 import com.usoftchina.saas.commons.api.MaxnumberService;
@@ -14,12 +15,11 @@ import com.usoftchina.saas.commons.po.BillCodeSeq;
 import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.entities.Product;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
-import com.usoftchina.saas.sale.dto.SaleDTO;
-import com.usoftchina.saas.sale.dto.SaleDetailDTO;
-import com.usoftchina.saas.sale.dto.SaleFormDTO;
+import com.usoftchina.saas.sale.dto.*;
 import com.usoftchina.saas.sale.mapper.*;
 import com.usoftchina.saas.sale.po.Sale;
 import com.usoftchina.saas.sale.po.SaleDetail;
@@ -492,7 +492,7 @@ public class SaleServiceImpl implements SaleService{
         prodIODetailMapper.updatePDSaleOut(pi_id);
         prodInOutMapper.updatePiTotal(pi_id);
         //日志记录
-        DocBaseDTO baseDTO = new DocBaseDTO(pi_id, pi_inoutno, BillCodeSeq.SALEOUT.getName());
+        DocBaseDTO baseDTO = new DocBaseDTO(id, sale.getSa_code(), BillCodeSeq.SALEOUT.getCaller());
         messageLogService.customizeLog(baseDTO, Operation.TURNPRODOUT);
         return baseDTO;
     }
@@ -524,6 +524,61 @@ public class SaleServiceImpl implements SaleService{
 
     }
 
+    @Override
+    public DocBaseDTO saleTurnPurchase(Long id) {
+        Sale sale = saleMapper.selectByPrimaryKey(id);
+        List<SaleList> dateilList = saleListMapper.selectSaleListByCondition("sa_id="+id,BaseContextHolder.getCompanyId());
+
+        PurchaseDTO purchase = new PurchaseDTO();
+        List<PurchaseDetailDTO> listPurchaseDetail = new ArrayList<PurchaseDetailDTO>();
+
+        //销售主表转采购主表
+        Result<String> result = maxnumberService.getMaxnumber(BillCodeSeq.PURCHASE.getCaller(),false);
+        purchase.setPu_code(result.getData());
+        purchase.setPu_status(Status.UNAUDITED.getDisplay());
+        purchase.setPu_statuscode(Status.UNAUDITED.toString());
+        purchase.setCompanyId(BaseContextHolder.getCompanyId());
+        purchase.setCreatorId(BaseContextHolder.getUserId());
+        purchase.setCreateTime(new Date());
+        purchase.setCreatorName(BaseContextHolder.getUserName());
+        saleMapper.turnPurchase(purchase);
+
+        Long purchaseId = purchase.getId();
+        for (SaleList detail : dateilList){
+            PurchaseDetailDTO purchaseDetailDTO = new PurchaseDetailDTO();
+            Double taxPrice = detail.getPr_purcprice()==null?new Double(0):Double.valueOf(detail.getPr_purcprice());
+            Double taxrate = detail.getSd_taxrate()==null?new Double(0):detail.getSd_taxrate();
+            Double qty = detail.getSd_qty()==null?new Double(0):detail.getSd_qty();
+            purchaseDetailDTO.setPd_prodid(Long.valueOf(String.valueOf(detail.getSd_prodid())));
+            purchaseDetailDTO.setPd_prodcode(detail.getSd_prodcode());
+            purchaseDetailDTO.setPd_detno(detail.getSd_detno());
+            purchaseDetailDTO.setPd_qty(detail.getSd_qty());
+            purchaseDetailDTO.setPd_price(taxPrice/(1+taxrate));
+            purchaseDetailDTO.setPd_salecode(sale.getSa_code());
+            purchaseDetailDTO.setPd_saledetno(detail.getSd_detno());
+            purchaseDetailDTO.setPd_taxrate(taxrate);
+            purchaseDetailDTO.setPd_taxprice(taxPrice);
+            purchaseDetailDTO.setPd_taxtotal(taxPrice*qty);
+            purchaseDetailDTO.setCompanyId(BaseContextHolder.getCompanyId());
+            purchaseDetailDTO.setCreatorId(BaseContextHolder.getUserId());
+            purchaseDetailDTO.setCreateTime(new Date());
+            purchaseDetailDTO.setCreatorName(BaseContextHolder.getUserName());
+            purchaseDetailDTO.setPd_puid(purchaseId);
+            purchaseDetailDTO.setPd_code(result.getData());
+            listPurchaseDetail.add(purchaseDetailDTO);
+        }
+
+        saleMapper.turnPurchaseDetail(listPurchaseDetail);
+
+
+
+        DocBaseDTO baseDTO = new DocBaseDTO();
+        baseDTO.setCode(result.getData());
+        baseDTO.setId(Long.valueOf(String.valueOf(purchaseId)));
+        baseDTO.setName(BillCodeSeq.PURCHASE.getName());
+        return baseDTO;
+    }
+
     //更新最新销售总额
     private void updateTotal(Long id) {
         if (null == id) {

+ 7 - 0
applications/sale/sale-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -752,6 +752,13 @@
     where pd_piid=#{id} order by pd_pdno
   </select>
 
+  <update id="updateSaleYqty" parameterType="long">
+    update saledetail a set a.sd_yqty =IFNULL( ( select b.pd_outqty from (
+    select pd_sdid,sum(pd_outqty) pd_outqty from prodiodetail left join
+    prodinout on pd_piid = pi_id where pd_piclass='出货单' and pi_said=#{id}
+    GROUP BY pd_sdid) b where IFNULL(b.pd_sdid ,0) = a.sd_id ),0) where a.sd_said =#{id}
+  </update>
+
   <update id="updatePDSaleIN" parameterType="long">
    update prodiodetail set
    pd_ordertotal=round(IFNULL(pd_inqty,0)*IFNULL(pd_sendprice,0),2),

+ 3 - 0
applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml

@@ -19,6 +19,8 @@
         <result column="sa_printstatuscode" property="sa_printstatuscode" jdbcType="VARCHAR" />
         <result column="sa_recorderid" property="sa_recorderid" jdbcType="INTEGER" />
         <result column="sa_recorder" property="sa_recorder" jdbcType="VARCHAR" />
+        <result column="creatorname" property="creatorname" jdbcType="VARCHAR" />
+        <result column="sa_auditman" property="sa_auditman" jdbcType="VARCHAR" />
         <result column="sa_recorddate" property="sa_recorddate" jdbcType="TIMESTAMP" />
         <result column="companyid" property="companyid" jdbcType="INTEGER" />
         <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
@@ -42,6 +44,7 @@
         <result column="sd_nettotal" property="sd_nettotal" jdbcType="DOUBLE" />
         <result column="sd_delivery" property="sd_delivery" jdbcType="TIMESTAMP" />
         <result column="sd_sendqty" property="sd_sendqty" jdbcType="DOUBLE" />
+        <result column="sd_yqty" property="sd_yqty" jdbcType="DOUBLE" />
         <result column="sd_pdqty" property="sd_pdqty" jdbcType="DOUBLE" />
         <result column="sd_remark" property="sd_remark" jdbcType="VARCHAR" />
         <result column="sd_text1" property="sd_text1" jdbcType="VARCHAR" />

+ 242 - 0
applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml

@@ -421,4 +421,246 @@
   <update id="updateCreator">
     update sale set creatorId = #{userId} , creatorName=#{userName} where sa_id=#{id}
   </update>
+  
+  
+  
+  <!-- 销售订单转采购单-->
+  <insert id="turnPurchase" parameterType="com.usoftchina.saas.sale.dto.PurchaseDTO" >
+    <selectKey resultType="java.lang.Long" keyProperty="id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into purchase
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="pu_code != null" >
+        pu_code,
+      </if>
+      <if test="pu_date != null" >
+        pu_date,
+      </if>
+      <if test="pu_vendid != null" >
+        pu_vendid,
+      </if>
+      <if test="pu_vendcode != null" >
+        PU_VENDCODE,
+      </if>
+      <if test="pu_vendname != null" >
+        PU_VENDNAME,
+      </if>
+      <if test="pu_buyerid != null" >
+        PU_BUYERID,
+      </if>
+      <if test="pu_buyercode != null" >
+        PU_BUYERCODE,
+      </if>
+      <if test="pu_buyername != null" >
+        PU_BUYERNAME,
+      </if>
+      <if test="pu_delivery != null" >
+        PU_DELIVERY,
+      </if>
+      <if test="pu_taxtotal != null" >
+        PU_TAXTOTAL,
+      </if>
+      <if test="pu_total != null" >
+        PU_TOTAL,
+      </if>
+      <if test="pu_remark != null" >
+        PU_REMARK,
+      </if>
+      <if test="pu_totalupper != null" >
+        PU_TOTALUPPER,
+      </if>
+      <if test="pu_printstatus != null" >
+        PU_PRINTSTATUS,
+      </if>
+      <if test="pu_printstatuscode != null" >
+        PU_PRINTSTATUSCODE,
+      </if>
+      <if test="pu_acceptstatuscode != null" >
+        PU_ACCEPTSTATUSCODE,
+      </if>
+      <if test="pu_acceptstatus != null" >
+        PU_ACCEPTSTATUS,
+      </if>
+      <if test="pu_statuscode != null" >
+        PU_STATUSCODE,
+      </if>
+      <if test="pu_status != null" >
+        PU_STATUS,
+      </if>
+      <if test="companyId != null" >
+        companyid,
+      </if>
+      <if test="updaterId != null" >
+        updaterId,
+      </if>
+      <if test="updaterName != null" >
+        updaterName,
+      </if>
+      <if test="updateTime != null" >
+        updateTime,
+      </if>
+      <if test="creatorId != null" >
+        creatorId,
+      </if>
+      <if test="creatorName != null" >
+        creatorName,
+      </if>
+      <if test="createTime != null" >
+        createTime,
+      </if>
+      <if test="pu_text1 != null" >
+        pu_text1,
+      </if>
+      <if test="pu_text2 != null" >
+        pu_text2,
+      </if>
+      <if test="pu_text3 != null" >
+        pu_text3,
+      </if>
+      <if test="pu_text4 != null" >
+        pu_text4,
+      </if>
+      <if test="pu_text5 != null" >
+        pu_text5,
+      </if>
+      <if test="pu_shipaddresscode != null" >
+        PU_SHIPADDRESSCODE,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="pu_code != null" >
+        #{pu_code,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_date != null" >
+        #{pu_date,jdbcType=TIMESTAMP},
+      </if>
+      <if test="pu_vendid != null" >
+        #{pu_vendid,jdbcType=INTEGER},
+      </if>
+      <if test="pu_vendcode != null" >
+        #{pu_vendcode,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_vendname != null" >
+        #{pu_vendname,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_buyerid != null" >
+        #{pu_buyerid,jdbcType=INTEGER},
+      </if>
+      <if test="pu_buyercode != null" >
+        #{pu_buyercode,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_buyername != null" >
+        #{pu_buyername,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_delivery != null" >
+        #{pu_delivery,jdbcType=TIMESTAMP},
+      </if>
+      <if test="pu_taxtotal != null" >
+        #{pu_taxtotal,jdbcType=DOUBLE},
+      </if>
+      <if test="pu_total != null" >
+        #{pu_total,jdbcType=DOUBLE},
+      </if>
+      <if test="pu_remark != null" >
+        #{pu_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_totalupper != null" >
+        #{pu_totalupper,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_printstatus != null" >
+        #{pu_printstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_printstatuscode != null" >
+        #{pu_printstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_acceptstatuscode != null" >
+        #{pu_acceptstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_acceptstatus != null" >
+        #{pu_acceptstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_statuscode != null" >
+        #{pu_statuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_status != null" >
+        #{pu_status,jdbcType=VARCHAR},
+      </if>
+      <if test="companyId != null" >
+        #{companyId,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null" >
+        #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updaterName != null" >
+        #{updaterName,jdbcType=VARCHAR},
+      </if>
+      <if test="updateTime != null" >
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creatorId != null" >
+        #{creatorId,jdbcType=INTEGER},
+      </if>
+      <if test="creatorName != null" >
+        #{creatorName,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null" >
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="pu_text1 != null" >
+        #{pu_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_text2 != null" >
+        #{pu_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_text3 != null" >
+        #{pu_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_text4 != null" >
+        #{pu_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_text5 != null" >
+        #{pu_text5,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_shipaddresscode != null" >
+        #{pu_shipaddresscode,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+
+  <insert id="turnPurchaseDetail" parameterType="java.util.List" >
+    insert into purchasedetail ( PD_PUID, PD_CODE,
+    PD_DETNO, PD_PRODID, PD_PRODCODE,
+    PD_UNIT, PD_QTY, PD_PRICE,PD_TAXPRICE,
+    PD_TOTAL,PD_TAXRATE, PD_TAXTOTAL, PD_ACCEPTQTY,
+    PD_DELIVERY, PD_SALECODE, PD_SALEDETNO,
+    PD_SDID, companyId, updaterId,
+    updateTime, pd_text1, pd_text2,
+    pd_text3, pd_text4, pd_text5,
+    pd_yqty,pd_remark)
+    values
+    <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+      (
+      #{item.pd_puid,jdbcType=INTEGER}, #{item.pd_code,jdbcType=VARCHAR},
+      #{item.pd_detno,jdbcType=INTEGER}, #{item.pd_prodid,jdbcType=INTEGER}, #{item.pd_prodcode,jdbcType=VARCHAR},
+      #{item.pd_unit,jdbcType=VARCHAR}, #{item.pd_qty,jdbcType=DOUBLE}, #{item.pd_price,jdbcType=DOUBLE},#{item.pd_taxprice,jdbcType=DOUBLE},
+      #{item.pd_total,jdbcType=DOUBLE},#{item.pd_taxrate,jdbcType=DOUBLE}, #{item.pd_taxtotal,jdbcType=DOUBLE}, #{item.pd_acceptqty,jdbcType=DOUBLE},
+      #{item.pd_delivery,jdbcType=DOUBLE}, #{item.pd_salecode,jdbcType=VARCHAR}, #{item.pd_saledetno,jdbcType=INTEGER},
+      #{item.pd_sdid,jdbcType=INTEGER}, #{item.companyId,jdbcType=INTEGER}, #{item.updaterId,jdbcType=INTEGER},
+      #{item.updateTime,jdbcType=TIMESTAMP}, #{item.pd_text1,jdbcType=VARCHAR}, #{item.pd_text2,jdbcType=VARCHAR},
+      #{item.pd_text3,jdbcType=VARCHAR}, #{item.pd_text4,jdbcType=VARCHAR}, #{item.pd_text5,jdbcType=VARCHAR},
+      #{item.pd_yqty,jdbcType=DOUBLE}, #{item.pd_remark,jdbcType=VARCHAR}
+      )
+    </foreach>
+  </insert>
+  <select id="selectPurchaseId" resultType="int">
+    select pu_id from purchase where
+    <if test="code !=null">
+      pu_code=#{code}
+    </if> and
+    <if test="companyid !=null">
+      companyid=#{companyid}
+    </if>
+
+  </select>
 </mapper>

+ 1 - 0
applications/sale/sale-server/src/main/resources/mapper/SaleProfitViewMapper.xml

@@ -25,6 +25,7 @@
     <result column="pd_profitpresent" property="pd_profitpresent" jdbcType="DOUBLE" />
     <result column="companyid" property="companyid" jdbcType="INTEGER" />
       <result column="pd_remark" property="pd_remark" jdbcType="VARCHAR" />
+    <result column="pw_costprice" property="pw_costprice" jdbcType="DOUBLE" />
   </resultMap>
   <select id="selectByCondition" resultMap="BaseResultMap">
     select  *  from Sale_Profit_View

+ 2 - 1
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMapper.java

@@ -2,6 +2,7 @@ package com.usoftchina.saas.storage.mapper;
 
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.storage.po.Make;
+import com.usoftchina.saas.storage.po.ProdInOut;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -27,7 +28,7 @@ public interface MakeMapper extends CommonBaseMapper<Make> {
 
     Double getOnHand(@Param("prodid") Long prodid, @Param("whid") Integer whid, @Param("companyId") Long companyId);
 
-    String selectMakeInOutCode(@Param("code") String code, @Param("companyId") Long companyId, @Param("type") String type);
+    ProdInOut selectMakeInOutCode(@Param("code") String code, @Param("companyId") Long companyId, @Param("type") String type);
 
     void updateCreator(@Param("userId") Long userId,@Param("userName") String userName,@Param("id") Long ma_id);
 }

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

@@ -2,6 +2,7 @@ package com.usoftchina.saas.storage.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.CommonService;
 import com.usoftchina.saas.commons.api.MaxnumberService;
@@ -295,8 +296,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         String ma_statuscode = make.getMa_statuscode();
         if(StringUtils.isEmpty(ma_statuscode)||(!StringUtils.isEmpty(ma_statuscode)&&!ma_statuscode.equals(Status.UNAUDITED.name()))){
             throw  new BizException(BizExceptionCode.BIZ_AUDITED);
-        };
-
+        }
         //2.校验库存是否足够
         validStorage(makeListDTO);
         //3.生成  完工入库单和领料单 并 过账
@@ -347,12 +347,14 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * 2.过账
      * @param makeListDTO
      */
+
     @Transactional(rollbackFor = Exception.class)
     public void generateProdIO(MakeListDTO makeListDTO) {
         Make make = makeListDTO.getMain();
         Long ma_id = make.getId();
         List<MakeMaterial> items = makeListDTO.getItems();
-
+        Result res = null;
+        Object result =  null;
         if ("组装".equals(make.getMa_type())){
             /** 1.生产领料单 **/
             //a.主表
@@ -361,7 +363,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             String code = maxnumberService.getMaxnumber("MakeOut", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-//            prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
             prodInOut.setPi_auditman("");               //审核人
@@ -399,7 +400,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
                 prodIODetailList.add(prodIODetail);
             }
             prodIODetailMapper.batchInsert(prodIODetailList);
-
             //c.领料单过账
             Map<String, Object> map = new HashMap<String, Object>();
             map.put("inoutNo", code);
@@ -407,14 +407,14 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             map.put("commitid", BaseContextHolder.getUserId());
             map.put("companyId", BaseContextHolder.getCompanyId());
             map.put("result", null);
-            prodInOutMapper.post(map);
-            if (!StringUtils.isEmpty(map.get("result"))){
-                throw new BizException(76201, map.get("result").toString());
+            res = warehouseApi.post(map);
+            result =  res.getData();
+            if (!StringUtils.isEmpty(result)){
+                unPostPicking(make);
+                throw new BizException(76201, result.toString());
             }
-
             //重新获取更新后的工单
             make = getMapper().selectByPrimaryKey(ma_id);
-
             /** 2.完工入库单 **/
             //a.主表
             prodInOut = new ProdInOut();
@@ -422,7 +422,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             code = maxnumberService.getMaxnumber("MakeIn", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-//            prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
             prodInOut.setPi_auditman("");               //审核人
@@ -455,15 +454,17 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodIODetail.setCompanyId(BaseContextHolder.getCompanyId());    //公司ID
             prodIODetail.setPd_status(0);      //单据状态
             prodIODetailMapper.insertSelective(prodIODetail);
-
             map.put("inoutNo", code);
             map.put("class", "完工入库单");
             map.put("commitid", BaseContextHolder.getUserId());
             map.put("companyId", BaseContextHolder.getCompanyId());
             map.put("result", null);
-            prodInOutMapper.post(map);
-            if (!StringUtils.isEmpty(map.get("result"))){
-                throw new BizException(76201, map.get("result").toString());
+            res = warehouseApi.post(map);
+            result =  res.getData();
+            if (!StringUtils.isEmpty(result)){
+                unPostPicking(make);
+                unPostMakeIn(make);
+                throw new BizException(76201, result.toString());
             }
         }else if ("拆件".equals(make.getMa_type())){
             /** 1.拆件领料单 **/
@@ -473,8 +474,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             String code = maxnumberService.getMaxnumber("MakeOut", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
-//            prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
             prodInOut.setPi_auditman("");               //审核人
@@ -514,9 +513,11 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             map.put("commitid", BaseContextHolder.getUserId());
             map.put("companyId", BaseContextHolder.getCompanyId());
             map.put("result", null);
-            prodInOutMapper.post(map);
-            if (!StringUtils.isEmpty(map.get("result"))){
-                throw new BizException(76201, map.get("result").toString());
+            res = warehouseApi.post(map);
+            result =  res.getData();
+            if (!StringUtils.isEmpty(result)){
+                unPostPicking(make);
+                throw new BizException(76201, result.toString());
             }
 
             //重新获取更新后的工单
@@ -533,7 +534,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             code = maxnumberService.getMaxnumber("MakeIn", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-//            prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
             prodInOut.setPi_auditman("");               //审核人
@@ -578,9 +578,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             map.put("commitid", BaseContextHolder.getUserId());
             map.put("companyId", BaseContextHolder.getCompanyId());
             map.put("result", null);
-            prodInOutMapper.post(map);
-            if (!StringUtils.isEmpty(map.get("result"))){
-                throw new BizException(76202, map.get("result").toString());
+            res = warehouseApi.post(map);
+            result =  res.getData();
+            if (!StringUtils.isEmpty(result)){
+                unPostPicking(make);
+                unPostMakeIn(make);
+                throw new BizException(76202,result.toString());
             }
         }
     }
@@ -688,54 +691,93 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * 2.反过账
      * @param make
      */
-    @Transactional(rollbackFor = Exception.class)
     public void selectProdIO(Make make) {
+        unPostMakeIn(make);
+        unPostPicking(make);
+    }
+
+    /**
+     * 删除,反审核完工入库单
+     * @param make
+     */
+    @Transactional
+    public void unPostMakeIn(Make make){
         String code = make.getMa_code();
         String type = make.getMa_type();
-        String outCode="";
         Long companyId = BaseContextHolder.getCompanyId();
-        String inCode = getMapper().selectMakeInOutCode(code, companyId, "完工入库单");
-        if ("拆件".equals(type)){
-            outCode = getMapper().selectMakeInOutCode(code, companyId, "拆件领料单");
-        }else if ("组装".equals(type)){
-            outCode = getMapper().selectMakeInOutCode(code, companyId, "生产领料单");
-        }
-        Map<String, Object> map = new HashMap<String, Object>();
-        map.put("inoutNo", inCode);
-        map.put("class", "完工入库单");
-        map.put("commitid", BaseContextHolder.getUserId());
-        map.put("companyId", companyId);
-        map.put("result", null);
-        //完工入库单反过账
-        prodInOutMapper.unPost(map);
-        if(!StringUtils.isEmpty(map.get("result"))){
-            throw new BizException(76203, map.get("result").toString());
+        String inCode="";
+        ProdInOut prodInOut = null;
+        prodInOut = getMapper().selectMakeInOutCode(code, companyId, "完工入库单");
+        if (!StringUtils.isEmpty(prodInOut)){
+            String status = prodInOut.getPi_statuscode();
+            inCode = prodInOut.getPi_inoutno();
+            if ("AUDITED".equals(status)){
+                Map<String, Object> map = new HashMap<String, Object>();
+                map.put("inoutNo", inCode);
+                map.put("class", "完工入库单");
+                map.put("commitid", BaseContextHolder.getUserId());
+                map.put("companyId", companyId);
+                map.put("result", null);
+                //完工入库单反过账
+                Result res = warehouseApi.unPost(map);
+                Object result =  res.getData();
+                if (!StringUtils.isEmpty(result)){
+                    throw new BizException(76201, result.toString());
+                }
+            }
+            prodIODetailMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
+            prodInOutMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
         }
-        prodIODetailMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
-        prodInOutMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
-
+    }
 
+    /**
+     * 删除,反审核领料单
+     * @param make
+     */
+    @Transactional
+    public void unPostPicking(Make make){
+        String code = make.getMa_code();
+        String type = make.getMa_type();
+        Long companyId = BaseContextHolder.getCompanyId();
+        String outCode="";
+        ProdInOut prodInOut = null;
         if ("拆件".equals(type)){
-            map.put("class", "拆件领料单");
+            prodInOut = getMapper().selectMakeInOutCode(code, companyId, "拆件领料单");
         }else if ("组装".equals(type)){
-            map.put("class", "生产领料单");
-        }
-        map.put("inoutNo", outCode);
-        map.put("result", null);
-        //生产领料单/拆件领料反过账
-        prodInOutMapper.unPost(map);
-        if(!StringUtils.isEmpty(map.get("result"))){
-            throw new BizException(76204, map.get("result").toString());
+            prodInOut = getMapper().selectMakeInOutCode(code, companyId, "生产领料单");
         }
-        if ("拆件".equals(type)){
-            prodIODetailMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
-            prodInOutMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
-        }else if ("组装".equals(type)){
-            prodIODetailMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
-            prodInOutMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+        if (!StringUtils.isEmpty(prodInOut)){
+            String status = prodInOut.getPi_statuscode();
+            outCode = prodInOut.getPi_inoutno();
+            if ("AUDITED".equals(status)) {
+                Map<String, Object> map = new HashMap<String, Object>();
+                map.put("inoutNo", outCode);
+                if ("拆件".equals(type)){
+                    map.put("class", "拆件领料单");
+                }else if ("组装".equals(type)){
+                    map.put("class", "生产领料单");
+                }
+                map.put("commitid", BaseContextHolder.getUserId());
+                map.put("companyId", companyId);
+                map.put("result", null);
+                //生产领料单/拆件领料反过账
+                Result res = warehouseApi.unPost(map);
+                Object result =  res.getData();
+                if (!StringUtils.isEmpty(result)){
+                    throw new BizException(76201, result.toString());
+                }
+            }
+            if ("拆件".equals(type)){
+                prodIODetailMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
+                prodInOutMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
+            }else if ("组装".equals(type)){
+                prodIODetailMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+                prodInOutMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+            }
         }
     }
 
+
     /**
      * 构造日记记录对象
      * @param id

+ 56 - 2
applications/storage/storage-server/src/main/resources/mapper/MakeMapper.xml

@@ -37,6 +37,60 @@
     <result column="ma_text4" property="ma_text4" jdbcType="VARCHAR" />
     <result column="ma_text5" property="ma_text5" jdbcType="VARCHAR" />
   </resultMap>
+
+
+
+
+
+
+
+  <resultMap id="ResultMapWithBLOBs" type="com.usoftchina.saas.storage.po.ProdInOut">
+    <id column="pi_id" jdbcType="INTEGER" property="id" />
+    <result column="pi_inoutno" jdbcType="VARCHAR" property="pi_inoutno" />
+    <result column="pi_class" jdbcType="VARCHAR" property="pi_class" />
+    <result column="pi_date" jdbcType="TIMESTAMP" property="pi_date" />
+    <result column="pi_vendid" jdbcType="INTEGER" property="pi_vendid" />
+    <result column="pi_vendcode" jdbcType="VARCHAR" property="pi_vendcode" />
+    <result column="pi_vendname" jdbcType="VARCHAR" property="pi_vendname" />
+    <result column="pi_custid" jdbcType="INTEGER" property="pi_custid" />
+    <result column="pi_custcode" jdbcType="VARCHAR" property="pi_custcode" />
+    <result column="pi_custname" jdbcType="VARCHAR" property="pi_custname" />
+    <result column="pi_puid" jdbcType="INTEGER" property="pi_puid" />
+    <result column="pi_pucode" jdbcType="VARCHAR" property="pi_pucode" />
+    <result column="pi_said" jdbcType="INTEGER" property="pi_said" />
+    <result column="pi_sacode" jdbcType="VARCHAR" property="pi_sacode" />
+    <result column="pi_total" jdbcType="DOUBLE" property="pi_total" />
+    <result column="pi_recordmanid" jdbcType="INTEGER" property="pi_recordmanid" />
+    <result column="pi_recordman" jdbcType="VARCHAR" property="pi_recordman" />
+    <result column="pi_recorddate" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="pi_status" jdbcType="VARCHAR" property="pi_status" />
+    <result column="pi_statuscode" jdbcType="VARCHAR" property="pi_statuscode" />
+    <result column="pi_printstatus" jdbcType="VARCHAR" property="pi_printstatus" />
+    <result column="pi_printstatuscode" jdbcType="VARCHAR" property="pi_printstatuscode" />
+    <result column="companyid" property="companyId" jdbcType="BIGINT" />
+    <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
+    <result column="updaterName" jdbcType="VARCHAR" property="updaterName" />
+    <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
+    <result column="creatorid" property="creatorId" jdbcType="INTEGER"/>
+    <result column="creatorName" jdbcType="VARCHAR" property="creatorName" />
+    <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="pi_text1" jdbcType="VARCHAR" property="pi_text1" />
+    <result column="pi_text2" jdbcType="VARCHAR" property="pi_text2" />
+    <result column="pi_text3" jdbcType="VARCHAR" property="pi_text3" />
+    <result column="pi_text4" jdbcType="VARCHAR" property="pi_text4" />
+    <result column="pi_text5" jdbcType="VARCHAR" property="pi_text5" />
+    <result column="pi_auditdate" jdbcType="TIMESTAMP" property="pi_auditdate" />
+    <result column="pi_auditman" jdbcType="VARCHAR" property="pi_auditman" />
+    <result column="pi_remark" jdbcType="VARCHAR" property="pi_remark" />
+    <result column="pi_ioid" jdbcType="INTEGER" property="pi_ioid" />
+  </resultMap>
+
+
+
+
+
+
+
   <sql id="Base_Column_List" >
     ma_id, ma_code, ma_status, ma_statuscode, ma_type, ma_prodid, ma_prodcode, ma_proddetail, 
     ma_prodspec, ma_version, ma_produnit, ma_qty, ma_whid, ma_whcode, ma_whname, ma_recorddate,
@@ -439,8 +493,8 @@
         SELECT IFNULL(PW_ONHAND,0) FROM PRODUCTWH WHERE PW_PRODID=#{prodid} AND PW_WHID=#{whid} and COMPANYID=#{companyId}
     </select>
 
-    <select id="selectMakeInOutCode" resultType="string">
-        SELECT PI_INOUTNO FROM PRODINOUT WHERE COMPANYID=#{companyId} AND PI_MACODE=#{code} AND PI_CLASS=#{type}
+    <select id="selectMakeInOutCode" resultMap="ResultMapWithBLOBs">
+        SELECT * FROM PRODINOUT WHERE COMPANYID=#{companyId} AND PI_MACODE=#{code} AND PI_CLASS=#{type}
     </select>
 
   <update id="updateCreator">

+ 2 - 23
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java

@@ -108,33 +108,12 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
                     String classify = String.valueOf(map.get("classify"));
                     //角色有权限的,设置为true
                     setPowerValue(powerDTO, classify, true);
-                    setOtherPower(powerDTO, powerInfo.getGrougId(), id, otherPowerList);
                 }
+                //设置其他权限
+                setOtherPower(powerDTO, powerInfo.getGrougId(), id, otherPowerList);
             }
             powerDTOList.add(powerDTO);
         }
-
-        /*//查询所有模块
-        List<ResourceModule> modules = resourceModuleMapper.selectByAppId(BaseContextHolder.getAppId());
-        for (ResourceModule module : modules){
-            //查询所有分组
-            List<ResourceGroup> groups = resourceGroupMapper.selectByModuleId(module.getId());
-            for (ResourceGroup group : groups) {
-                PowerDTO powerDTO = new PowerDTO();
-                powerDTO.setGroupId(group.getId());
-                powerDTO.setModuleName(module.getName());
-                powerDTO.setGroupName(group.getName());
-                //赋值权限
-                for (Map<String, Object> map : classifyList){
-                    if (group.getId().equals(map.get("group_id"))){
-                        String classify = String.valueOf(map.get("classify"));
-                        setPowerValue(powerDTO, classify);
-                        setOtherPower(powerDTO, group.getId(), id, otherPowerList);
-                    }
-                }
-                powerDTOList.add(powerDTO);
-            }
-        }*/
         return powerDTOList;
     }
 

+ 2 - 2
base-servers/account/account-server/src/main/resources/mapper/AccountRoleMapper.xml

@@ -20,8 +20,8 @@
         SELECT a.id id,a.username,a.realname,a.email,a.mobile,GROUP_CONCAT(c.name) roleNames,GROUP_CONCAT(c.id) roleIds
         FROM ac_account a
         left join ac_account_company d on a.id = d.account_id
-        left join ac_account_role b on a.id=b.account_id
-        left join ac_role c  on b.role_id = c.id
+        left join ac_account_role b on a.id=b.account_id and d.company_id = b.company_id
+        left join ac_role c  on b.role_id = c.id and b.company_id = c.company_id
         <where>
             <if test="condition!=null">
                 ${condition}

+ 4 - 4
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java

@@ -21,7 +21,7 @@ import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
-import com.usoftchina.saas.server.error.ServletErrorUtils;
+import com.usoftchina.saas.server.web.ServletUtils;
 import com.usoftchina.saas.socket.api.SocketMessageApi;
 import com.usoftchina.saas.utils.BeanMapper;
 import com.usoftchina.saas.utils.CollectionUtils;
@@ -136,7 +136,7 @@ public class AuthController {
                     accountDTO = createAccountByCookieInfo(info);
                 } else {
                     logger.error(result.getMessage());
-                    ServletErrorUtils.writeJsonPMessage(response, callback, false);
+                    ServletUtils.writeJsonPMessage(response, callback, false);
                     return;
                 }
             } else {
@@ -147,7 +147,7 @@ public class AuthController {
                     Result updateResult = accountApi.update(BeanMapper.map(accountDTO, AccountUpdateDTO.class));
                     if (!updateResult.isSuccess()) {
                         logger.error(updateResult.getMessage());
-                        ServletErrorUtils.writeJsonPMessage(response, callback, false);
+                        ServletUtils.writeJsonPMessage(response, callback, false);
                         return;
                     }
                 }
@@ -170,7 +170,7 @@ public class AuthController {
                 socketMessageApi.sendToClient(clientId, "/sso/callback",
                         JsonUtils.toJsonString(new AuthDTO(tokenDTO, accountDTO)));
             }
-            ServletErrorUtils.writeJsonPMessage(response, callback, true);
+            ServletUtils.writeJsonPMessage(response, callback, true);
         }
     }
 

+ 0 - 28
framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ServletErrorUtils.java

@@ -50,32 +50,4 @@ public class ServletErrorUtils {
         writer.flush();
     }
 
-    public static void writeMessage(HttpServletResponse response, String text) throws IOException {
-        response.setContentType(MediaType.TEXT_HTML_VALUE);
-        response.setCharacterEncoding("UTF-8");
-        PrintWriter writer = response.getWriter();
-        writer.print(text);
-        writer.flush();
-    }
-
-    /**
-     * 输出jsonp
-     *
-     * @param response
-     * @param callbackFn
-     * @param success
-     * @throws IOException
-     */
-    public static void writeJsonPMessage(HttpServletResponse response, String callbackFn, boolean success) throws IOException {
-        response.setContentType(MediaType.TEXT_HTML_VALUE);
-        response.setCharacterEncoding("UTF-8");
-        PrintWriter writer = response.getWriter();
-        writer.print(buildJsonPMessage(callbackFn, success));
-        writer.flush();
-    }
-
-    public static String buildJsonPMessage(String callbackFn, boolean success) {
-        return String.format("%s({success:\"%s\"})", callbackFn, success ? 1 : 0);
-    }
-
 }

+ 41 - 0
framework/server-starter/src/main/java/com/usoftchina/saas/server/web/ServletUtils.java

@@ -0,0 +1,41 @@
+package com.usoftchina.saas.server.web;
+
+import org.springframework.http.MediaType;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author yingp
+ * @date 2018/11/19
+ */
+public class ServletUtils {
+    public static void writeMessage(HttpServletResponse response, String text) throws IOException {
+        response.setContentType(MediaType.TEXT_HTML_VALUE);
+        response.setCharacterEncoding("UTF-8");
+        PrintWriter writer = response.getWriter();
+        writer.print(text);
+        writer.flush();
+    }
+
+    /**
+     * 输出jsonp
+     *
+     * @param response
+     * @param callbackFn
+     * @param success
+     * @throws IOException
+     */
+    public static void writeJsonPMessage(HttpServletResponse response, String callbackFn, boolean success) throws IOException {
+        response.setContentType(MediaType.TEXT_HTML_VALUE);
+        response.setCharacterEncoding("UTF-8");
+        PrintWriter writer = response.getWriter();
+        writer.print(buildJsonPMessage(callbackFn, success));
+        writer.flush();
+    }
+
+    public static String buildJsonPMessage(String callbackFn, boolean success) {
+        return String.format("%s({success:\"%s\"})", callbackFn, success ? 1 : 0);
+    }
+}

+ 2 - 1
frontend/saas-web/Dockerfile

@@ -2,4 +2,5 @@ FROM hub.c.163.com/library/nginx
 MAINTAINER USOFTCHINA <yingp@usoftchina.com>
 RUN rm /etc/nginx/conf.d/default.conf
 ADD runtime/nginx/default.conf /etc/nginx/conf.d/
-COPY build/production/saas/ /usr/share/nginx/html/
+COPY build/production/saas/ /usr/share/nginx/html/
+COPY set-token.html /usr/share/nginx/html/

+ 1 - 1
frontend/saas-web/app.json

@@ -296,7 +296,7 @@
         },*/
         "compressor":null,
         "server": {
-            "basePath": "http://192.168.253.181:8560",
+            "basePath": "http://192.168.0.181:8560",
             "urlPattern": "^\/api\/"
         }
     },

+ 1 - 0
frontend/saas-web/app/view/auth/CompanyPicker.scss

@@ -18,6 +18,7 @@
         overflow: hidden;
         border-top: 1px solid transparent;
         cursor: pointer;
+        border-radius: 4px;
 
         img {
             margin-bottom: 10px;

+ 2 - 1
frontend/saas-web/app/view/auth/LoginController.js

@@ -65,7 +65,8 @@ Ext.define('saas.view.auth.LoginController', {
             })
             .then(function() {
                 view.isMasked() && view.unmask();
+                view.close();
                 view.ownerCt.destroy();
-            });        
+            });
     }
 });

+ 6 - 3
frontend/saas-web/app/view/core/base/BasePanel.js

@@ -28,7 +28,8 @@ Ext.define('saas.view.core.base.BasePanel', {
     searchField:[],
     gridColumns: [],
 
-    _deleteMsg: '是否删除所选单据?',
+    deleteMoreMsg: '确认删除所选单据?',
+    deleteOneMsg: '确认删除该单据?',
 
     initComponent: function() {
 
@@ -38,7 +39,8 @@ Ext.define('saas.view.core.base.BasePanel', {
         gridIdField = gridConfig.idField,
         gridCodeField = gridConfig.codeField,
         gridStatusCodeField = gridConfig.statusCodeField,
-        gridColumns = gridConfig.columns;
+        gridColumns = gridConfig.columns,
+        deleteMsg = gridConfig.deleteMsg;
 
         Ext.apply(me, {
             dockedItems: [{
@@ -65,7 +67,8 @@ Ext.define('saas.view.core.base.BasePanel', {
                 idField: gridIdField,
                 codeField: gridCodeField,
                 columns: gridColumns,
-                statusCodeField : gridStatusCodeField
+                statusCodeField : gridStatusCodeField,
+                deleteMsg: deleteMsg
             }]
         });
         me.callParent(arguments);

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

@@ -123,11 +123,17 @@ Ext.define('saas.view.core.base.GridPanel', {
                         text: '删除',
                         handler: function(){
                             var form = this.ownerCt.ownerCt.ownerCt;
-                            saas.util.BaseUtil.deleteWarn(form._deleteMsg,function(btn){
-                                if(btn == 'yes'){
-                                    me.onVastDeal(form._batchDeleteUrl);
-                                }
-                            });
+
+                            var data = me.getGridSelected(form._batchDeleteUrl);
+                            if(data && data.length > 0) {
+                                saas.util.BaseUtil.deleteWarn(form.deleteMoreMsg,function(btn){
+                                    if(btn == 'yes'){
+                                        me.onVastDeal(form._batchDeleteUrl);
+                                    }
+                                });
+                            }else {
+                                saas.util.BaseUtil.showToast('请至少选择一条明细');
+                            }
                         }
                     }, {
                         text: '刷新',
@@ -199,20 +205,25 @@ Ext.define('saas.view.core.base.GridPanel', {
                 //删除
                 var id = record.get('id');
                 if(id){
-                    saas.util.BaseUtil.request({
-                        url: form._deleteUrl+id,
-                        method: 'POST',
-                    })
-                    .then(function(localJson) {
-                        if(localJson.success){
-                            //解析参数
-                            saas.util.BaseUtil.showToast('删除成功');
-                            view.ownerCt.store.load();
+                    saas.util.BaseUtil.showConfirm('警告', form.deleteOneMsg)
+                    .then(function(yes) {
+                        if(yes == 'yes') {
+                            saas.util.BaseUtil.request({
+                                url: form._deleteUrl+id,
+                                method: 'POST',
+                            })
+                            .then(function(localJson) {
+                                if(localJson.success){
+                                    //解析参数
+                                    saas.util.BaseUtil.showToast('删除成功');
+                                    view.ownerCt.store.load();
+                                }
+                            })
+                            .catch(function(res) {
+                                console.error(res);
+                                saas.util.BaseUtil.showToast('删除失败: ' + res.message);
+                            });
                         }
-                    })
-                    .catch(function(res) {
-                        console.error(res);
-                        saas.util.BaseUtil.showToast('删除失败: ' + res.message);
                     });
                 }
             }

+ 3 - 0
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.scss

@@ -0,0 +1,3 @@
+.x-window-dbfind{
+    border:none;
+}

+ 34 - 44
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -6,6 +6,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
     displayField: 'dispaly',
     valueField: 'value',
     triggerCls: 'x-form-search-trigger',
+    cls:'x-window-dbfind',
     minChars:1, // 设置用户输入字符多少时触发查询
     tpl: '',
     enableKeyEvents:true,
@@ -308,49 +309,38 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
         return val;
     },
 
-    autoSetValue: function(data, dbfinds) {
-		var trigger = this;
-		var triggerV = null;
-		if (!trigger.ownerCt || trigger.column) { //如果是grid的dbfind
-			var grid = trigger.owner;
-			var record = grid.lastSelectedRecord || trigger.record || grid.getSelectionModel().selected.items[0] || grid.selModel.lastSelected; //detailgrid里面selected
-			Ext.Array.each(Ext.Object.getKeys(data),
-					function(k) {
-				Ext.Array.each(dbfinds,
-						function(ds) {
-					if (ds.trigger == trigger.name || Ext.isEmpty(ds.trigger)) {
-						if (Ext.Array.contains(ds.dbGridField.split(';'), k)) { //k == ds.dbGridField//支持多dbgrid的字段对应grid同一字段
-							if (ds.field == trigger.name) {
-								triggerV = data[k]; //trigger所在位置赋值
-							}
-							record.set(ds.field, data[k]);
-						}
-					}
-				});
-			});
-		} else {
-			var ff;
-			Ext.Array.each(Ext.Object.getKeys(data),
-					function(k) {
-				Ext.Array.each(dbfinds,
-						function(ds) {
-					if (k == ds.dbGridField) {
-							if (trigger.name == ds.field||trigger.name.substring(0,trigger.name.indexOf('-new'))==ds.field) {
-								triggerV = data[k];
-							} else {
-								ff = Ext.getCmp(ds.field);
-								if (ff && ff.setValue) ff.setValue(data[k]);
-							}
-					}
-				});
-			});
-		}
-		trigger.setValue(triggerV);
-		data.data = data;
-		trigger.lastTriggerValue='';
-		trigger.fireEvent('aftertrigger', trigger, data);
-		trigger.lastTriggerId = null;
-		trigger.lastQueryValue='';
+    autoSetValue: function(combo, record) {
+        var me = combo;
+        var dbfinds = me.dbfinds;
+        if(dbfinds&&dbfinds.length>0){
+            if(me.belong=='grid'){
+                for (let index = 0; index < dbfinds.length; index++) {
+                    var item = dbfinds[index];
+                    var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
+                    var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
+                    nowRec.set(item.to,record.get(item.from));
+                    if(me.name==item.to){
+                        me.column.getEditor().setValue(record.get(item.from));
+                    }
+                }
+            }else if(me.belong=='form'){
+                for (let index = 0; index < dbfinds.length; index++) {
+                    var item = dbfinds[index];
+                    var field = me.ownerCt.down('[name='+item.to+']');
+                    if(field){
+                        var val = record.get(item.from);
+                        if(field.xtype=='dbfindtrigger'){
+                            field.setRawValue(val);
+                            field.setValue(val);
+                            field.value = val;
+                            field.lastTriggerValue=val;
+                        }else{
+                            field.setValue(val);
+                        }    
+                    }
+                }
+            }
+            me.aftertrigger(me,record);
+        }
     }
-
 });

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

@@ -26,7 +26,7 @@ Ext.define('saas.view.core.dbfind.types.BankInfoDbfindTrigger', {
         text: "账户ID",
         flex: 0,
         dataIndex: "id",
-        width: 0,
+        hidden:true,
         xtype: ""
     }, {
         text: "资金账户",

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

@@ -31,7 +31,7 @@ Ext.define('saas.view.core.dbfind.types.CustomerDbfindTrigger', {
         conditionCode: 'id',
         text: "客户ID",
         dataIndex: "id",
-        width: 0,
+        hidden:true,
         xtype: "",
     }, {
         conditionCode: 'cu_code',

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

@@ -8,7 +8,7 @@ Ext.define('saas.view.core.dbfind.types.EmployeeDbfindTrigger', {
     //数据接口
     dataUrl:'/api/document/employee/list',
     addXtype: 'document-vendor-formpanel',
-    addTitle: '供应商资料',
+    addTitle: '人员资料',
     //联想设置
     dbtpls:[{
         field:'em_code',width:100
@@ -31,7 +31,7 @@ Ext.define('saas.view.core.dbfind.types.EmployeeDbfindTrigger', {
         text: "人员ID",
         hidden: true,
         dataIndex: "id",
-        width: 0,
+        hidden:true,
         xtype: "numbercolumn"
     },{
         text: "人员编号",

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

@@ -78,7 +78,7 @@ Ext.define('saas.view.core.dbfind.types.ProductMultiDbfindTrigger', {
         dataIndex: "pr_purcprice",
         align: 'end',
         xtype: 'numbercolumn',
-        width: 0,
+        hidden:true,
     }, {
         text: "仓库id",
         dataIndex: "pr_whid",

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

@@ -31,7 +31,7 @@ Ext.define('saas.view.core.dbfind.types.WarehouseDbfindTrigger', {
         text: "仓库ID",
         flex: 0,
         dataIndex: "id",
-        width: 0,
+        hidden:true,
         xtype: "",
     }, {
         text: "仓库编号",

+ 8 - 4
frontend/saas-web/app/view/core/form/DataMultiCombo.js

@@ -6,6 +6,7 @@ Ext.define('saas.view.core.form.DataMultiCombo', {
     alias: 'widget.datamulticombo',
     editable : false,
     matchFieldWidth: true,
+    autoScroll:true,
     value: [],
     cachedConfig: {
         menuAlign: 'tl-bl?',
@@ -123,9 +124,10 @@ Ext.define('saas.view.core.form.DataMultiCombo', {
     setValue: function(items) {
         var me = this, rawV = '',
         datas = me.datas,
-        menu = me.menu;
+        menu = me.menu,
+        items = items==null?[]:items;
         if(!Ext.isArray(items)) {
-            if(items.indexOf(',')>0){
+            if(items&&items.indexOf(',')>0){
                 items = items.split(',')
             }else{
                 items = [items]
@@ -183,8 +185,10 @@ Ext.define('saas.view.core.form.DataMultiCombo', {
     hideMenu: function(b) {
         if (this.hasVisibleMenu()) {
             var target=b.parentEvent.relatedTarget;
-            if(!((target.className && target.className.indexOf('x-menu')!=-1) || (target.name && target.name.indexOf(this.name)!=-1))){
-                this.menu.hide();
+            if(target){
+                if(!((target.className && target.className.indexOf('x-menu')!=-1) || (target.name && target.name.indexOf(this.name)!=-1))){
+                    this.menu.hide();
+                }
             }
         }
         return this;

+ 3 - 2
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -47,7 +47,7 @@ Ext.define('saas.view.core.form.FormPanel', {
     initComponent: function () {
         var me = this,
         auditTexts = me.auditTexts;
-
+        me._deleteMsg = '删除的'+me._title+'将不能恢复,请确认是否删除?';
         me.initViewModel();
         saas.util.FormUtil.setItems(me);
 
@@ -100,7 +100,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text:'打印',
             hidden: true,
             bind: {
-                // hidden: '{!id}'
+                hidden: '{!showPrintBtn || !id}'
             },
             handler:"onPrint"
         }, {
@@ -300,6 +300,7 @@ Ext.define('saas.view.core.form.FormPanel', {
                 detnoColumn = grid.detnoColumn,
                 store = detail.detailStore;
 
+            store.removeAll();
             if (detailData.length > 0) {
 
                 for(var j = 0; j < detailData.length; j++) {

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

@@ -368,6 +368,35 @@ Ext.define('saas.view.core.form.FormPanelController', {
     },
 
     onPrint: function() {
-        console.log('print');
+        var me = this,
+        form = me.getView(),
+        viewModel = me.getViewModel(),
+        caller = form.caller,
+        id = viewModel.get(form._idField);
+
+        saas.util.BaseUtil.request({
+            url: '/api/commons/jasperReport/printByDefault',
+            // url: 'http://192.168.253.58:8920/jasperReport/printByDefault',
+            method: 'POST',
+            headers: {
+                "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+            },
+            params: {
+                caller: caller,
+                id: id
+            }
+        }).then(function(res) {
+            var data = res.data,
+            printurl = data.printurl,
+            printtype = data.printtype,
+            reportName = data.reportName,
+            title = data.title,
+            whereCondition = data.whereCondition,
+            companyId = saas.util.BaseUtil.getCurrentUser().companyId;
+
+            var url = printurl + '?' + 'reportName=' + reportName + '&' + 'companyId=' + companyId + '&whereCondition=' + whereCondition
+
+            window.open(url);
+        });
     },
 });

+ 1 - 0
frontend/saas-web/app/view/core/form/FormPanelModel.js

@@ -11,6 +11,7 @@ Ext.define('saas.view.core.form.FormPanelModel', {
             codeEditable: false, // 单据编号是否可编辑
         },
         auditBtnText: '审核', // 审核按钮默认text
+        showPrintBtn: false, // 显示打印按钮
         showAuditBtn: true, // 显示审核、反审核按钮
         detailBindeFields: [], // 从表绑定列
         detailStore: null, // 从表store

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

@@ -37,7 +37,7 @@ Ext.define('saas.view.core.form.RemoteCombo', {
             picker;
         var count = this.store.getCount();
         var pickerCfg = Ext.apply({
-                height: count>5?150:30*count,
+                height: count>5?248-(me.hiddenBtn?50:0):(33*count+(me.hiddenBtn?0:50)),
                 hiddenBtn:me.hiddenBtn,
                 xtype: 'boundlistadd',
                 id: me.id + '-picker',

+ 4 - 1
frontend/saas-web/app/view/core/form/ConDateField.js → frontend/saas-web/app/view/core/form/field/ConDateField.js

@@ -1,7 +1,7 @@
 /**
  * Created by UAS30 on 2018/10/11.
  */
-Ext.define('saas.view.core.form.ConDateField', {
+Ext.define('saas.view.core.form.field.ConDateField', {
     extend: 'Ext.form.FieldContainer',
     alias: 'widget.condatefield',
     layout: 'hbox',
@@ -14,6 +14,9 @@ Ext.define('saas.view.core.form.ConDateField', {
     },
     columnWidth: 0.5,
     defaultBindProperty: 'value',
+
+    cls: 'x-condatefield',
+
     initComponent : function(){
         this.cls = (this.cls || '') + ' x-form-field-multi';
         this.callParent(arguments);

+ 37 - 14
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -4,6 +4,8 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
 
     cls: 'x-detailgridfield',
 
+    sortableColumns: false,
+    enableColumnHide: false,
     border: 1,
     margin: '0 0 10 0', // formpanel的fieldDefaults未生效
     height: 245,
@@ -223,23 +225,44 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         records = store.getData().items,
         selectedRecord = records.find(function(r) {
             return r.get(detnoColumn) == v;
-        }),
-        detno = 0;
+        });
+
+        store.each(function(item){
+            var t = item.data[detnoColumn];
+            if(t > v) {
+                item.set(detnoColumn, t + 1);
+            }
+        });
 
-        //当前行后序号全部加1
-        if(selectedRecord){
-            detno = selectedRecord.data[detnoColumn];
-            var store = me.store;
-            store.each(function(item){
-                var t = item.data[detnoColumn];
-                if(Number(t) > detno) {
-                    item.set(detnoColumn, Number(t) + 1);
-                }
-            });
-        }
         var data = d || {};
-        data[detnoColumn] = detno + 1;
+        data[detnoColumn] = v + 1;
         var r = store.insert(store.indexOf(selectedRecord) + 1, data);
+
+        store.each(function(s) {
+            var itemFields = s.fields,
+            itemData = s.getData(),
+            dirtyFields = [];
+
+            for(var x = 0; x < itemFields.length; x++) {
+                var field = itemFields[x],
+                name = field.name,
+                type = field.type;
+
+                if(type == 'int' && itemData[name] == 0) {
+                }else if(type == 'string' && itemData[name] == '') {
+                }else if(type == 'float' && itemData[name] == 0) {
+                }else if(type == 'date' && itemData[name] == null) {
+                }else {
+                    dirtyFields.push(name);
+                }
+            }
+
+            // 如果有有效数据(非ID和序号列)才算dirty,否则直接commit
+            if(dirtyFields.length == 2 && Ext.Array.contains(dirtyFields, 'id') && Ext.Array.contains(dirtyFields, detnoColumn)) {
+                s.commit()
+            }
+        });
+
         me.fireEvent('validChange');
         return r;
     },

+ 14 - 8
frontend/saas-web/app/view/core/query/QueryFormPanel.js

@@ -34,14 +34,20 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
 
     listeners: {
         beforerender: function(form) {
-            var fiels = form.getForm().getFields();
-            fiels.each(function(f) {
-                f.on && f.on({
-                    keydown: {
-                        fn: 'onQuery',
-                    }
-                });
-            });
+            // var fiels = form.getForm().getFields();
+            // fiels.each(function(f) {
+            //     console.log(f, f.on);
+            //     f.on && f.on({
+            //         keydown: {
+            //             // fn: 'onQuery',
+            //             fn: function(th, e, eOpts) {
+            //                 if(e.keyCode == 13) {
+            //                     form.up('core-query-querypanel').getController().onQuery()
+            //                 }
+            //             }
+            //         }
+            //     });
+            // });
         }
     }
 

+ 7 - 3
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -84,8 +84,11 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                                     saas.util.BaseUtil.showToast('请求超时');
                                 }
                             }else {
-                                console.error('exception: ', response.responseJson);
-                                saas.util.BaseUtil.showToast('请求错误:' + response.responseJson.message);
+                                if(response.timedout) {
+                                    saas.util.BaseUtil.showToast('请求超时');
+                                }else{
+                                    saas.util.BaseUtil.showToast('查询失败:' + response.responseJson.message);
+                                }
                             }
                         }
                     }
@@ -367,8 +370,9 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
     onDelete: function (btns) {
         var grid = btns.up('grid');
         var data = grid.getGridSelected();
+        var deleteMsg =grid.addTitle?"删除的"+grid.addTitle+"将不能恢复,请确认是否删除?":"是否删除所选单据?";
         if(data&&data.length>0){
-            saas.util.BaseUtil.warnMsg("是否删除所选单据?",function(btn){
+            saas.util.BaseUtil.warnMsg(deleteMsg,function(btn){
                 if(btn == 'yes'){
                     grid.vastOperation("batchDelete");
                 }

+ 0 - 5
frontend/saas-web/app/view/core/report/ReportPanel.js

@@ -226,11 +226,6 @@ Ext.define('saas.view.core.report.ReportPanel', {
                         condition: JSON.stringify(condition)
                     });
     
-                },
-                load: function(store, records, successful, operation, eOpts) {
-                    store.each(function(d, i) {
-                        d.set('id', d.get('id') + '-' + i);
-                    });
                 }
             }
         });

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

@@ -5,6 +5,8 @@ Ext.define('saas.view.document.bom.BasePanel', {
     controller: 'document-bom-basepanel',
     viewModel: 'document-bom-basepanel',
 
+    deleteMoreMsg: '删除的BOM资料将不能恢复,请确认是否删除?',
+    deleteOneMsg: '删除的BOM资料将不能恢复,请确认是否删除?',
     searchField:[{ 
         xtype : "textfield", 
         name : "bo_mothercode", 

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

@@ -19,7 +19,7 @@ Ext.define('saas.view.document.bom.FormPanel', {
     _closeUrl:'/api/document/bom/close',
     _deleteUrl:'/api/document/bom/delete/',
     initId:0,
-
+    _deleteMsg: '删除的BOM资料将不能恢复,请确认是否删除?',
     codeInHeader: false,
 
     defaultButtons:[{
@@ -55,7 +55,7 @@ Ext.define('saas.view.document.bom.FormPanel', {
         name: 'bo_motherid',
         fieldLabel: '产品id'
     },{
-        xtype : "bomDbfindTrigger", 
+        xtype : "productDbfindTrigger", 
         name: 'bo_mothercode',
         fieldLabel: '产品编号',
         allowBlank: false
@@ -196,12 +196,12 @@ Ext.define('saas.view.document.bom.FormPanel', {
         reddOnly:true
     },{  
         xtype : "textfield", 
-        name : "bo_recorder", 
+        name : "creatorName", 
         reddOnly:true,
         fieldLabel : "录入人"
     },{
         xtype : "datefield", 
-        name : "bo_recorddate", 
+        name : "createTime", 
         fieldLabel : "录入时间"
     }],
 

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

@@ -5,6 +5,9 @@ Ext.define('saas.view.document.customer.BasePanel', {
     controller: 'document-customer-basepanel',
     viewModel: 'document-customer-basepanel',
 
+    deleteMoreMsg: '删除的客户资料将不能恢复,请确认是否删除?',
+    deleteOneMsg: '删除的客户资料将不能恢复,请确认是否删除?',
+
     searchField:[{
         xtype:'customerDbfindTrigger',
         name : "cu_code", 

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