瀏覽代碼

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

hy 7 年之前
父節點
當前提交
f75d9a1d64
共有 100 個文件被更改,包括 911 次插入670 次删除
  1. 6 2
      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. 1 0
      applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties
  4. 3 3
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Bom.java
  5. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/AddressMapper.java
  6. 3 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BankinformationMapper.java
  7. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BomMapper.java
  8. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerkindMapper.java
  9. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java
  10. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java
  11. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java
  12. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorkindMapper.java
  13. 13 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/AddressServiceImpl.java
  14. 30 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BankinformationServiceImpl.java
  15. 19 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  16. 7 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  17. 13 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerkindServiceImpl.java
  18. 8 5
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  19. 15 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java
  20. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java
  21. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java
  22. 9 5
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  23. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorkindServiceImpl.java
  24. 11 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/WarehouseServiceImpl.java
  25. 3 0
      applications/document/document-server/src/main/resources/mapper/AddressMapper.xml
  26. 12 1
      applications/document/document-server/src/main/resources/mapper/BankinformationMapper.xml
  27. 3 0
      applications/document/document-server/src/main/resources/mapper/BomMapper.xml
  28. 3 3
      applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml
  29. 3 0
      applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml
  30. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  31. 3 0
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  32. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  33. 2 2
      applications/document/document-server/src/main/resources/mapper/VendorMapper.xml
  34. 3 0
      applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml
  35. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/FundtransferdetailMapper.java
  36. 19 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtransferdetail.java
  37. 8 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  38. 43 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  39. 12 3
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  40. 8 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  41. 10 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  42. 2 0
      applications/money/money-server/src/main/resources/mapper/FundtransferMapper.xml
  43. 15 0
      applications/money/money-server/src/main/resources/mapper/FundtransferdetailMapper.xml
  44. 2 0
      applications/money/money-server/src/main/resources/mapper/OthreceiptsMapper.xml
  45. 2 0
      applications/money/money-server/src/main/resources/mapper/OthspendingsMapper.xml
  46. 6 0
      applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml
  47. 1 1
      applications/money/money-server/src/main/resources/mapper/PaybalancedetMapper.xml
  48. 6 0
      applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml
  49. 1 1
      applications/money/money-server/src/main/resources/mapper/RecbalancedetMapper.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. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java
  54. 1 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  55. 4 4
      applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml
  56. 2 1
      base-servers/account/account-server/src/main/resources/mapper/AccountRoleMapper.xml
  57. 4 4
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  58. 11 0
      framework/core/src/main/java/com/usoftchina/saas/utils/RegexpUtils.java
  59. 0 28
      framework/server-starter/src/main/java/com/usoftchina/saas/server/error/ServletErrorUtils.java
  60. 41 0
      framework/server-starter/src/main/java/com/usoftchina/saas/server/web/ServletUtils.java
  61. 17 2
      frontend/saas-portal-web/config/env.js
  62. 10 10
      frontend/saas-portal-web/src/css/main.css
  63. 17 298
      frontend/saas-portal-web/src/index.html
  64. 128 185
      frontend/saas-portal-web/src/js/main.js
  65. 1 0
      frontend/saas-portal-web/src/js/sockjs.min.js
  66. 7 0
      frontend/saas-portal-web/src/js/stomp.min.js
  67. 2 1
      frontend/saas-web/Dockerfile
  68. 15 15
      frontend/saas-web/app.json
  69. 6 3
      frontend/saas-web/app/view/core/base/BasePanel.js
  70. 29 18
      frontend/saas-web/app/view/core/base/GridPanel.js
  71. 8 6
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js
  72. 17 9
      frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js
  73. 3 3
      frontend/saas-web/app/view/core/dbfind/types/VendorDbfindTrigger.js
  74. 79 1
      frontend/saas-web/app/view/core/dbfind/types/WarehouseDbfindTrigger.js
  75. 1 1
      frontend/saas-web/app/view/core/form/FormPanel.js
  76. 30 1
      frontend/saas-web/app/view/core/form/FormPanelController.js
  77. 1 0
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  78. 15 2
      frontend/saas-web/app/view/core/query/QueryFormPanel.js
  79. 1 1
      frontend/saas-web/app/view/core/query/QueryPanelController.js
  80. 3 0
      frontend/saas-web/app/view/document/customer/BasePanel.js
  81. 2 2
      frontend/saas-web/app/view/document/kind/ChildForm.js
  82. 5 1
      frontend/saas-web/app/view/document/product/FormPanel.js
  83. 1 0
      frontend/saas-web/app/view/money/othreceipts/FormPanel.js
  84. 3 0
      frontend/saas-web/app/view/money/othreceipts/FormPanelModel.js
  85. 1 0
      frontend/saas-web/app/view/money/othreceipts/QueryPanel.js
  86. 2 1
      frontend/saas-web/app/view/money/othspendings/FormPanel.js
  87. 3 0
      frontend/saas-web/app/view/money/othspendings/FormPanelModel.js
  88. 1 0
      frontend/saas-web/app/view/money/othspendings/QueryPanel.js
  89. 4 0
      frontend/saas-web/app/view/money/payBalance/FormPanelModel.js
  90. 1 1
      frontend/saas-web/app/view/money/recBalance/FormPanelController.js
  91. 3 0
      frontend/saas-web/app/view/purchase/purchase/FormPanelModel.js
  92. 5 4
      frontend/saas-web/app/view/purchase/purchase/QueryPanel.js
  93. 10 8
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanelModel.js
  94. 1 8
      frontend/saas-web/app/view/purchase/purchaseIn/QueryPanel.js
  95. 4 3
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanelModel.js
  96. 1 1
      frontend/saas-web/app/view/purchase/report/Purchase.js
  97. 4 0
      frontend/saas-web/app/view/sale/sale/FormPanelModel.js
  98. 6 3
      frontend/saas-web/app/view/sale/sale/QueryPanel.js
  99. 4 0
      frontend/saas-web/app/view/sale/saleIn/FormPanelModel.js
  100. 4 0
      frontend/saas-web/app/view/sale/saleOut/FormPanelModel.js

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

@@ -39,12 +39,16 @@ public enum BizExceptionCode implements BaseExceptionCode {
     REPEAT_TEL(79504, "电话号码重复"),
     NO_DATA(79998, "未找到数据"),
     ILLEGAL_ID(79999, "id不正确"),
-    PRODUCT_HAS_WAREHOUSE(79502, "存在物料默认仓库资料为该仓库资料,无法删除"),
+    PRODUCT_HAS_WAREHOUSE(79502, "存在物料默认仓库资料为该仓库,无法删除"),
+    CLOSE_WAREHOUSE(79506, "存在物料默认仓库资料为该仓库,无法关闭"),
     PRODUCTWH_HAS_WAREHOUSE(79503, "该仓库资料存在库存,无法删除"),
-    ACCOUNT_EXISTS(79503, "账号已存在"),
+    ACCOUNT_EXISTS(79505, "账号已存在"),
     DEAL_FAILED(79800, "编号:<u>%s</u>处理失败,%s"),
     USING_EXISTS(79504, ""),
 
+    VENDOR_ISCLOSE(79505, "供应商已关闭"),
+    PRODUCT_ISCLOSE(79506, "物料已关闭"),
+    CUSTOMER_ISCLOSE(79507, "客户资料已关闭"),
 
 
     //采购 70000-71999

+ 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"),
+
     /**
      * 记账
      */

+ 1 - 0
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

+ 3 - 3
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Bom.java

@@ -7,7 +7,7 @@ import java.io.Serializable;
 import java.util.Date;
 
 public class Bom extends CommonBaseEntity implements Serializable {
-    private Integer bo_motherid;
+    private Long bo_motherid;
 
     private String bo_mothercode;
 
@@ -75,11 +75,11 @@ public class Bom extends CommonBaseEntity implements Serializable {
         this.pr_orispeccode = pr_orispeccode;
     }
 
-    public Integer getBo_motherid() {
+    public Long getBo_motherid() {
         return bo_motherid;
     }
 
-    public void setBo_motherid(Integer bo_motherid) {
+    public void setBo_motherid(Long bo_motherid) {
         this.bo_motherid = bo_motherid;
     }
 

+ 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);
 }

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

@@ -6,6 +6,7 @@ import com.usoftchina.saas.document.entities.Bankinformation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface BankinformationMapper extends CommonBaseMapper<Bankinformation> {
     int deleteByPrimaryKey(Integer bkId);
@@ -26,4 +27,6 @@ public interface BankinformationMapper extends CommonBaseMapper<Bankinformation>
     String selectBankcode(String bk_bankcode);
     Long selectBankId(String bk_bankcode);
 
+    void check(Map<String, Object> map);
+
 }

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

@@ -26,4 +26,6 @@ public interface BomMapper extends CommonBaseMapper<Bom> {
     int validateCodeWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("companyId") Long company);
 
     List<Bom> getListData(@Param("condition") String condition, @Param("companyId") Long companyId);
+
+    int getCountFromMake(Long id);
 }

+ 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);
 }

+ 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

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

@@ -3,7 +3,9 @@ package com.usoftchina.saas.document.service.impl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.api.MessageLogService;
 import com.usoftchina.saas.commons.dto.ComboDTO;
+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.context.BaseContextHolder;
@@ -22,7 +24,9 @@ import org.springframework.util.StringUtils;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author heqw
@@ -34,12 +38,13 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
     private BankinformationMapper bankinformationMapper;
     @Autowired
     private BanksubledgerMapper banksubledgerMapper;
+    @Autowired
+    private MessageLogService messageLogService;
 
     @Transactional
     @Override
     public boolean save(Bankinformation bankinformation){
         bankinformation.setCompanyId(BaseContextHolder.getCompanyId());
-        bankinformation.setBk_thisamount(bankinformation.getBk_beginamount());
         bankinformation.setBk_income(new Double(0));
         bankinformation.setBk_spending(new Double(0));
 
@@ -50,10 +55,11 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
             if (bktion != null){
                 throw new BizException(500, BizExceptionCode.ACCOUNT_EXISTS.getMessage());
             }
+            bankinformation.setBk_thisamount(bankinformation.getBk_beginamount());
             bankinformationMapper.insertSelective(bankinformation);
         }else {
+            Long id = bankinformationMapper.selectBankId(bankinformation.getBk_bankcode());
             if (bktion != null){
-                Long id = bankinformationMapper.selectBankId(bankinformation.getBk_bankcode());
                 if (id.equals(bankinformation.getId())){
                     bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
                 }else {
@@ -101,11 +107,31 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
     @Transactional
     @Override
     public boolean removeByPrimaryKey(int id){
-        bankinformationMapper.deleteByPrimaryKey(id);
-        banksubledgerMapper.deleteByBankid(id);
+        DocBaseDTO docBaseDTO = getBaseDTOById(id);
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("v_id",id);
+        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());
+        }else {
+            bankinformationMapper.deleteByPrimaryKey(id);
+            banksubledgerMapper.deleteByBankid(id);
+            //日志
+            messageLogService.delete(docBaseDTO);
+        }
         return true;
     }
 
+    private DocBaseDTO getBaseDTOById(int id) {
+        String code = bankinformationMapper.selectByPrimaryKey(id).getBk_bankcode();
+        DocBaseDTO baseDTO = new DocBaseDTO(Long.valueOf(String.valueOf(id)), code, "BankInformation");
+        return baseDTO;
+    }
     @Override
     public PageInfo<Bankinformation> selectList(PageRequest page, ListReqDTO condition) {
         //设置默认分页

+ 19 - 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;
@@ -112,9 +113,17 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         if(id == null || id <= 0){
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
         }
+        //校验BOM资料是否已被使用
+        Long prodId = getMapper().selectByPrimaryKey(id).getBo_motherid();
+        int count = getMapper().getCountFromMake(prodId);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+
         String code = getMapper().selectByPrimaryKey(id).getBo_mothercode();
-        getMapper().deleteByPrimaryKey(id);
         bomDetailMapper.deleteByFK(id);
+        getMapper().deleteByPrimaryKey(id);
+
         //记录LOG
         messageLogService.delete(generateMsgObj(id, code));
     }
@@ -174,6 +183,13 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
     @Override
     public DocBaseDTO close(Long id) {
         if(id != null && id > 0){
+            //校验BOM资料是否已被使用
+            Long prodId = getMapper().selectByPrimaryKey(id).getBo_motherid();
+            int count = getMapper().getCountFromMake(prodId);
+            if (count > 0){
+                throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+            }
+
             Bom bom = new Bom();
             bom.setId(id);
             bom.setBo_status(Status.CLOSE.getDisplay());
@@ -185,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);
@@ -211,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);

+ 7 - 4
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;
@@ -22,6 +23,7 @@ import com.usoftchina.saas.document.service.CustomerService;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.RegexpUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -119,7 +121,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         //返回对象
         DocBaseDTO baseDTO = null;
         Long cu_id = main.getId();
-        String cu_code = main.getCu_code();
+        String cu_code = main.getCu_code().trim().toUpperCase();
         Customer customer = BeanMapper.map(main,Customer.class);
         customer.setCompanyId(companyId);
         customer.setCreatorId(userId);
@@ -132,6 +134,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-preamount);
 
         //编号校验
+        cu_code = RegexpUtils.replaceSpecCharacter(cu_code);
         cu_code = pushMaxnubmer(cu_code, cu_id);
         //单号赋值
         customer.setCu_code(cu_code);
@@ -291,7 +294,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
     }
 
     @Transactional
-    private void singleDelete(Long id) {
+    public void singleDelete(Long id) {
         if (null!=id) {
             DocBaseDTO docBaseDTO = getBaseDTOById(id);
             Map<String, Object> map = new HashMap<String, Object>();
@@ -363,7 +366,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
-        messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
         }
         return docBaseDTO;
     }
@@ -398,7 +401,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
-        messageLogService.close(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

+ 8 - 5
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;
@@ -24,6 +25,7 @@ import com.usoftchina.saas.document.service.ProductService;
 import com.usoftchina.saas.document.service.WarehouseService;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.RegexpUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -88,10 +90,11 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         //校验明细仓库是否重复
         validRepeatWarehouse(productDetailList);
 
-        //保存
-        String code = pushMaxnubmer(product.getPr_code(), product.getId());
-
+        String prCode = product.getPr_code().trim().toUpperCase();
+        prCode = RegexpUtils.replaceSpecCharacter(prCode);
+        String code = pushMaxnubmer(prCode, product.getId());
         if(product.getId() == 0){
+            //保存
             product.setCompanyId(companyId);
             product.setCreatorId(userId);
             product.setCreateTime(new Date());
@@ -307,7 +310,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);
@@ -334,7 +337,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();

+ 9 - 5
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;
@@ -25,6 +26,7 @@ import com.usoftchina.saas.document.mapper.VendorcontactMapper;
 import com.usoftchina.saas.document.service.VendorService;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.RegexpUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -113,11 +115,12 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             throw new BizException(BizExceptionCode.EMPTY_DATA);
         }
         Vendor main = vendorListDTO.getMain();
-        String code = null;
         main.setCompanyId(BaseContextHolder.getCompanyId());
         List<Vendorcontact> items = vendorListDTO.getItems();
+        String ve_code = main.getVe_code().trim().toUpperCase();
+        ve_code = RegexpUtils.replaceSpecCharacter(ve_code);
+        String code = pushMaxnubmer(ve_code, main.getId());
         if(main.getId() == 0){
-            code = pushMaxnubmer(main.getVe_code(), main.getId());
             int count = getMapper().getCountByCode(code, companyId);
             if(count > 0){
                 throw new BizException(BizExceptionCode.REPEAT_NAME);
@@ -150,9 +153,10 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             //记录LOG
             messageLogService.save(generateMsgObj(mainId, code));
         }else{
-            code = main.getVe_code();
+            main.setVe_code(code);
             Long mainId = main.getId();
             Vendor oldVendor = getMapper().selectByPrimaryKey(main.getId());
+
             int count = getMapper().getCountByCode(code, companyId);
             if (!code.equals(oldVendor.getVe_code())){
                 if (count > 0){
@@ -300,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);
@@ -328,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

+ 11 - 3
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;
@@ -17,6 +18,7 @@ import com.usoftchina.saas.document.mapper.WarehouseMapper;
 import com.usoftchina.saas.document.service.WarehouseService;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.RegexpUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -106,7 +108,9 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
         DocBaseDTO docBaseDTO = null;
         Long companyId = BaseContextHolder.getCompanyId();
         if(record.getId() == 0){
-            String code = pushMaxnubmer(record.getWh_code(), record.getId());
+            String whcode = record.getWh_code().trim().toUpperCase();
+            whcode = RegexpUtils.replaceSpecCharacter(whcode);
+            String code = pushMaxnubmer(whcode, record.getId());
             record.setCompanyId(BaseContextHolder.getCompanyId());
             record.setCreatorId(BaseContextHolder.getUserId());
             record.setCreateTime(new Date());
@@ -162,6 +166,10 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
     @Override
     public DocBaseDTO close(Long id) {
         if(id != null && id > 0){
+            int num = warehouseMapper.deleteCheckProduct(id, BaseContextHolder.getCompanyId());
+            if (num > 0) {
+                throw new BizException(BizExceptionCode.CLOSE_WAREHOUSE);
+            }
             Warehouse warehouse = new Warehouse();
             warehouse.setId(id);
             warehouse.setWh_status(Status.CLOSE.getDisplay());
@@ -173,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);
@@ -199,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>

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

@@ -39,7 +39,7 @@
     bk_remark
   </sql>
   <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Integer" >
-    select 
+    select
     <include refid="Base_Column_List" />
     ,
     <include refid="Blob_Column_List" />
@@ -342,5 +342,16 @@
 
   <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="check" parameterMap="checkParamMap" statementType="CALLABLE">
+        CALL SP_LIMITBASE(?, ?, ?, ?,?)
     </select>
+  <parameterMap id="checkParamMap" type="java.util.Map">
+    <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+    <parameter property="v_id" jdbcType="INTEGER" mode="IN" />
+    <parameter property="v_code" jdbcType="VARCHAR" mode="IN" />
+    <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+    <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
+  </parameterMap>
 </mapper>

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

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

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

@@ -41,7 +41,7 @@
     cu_recamount,cu_preamount
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
-    select 
+    select
     <include refid="Base_Column_List" />
     from customer
     where cu_id = #{cu_id,jdbcType=INTEGER}
@@ -392,13 +392,13 @@
   and companyId =#{companyId};
   </select>
   <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">
-        CALL SP_LIMITBASE(?, ?, ?, ?, ?)
+        CALL SP_LIMITBASE(?, ?, ?, ?,?)
     </select>
   <parameterMap id="checkParamMap" type="java.util.Map">
     <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
     <parameter property="v_id" jdbcType="INTEGER" mode="IN" />
     <parameter property="v_code" jdbcType="VARCHAR" mode="IN" />
-    <parameter property="v_companyid" jdbcType="VARCHAR" mode="IN" />
+    <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
     <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
   </parameterMap>
 

+ 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>

+ 2 - 2
applications/document/document-server/src/main/resources/mapper/VendorMapper.xml

@@ -478,13 +478,13 @@
     </select>
 
     <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">
-        CALL SP_LIMITBASE(?, ?, ?, ?, ?)
+        CALL SP_LIMITBASE(?, ?, ?, ?,?)
     </select>
     <parameterMap id="checkParamMap" type="java.util.Map">
         <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
         <parameter property="v_id" jdbcType="INTEGER" mode="IN" />
         <parameter property="v_code" jdbcType="VARCHAR" mode="IN" />
-        <parameter property="v_companyid" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
         <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
     </parameterMap>
 </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;
     }

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

@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -70,6 +71,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         }else {
             fundtransfer.setCompanyId(BaseContextHolder.getCompanyId());
             fundtransfer.setFt_recorder(BaseContextHolder.getUserName());
+            fundtransfer.setCreatorName(BaseContextHolder.getUserName());
             fundtransferMapper.insertSelective(fundtransfer);
             id = fundtransfer.getId();
 
@@ -99,6 +101,8 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         Fundtransfer fundtransfer = fundtran.getMain();
         fundtransfer.setFt_status(Status.AUDITED.getDisplay());
         fundtransfer.setFt_statuscode(Status.AUDITED.name());
+        fundtransfer.setFt_auditman(BaseContextHolder.getUserName());
+        fundtransfer.setFt_auditdate(new Date());
         fundtransfer.setCompanyId(companyId);
         this.changBankUntil(fundtran);
         DocBaseDTO docBaseDTO = this.insert(fundtran);
@@ -186,6 +190,8 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         fundtransfer.setId(Long.valueOf(id));
         fundtransfer.setFt_status(com.usoftchina.saas.commons.po.Status.UNAUDITED.getDisplay());
         fundtransfer.setFt_statuscode(Status.UNAUDITED.name());
+        fundtransfer.setFt_auditman(null);
+        fundtransfer.setFt_auditdate(null);
         fundtransferMapper.updateByPrimaryKeySelective(fundtransfer);
 
         //删除中间表
@@ -194,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();
@@ -299,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;
     }
 

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

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -78,6 +79,8 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         }else {
             othreceipts.setCompanyId(BaseContextHolder.getCompanyId());
             othreceipts.setOr_recorder(BaseContextHolder.getUserName());
+            othreceipts.setCreatorName(BaseContextHolder.getUserName());
+            othreceipts.setCreateTime(new Date());
             othreceiptsMapper.insertSelective(othreceipts);
             id = othreceipts.getId();
             baseDTO = getBaseDTOById(id);
@@ -106,6 +109,8 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         Othreceipts othreceipts = othte.getMain();
         othreceipts.setOr_status(Status.AUDITED.getDisplay());
         othreceipts.setOr_statuscode(Status.AUDITED.name());
+        othreceipts.setOr_auditman(BaseContextHolder.getUserName());
+        othreceipts.setOr_auditdate(new Date());
         this.changBankUntil(othte);
         DocBaseDTO docBaseDTO = this.insert(othte);
         Long id = docBaseDTO.getId();
@@ -197,11 +202,14 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         othreceipts.setId(Long.valueOf(id));
         othreceipts.setOr_status(com.usoftchina.saas.commons.po.Status.UNAUDITED.getDisplay());
         othreceipts.setOr_statuscode(Status.UNAUDITED.name());
+        othreceipts.setOr_auditman(null);
+        othreceipts.setOr_auditdate(null);
         othreceiptsMapper.updateByPrimaryKeySelective(othreceipts);
 
         //删除中间表
         othreceipts = othreceiptsMapper.selectByPrimaryKey(id);
         banksubledgerMapper.deleteByPrimaryKey(othreceipts.getOr_code(), "其他收入单");
+        subledgerMapper.deleteByPrimaryKey(othreceipts.getOr_code(), "其他收入单");
 
         //更新资金
         Double amount = banksubledgerMapper.selectThisamount(othreceipts.getOr_bankcode());
@@ -213,6 +221,41 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
                     othreceipts.getOr_bankcode(), "-");
         }
 
+        //资金账号表
+        int bk_inid = othreceipts.getOr_bankid();
+
+        Double or_amount = othreceipts.getOr_amount();
+        //收款
+        Bankinformation bankinformation = bankinformationMapper.selectByPrimaryKey(bk_inid);
+        Double beginamount = bankinformation.getBk_beginamount();
+        Double spending = bankinformation.getBk_spending() == null ? new Double(0) : bankinformation.getBk_spending();
+        Double incomme = bankinformation.getBk_income() == null ? new Double(0) : bankinformation.getBk_income();
+        bankinformation.setBk_thisamount(beginamount + incomme - spending - or_amount);
+        bankinformation.setBk_income(incomme - or_amount);
+        bankinformation.setBk_spending(spending);
+        bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
+
+        //客户付款
+        /**
+         * 更新客户资料
+         * cu_preamount=nvl(cu_preamount,0)+rb_preamount,
+         * cu_recamount=nvl(cu_recamount,0)-rb_rbdamount,
+         * cu_leftamount=cu_beginaramount-cu_beginprerecamount+cu_recamount-cu_preamount;
+         */
+        Customer customerData = recbalanceMapper.selectCustomerByPrimaryKey(othreceipts.getOr_custid());
+        Double preamount = customerData.getCu_preamount()==null?new Double(0):customerData.getCu_preamount();
+        Double beginapamount = customerData.getCu_beginaramount()==null?new Double(0):customerData.getCu_beginaramount();
+        Double beginprepayamount= customerData.getCu_beginprerecamount()==null?new Double(0):customerData.getCu_beginprerecamount();
+        Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
+
+        Customer customer = new Customer();
+        customer.setId(Long.valueOf(othreceipts.getOr_custid()));
+        customer.setCu_preamount(preamount);
+        customer.setCu_recamount(recamount-or_amount);
+        customer.setCu_leftamount(beginapamount+beginprepayamount-recamount+or_amount+preamount);
+        recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
+
+
         //计算期间金额
         Statsinfo statsinfo = new Statsinfo();
         List<Integer> ymList = othreceiptsdetailMapper.selectYm(id);

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

@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -73,6 +74,8 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         }else {
             othspendings.setCompanyId(BaseContextHolder.getCompanyId());
             othspendings.setOs_recorder(BaseContextHolder.getUserName());
+            othspendings.setCreatorName(BaseContextHolder.getUserName());
+            othspendings.setCreateTime(new Date());
             othspendingsMapper.insertSelective(othspendings);
             id = othspendings.getId();
 
@@ -143,6 +146,8 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         othspendings.setOs_status(Status.AUDITED.getDisplay());
         othspendings.setOs_statuscode(Status.AUDITED.name());
         othspendings.setCompanyId(companyId);
+        othspendings.setOs_auditdate(new Date());
+        othspendings.setOs_auditman(BaseContextHolder.getUserName());
         this.changBankUntil(othsp);
         DocBaseDTO docBaseDTO = this.insert(othsp);
         Long id = docBaseDTO.getId();
@@ -172,6 +177,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         bankinformation.setBk_thisamount(beginamount + incomme - spending - bk_amount);
         bankinformation.setBk_income(incomme);
         bankinformation.setBk_spending(spending + bk_amount);
+        bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
 
         /**
          * ve_preamount=nvl(ve_preamount,0)+pb_preamount,
@@ -228,11 +234,13 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         othspendings.setId(Long.valueOf(id));
         othspendings.setOs_status(com.usoftchina.saas.commons.po.Status.UNAUDITED.getDisplay());
         othspendings.setOs_statuscode(Status.UNAUDITED.name());
+        othspendings.setOs_auditman(null);
+        othspendings.setOs_auditdate(null);
         othspendingsMapper.updateByPrimaryKeySelective(othspendings);
 
         //删除中间表
         othspendings = othspendingsMapper.selectByPrimaryKey(id);
-        banksubledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他收入单");
+        banksubledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单");
         subledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单");
 
         //资金
@@ -255,9 +263,10 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         Double beginamount = bankinformation.getBk_beginamount();
         Double spending = bankinformation.getBk_spending() == null ? new Double(0) : bankinformation.getBk_spending();
         Double incomme = bankinformation.getBk_income() == null ? new Double(0) : bankinformation.getBk_income();
-        bankinformation.setBk_thisamount(beginamount + incomme - spending - bk_amount);
+        bankinformation.setBk_thisamount(beginamount + incomme - spending + bk_amount);
         bankinformation.setBk_income(incomme);
-        bankinformation.setBk_spending(spending + bk_amount);
+        bankinformation.setBk_spending(spending - bk_amount);
+        bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
 
         /**
          * ve_preamount=nvl(ve_preamount,0)+pb_preamount,

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

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -78,6 +79,8 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         }else {
             paybalance.setCompanyId(BaseContextHolder.getCompanyId());
             paybalance.setPb_recorder(BaseContextHolder.getUserName());
+            paybalance.setCreatorName(BaseContextHolder.getUserName());
+            paybalance.setCreateTime(new Date());
             paybalanceMapper.insertSelective(paybalance);
             pbId = paybalance.getId();
             baseDTO = getBaseDTOById(pbId);
@@ -188,6 +191,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         paybalance.setCompanyId(companyId);
         paybalance.setPb_status(Status.AUDITED.getDisplay());
         paybalance.setPb_statuscode(Status.AUDITED.name());
+        paybalance.setPb_auditman(BaseContextHolder.getUserName());
+        paybalance.setPb_auditdate(new Date());
+        pay.setMain(paybalance);
         Subledger subledger = this.changSubledgerUntil(paybalance);
         if (subledger.getSl_code() == null){
             subledgerMapper.insertSelective(subledger);
@@ -338,6 +344,8 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         paybalance.setId(Long.valueOf(id));
         paybalance.setPb_status(com.usoftchina.saas.commons.po.Status.UNAUDITED.getDisplay());
         paybalance.setPb_statuscode(Status.UNAUDITED.name());
+        paybalance.setPb_auditman(null);
+        paybalance.setPb_auditdate(null);
         paybalanceMapper.updateByPrimaryKeySelective(paybalance);
 
         //删除中间表

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

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -76,6 +77,8 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         }else {
             recbalance.setCompanyId(BaseContextHolder.getCompanyId());
             recbalance.setRb_recorder(BaseContextHolder.getUserName());
+            recbalance.setCreatorName(BaseContextHolder.getUserName());
+            recbalance.setCreateTime(new Date());
             recbalanceMapper.insertSelective(recbalance);
             rbId = recbalance.getId();
 
@@ -124,7 +127,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         Double nowbalanceTotal = new Double(0);
         for(Recbalancedetail detail : recbalancedetail){
             //本次核销金额
-            Double nowbalance = detail.getRbd_nowbalance();
+            Double nowbalance = detail.getRbd_nowbalance()==null?new Double(0):detail.getRbd_nowbalance();
             nowbalanceTotal = nowbalanceTotal + nowbalance;
             //来源单号
             Integer sourceId = detail.getRbd_slid();
@@ -132,7 +135,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
             Double namount = new Double(0);
             if(sourceId!=0){
                 Subledger subledger = subledgerMapper.selectByPrimaryKey(sourceId);
-                namount = subledger.getSl_namount();
+                namount = subledger.getSl_namount()==null?new Double(0):subledger.getSl_namount();
             }
             //本次核销金额不能大于未核销金额
             if(nowbalance>namount){
@@ -224,6 +227,9 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         recbalance.setCompanyId(companyId);
         recbalance.setRb_status(Status.AUDITED.getDisplay());
         recbalance.setRb_statuscode(Status.AUDITED.name());
+        recbalance.setRb_auditman(BaseContextHolder.getUserName());
+        recbalance.setRb_auditdate(new Date());
+        rec.setMain(recbalance);
         Subledger subledger = this.changSubledgerUntil(recbalance);
         if (subledger.getSl_code() == null){
             subledgerMapper.insertSelective(subledger);
@@ -363,6 +369,8 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         recbalance.setId(id);
         recbalance.setRb_status(Status.UNAUDITED.getDisplay());
         recbalance.setRb_statuscode(Status.UNAUDITED.name());
+        recbalance.setRb_auditman(null);
+        recbalance.setRb_auditdate(null);
         recbalanceMapper.updateByPrimaryKeySelective(recbalance);
 
         //删除中间表

+ 2 - 0
applications/money/money-server/src/main/resources/mapper/FundtransferMapper.xml

@@ -225,6 +225,8 @@
       <if test="ft_text5 != null" >
         ft_text5 = #{ft_text5,jdbcType=VARCHAR},
       </if>
+        ft_auditman = #{ft_auditman,jdbcType=VARCHAR},
+        ft_auditdate = #{ft_auditdate,jdbcType=TIMESTAMP}
     </set>
     where ft_id = #{id,jdbcType=INTEGER}
   </update>

+ 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}

+ 2 - 0
applications/money/money-server/src/main/resources/mapper/OthreceiptsMapper.xml

@@ -300,6 +300,8 @@
       <if test="or_text5 != null" >
         or_text5 = #{or_text5,jdbcType=VARCHAR},
       </if>
+      or_auditman = #{or_auditman,jdbcType=VARCHAR},
+      or_auditdate = #{or_auditdate,jdbcType=TIMESTAMP}
     </set>
     where or_id = #{id,jdbcType=INTEGER}
   </update>

+ 2 - 0
applications/money/money-server/src/main/resources/mapper/OthspendingsMapper.xml

@@ -295,6 +295,8 @@
       <if test="os_text5 != null" >
         os_text5 = #{os_text5,jdbcType=VARCHAR},
       </if>
+      os_auditman = #{os_auditman,jdbcType=VARCHAR},
+      os_auditdate = #{os_auditdate,jdbcType=TIMESTAMP}
     </set>
     where os_id = #{id,jdbcType=INTEGER}
   </update>

+ 6 - 0
applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml

@@ -414,6 +414,12 @@
       <if test="pb_text5 != null">
         pb_text5 = #{pb_text5,jdbcType=VARCHAR},
       </if>
+      <if test="pb_auditman !=null">
+        pb_auditman = #{pb_auditman,jdbcType=VARCHAR},
+      </if>
+      <if test="pb_auditdate !=null">
+        pb_auditdate = #{pb_auditdate,jdbcType=TIMESTAMP}
+      </if>
     </set>
     where pb_id = #{id,jdbcType=INTEGER}
   </update>

+ 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

+ 6 - 0
applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml

@@ -581,6 +581,12 @@
       <if test="rb_text5 != null">
         rb_text5 = #{rb_text5,jdbcType=VARCHAR},
       </if>
+      <if test="rb_auditman !=null">
+        rb_auditman = #{rb_auditman,jdbcType=VARCHAR},
+      </if>
+    <if test="rb_auditdate !=null">
+      rb_auditdate = #{rb_auditdate,jdbcType=TIMESTAMP}
+    </if>
     </set>
     where rb_id = #{id,jdbcType=INTEGER}
   </update>

+ 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 - 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>

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

@@ -43,4 +43,6 @@ public interface ProdInOutMapper extends CommonBaseMapper<ProdInOut> {
     void updatePiTotal(Long id);
 
     List<HashMap<String, Object>> getWareHouseByCode(@Param("code") String code, @Param("companyId") Long companyId);
+
+    void updateCreator(@Param("userId") Long userId, @Param("userName") String userName, @Param("id") Long id);
 }

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

@@ -116,6 +116,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
             //插入操作
             prodInOutMapper.insertSelective(prodInOut);
             pi_id = prodInOut.getId();
+            prodInOutMapper.updateCreator(userId, BaseContextHolder.getUserName(), pi_id);
             //添加从表传输对象
             for (ProdIODetailDTO item : items) {
                 ProdIODetail detail = BeanMapper.map(item,ProdIODetail.class);

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

@@ -109,9 +109,7 @@
   </sql>
     <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="ResultMapWithBLOBs">
     select 
-    <include refid="Base_Column_List" />
-    ,
-    <include refid="Blob_Column_List" />
+    *
     from prodinout
     where pi_id = #{pi_id,jdbcType=INTEGER}
   </select>
@@ -560,5 +558,7 @@ update ProdInOut SET
   <select id="getWareHouseByCode" resultType="java.util.HashMap">
     select pr_whid,pr_whcode,pr_whname from product where pr_code=#{code} and companyid=#{companyId} and pr_statuscode='OPEN'
   </select>
-
+  <update id="updateCreator">
+    update ProdInOut set creatorId = #{userId} , creatorName=#{userName} where pi_id=#{id}
+  </update>
 </mapper>

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

@@ -19,6 +19,7 @@
     <select id="selectAccountRole" resultType="com.usoftchina.saas.account.dto.AccountRoleDTO">
         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
         <where>
@@ -26,7 +27,7 @@
                 ${condition}
             </if>
             <if test="companyId!=null">
-                AND C.COMPANY_ID = #{companyId}
+                AND d.COMPANY_ID = #{companyId}
             </if>
         </where>
         group by a.id,a.username,a.realname,a.email,a.mobile

+ 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);
         }
     }
 

+ 11 - 0
framework/core/src/main/java/com/usoftchina/saas/utils/RegexpUtils.java

@@ -11,6 +11,7 @@ public class RegexpUtils {
     private static final String CN_MOBILE_EXP = "^((13[0-9])|(15[0-3, 5-9])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
     private static final String HK_MOBILE_EXP = "^(5|6|8|9)\\d{7}$";
     private static final String EMAIL_EXP = "^\\w+([-.]\\w+)*@\\w+([-]\\w+)*\\.(\\w+([-]\\w+)*\\.)*[a-z]{2,4}$";
+    private static final String SPECCHARACTER_EXP = "[\\\\s~·`!!@#¥$%^……&*(())\\\\-——\\\\-_=+【\\\\[\\\\]】{{}}\\\\|、\\\\\\\\;;::‘'“”\\\",,《<。.》>、/??]";
 
     /**
      * 匹配手机号码
@@ -55,4 +56,14 @@ public class RegexpUtils {
         return m.matches();
     }
 
+    /**
+     * 特殊字符替换
+     * @param str
+     * @return
+     */
+    public static String replaceSpecCharacter(String str){
+        Pattern p = Pattern.compile(SPECCHARACTER_EXP);
+        Matcher m = p.matcher(str);
+        return m.replaceAll("");
+    }
 }

+ 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);
+    }
+}

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

@@ -1,15 +1,30 @@
 if (process.env.NODE_ENV == 'production') {
     window.env = {
         profile: 'production',
+        frontend: {
+            // 前端地址
+            baseUrl: 'http://192.168.0.181'
+        },
         server: {
-            baseUrl: 'http://192.168.0.181:8560'
+            // 后端接口网关
+            baseUrl: 'http://192.168.0.181:8560',
+            // 账户中心接口
+            ssoUrl: 'http://192.168.253.12:32323'
         }
     }
 } else {
     window.env = {
         profile: 'development',
+        frontend: {
+            // 前端地址
+            baseUrl: 'http://192.168.0.181'
+            // baseUrl: 'http://127.0.0.1:1841'
+        },
         server: {
-            baseUrl: 'http://192.168.0.181:8560'
+            // 后端接口网关
+            baseUrl: 'http://192.168.0.181:8560',
+            // 账户中心接口
+            ssoUrl: 'http://192.168.253.12:32323'
         }
     }
 }

+ 10 - 10
frontend/saas-portal-web/src/css/main.css

@@ -123,10 +123,8 @@ main > section {
     /* width: 100%;
     height: 100%; */
 }
-.box,.box-zc{
+.box{
     display:none;
-    width: 378px;
-    height: 382px; 
     position: fixed;
     background:white; 
     top: 55%;
@@ -135,9 +133,6 @@ main > section {
     margin-top: -225px;
     z-index: 10;
 }
-.box-zc {
-    height: 450px;
-}
 .tc-login {
     text-align: center;
     color: black;
@@ -269,19 +264,24 @@ main > section {
     border: #0080E6 1px solid;
 }
 /* 11/12注册页面 ..........................................*/
-.login {
-    margin-top: 12px;
+.login,.profile {
     color: white;
     font-size: 14px;
 }
-.login img {
+.login {
+    margin-top: 12px;
+}
+.login img,.profile img {
     width: 25px;
     height: 24px;
 }
-.login > span:hover{
+.login > span:hover, .profile > span:hover{
     cursor:pointer;
     color: #0aa6bd;
 }
+.profile .user-info {
+    margin: 0 18px;
+}
 .my-label {
     float: left;
     line-height: 40px;

+ 17 - 298
frontend/saas-portal-web/src/index.html

@@ -35,8 +35,8 @@
 		<!-- bootstrap.min -->
         <link rel="stylesheet" href="css/animate.css">
 		<!-- Main Stylesheet -->
-        <link rel="stylesheet" href="css/main.css">
-
+		<link rel="stylesheet" href="css/main.css">
+		
 		<!-- Modernizer Script for old Browsers -->
         <script src="js/modernizr-2.6.2.min.js"></script>
 
@@ -90,6 +90,13 @@
 							<span class="btn1"><img src="./img/assets/denglu3x.png" alt="">登录  &nbsp;</span>
 							<span class="register"><img src="./img/assets/zhuce3x.png" alt="">注册</span>
 						</li>
+						<li class="profile" style="display:none">
+							<span class="user-info">
+								<img src="./img/assets/denglu3x.png" alt="">
+								<span id="user-info"></span>
+							</span>|
+							<a href="#">账户管理</a>
+						</li>
                     </ul>
                 </nav>
 				<!-- /main nav -->
@@ -99,158 +106,11 @@
 		
 		<main class="site-content" role="main">
 			<!-- 遮罩 -->
-			<div class="zhezhao"></div> 
-		<!-- 登录嵌套 -->
-			<iframe id="box" class="qiantao" src="http://10.1.51.91:3001/sassLogin?appId=sp&returnURL=https://www.usoftchina.com"></iframe>
-		<!-- 注册嵌套 -->
-			<iframe id="box-zc" class="qiantao"src="http://10.1.51.91:3001/sassLogin/register?appId=sp&returnURL=https://www.usoftchina.com "></iframe>
-			<!-- 注册 -->
-			<div id="box-zc1" class="box-zc">
-				<div class="tc-login" id="zhuce">
-					<div class="tc-out"><img class="tc-on" src="./img/assets/chahao.png" alt=""></div>
-					<div><img class="tc-logoimg" src="./img/assets/dalogo@3x.png" alt=""></div>
-					<!-- <div class="tc-logo"><img class="tc-logoimg" src="./img/assets/logo-lan3x.png" alt="">企云服</div> -->
-					<div class="tc-title"><hr class="tc-hrleft"/>注册<hr class="tc-hrright"/></div>
-					<form action="#" method="post">
-						<div class="tc-phone">
-							<div class="tc-phonebox">
-								<span><img src="./img/assets/phone.png"></span>
-								<input type="text" class="tc-phonecon" placeholder="请输入您的手机号" name="zc-phone" id="zc-phone">
-							</div>
-							<span class="tishi zc-phone"></span>
-						</div>
-						<div class="tc-over">
-							<div class="tc-phone left" style="margin: 0 0 16px 0;">
-								<div class="tc-phonebox">
-									<input type="text" class="tc-yanzhengma tc-shibiema" name="zc-tuxingma" id="zc-tuxingma">
-								</div>
-								<span class="tishi"><img src="./img/assets/tishi1x.png"/>验证错误</span>
-							</div>
-							<div class="left"><img class="tc-yanzhengimg" src="./img/assets/timg.jpg" alt=""></div>
-							<div class="right" style="line-height: 40px;"><img src="./img/assets/shuaxin.png" alt=""></div>
-						</div>
-						<div style="width: 100%;">
-							<div class="tc-phone left" style="margin: 0 0 16px 0;">
-								<div class="tc-phonebox">
-									<span><img src="./img/assets/yanzhengma.png"></span>
-									<input type="text" class="tc-yanzhengma" placeholder="请输入验证码" name="zc-yanzhengma" id="zc-yanzhengma">
-								</div>
-								<span class="tishi"><img src="./img/assets/tishi1x.png"/>验证错误</span>
-							</div>
-							<button class="tc-huoqu right">获取验证码</button>
-						</div>
-						
-						<div>
-							<button class="tc-login-pwd form-btn" id="login-pwd">注册</button>
-						</div>
-					</form>
-					<div>
-						<div class="xieyi">
-							<input class="checked" type="checkbox" checked name="xieyi"/> 
-							<span>
-								我已阅读并同意
-								<a href="https://sso.ubtob.com/common/agreement">《优软云服务条款》</a>
-							</span>
-						</div>
-						<span class="form-buttom">已有账号,去<a href="#" class="go-login">登录</a></span>
-					</div>
-				</div>
-			</div>
-			<!-- 登录窗 -->
-			<div id="box1" class="box">
-			<!-- 账号登录 -->
-				<div class="tc-login" id="zhanghao">
-					<div class="tc-out"><img class="tc-on" src="./img/assets/chahao.png" alt=""></div>
-					<div><img class="tc-logoimg" src="./img/assets/dalogo@3x.png" alt=""></div>
-					<!-- <div class="tc-logo"><img class="tc-logoimg" src="./img/assets/logo-lan3x.png" alt="">企云服</div> -->
-					<div class="tc-title"><hr class="tc-hrleft"/>账号登录<hr class="tc-hrright"/></div>
-					<form action="#" method="post">
-						<div class="tc-phone">
-							<div class="tc-phonebox">
-								<span><img src="./img/assets/phone.png"></span>
-								<input type="text" class="tc-phonecon" placeholder="手机号/优软云账号" name="zh-phone" id="zh-phone">
-							</div>
-							<span class="tishi zh-phone"></span>
-						</div>
-						<div class="tc-phone">
-							<div class="tc-phonebox">
-								<span><img src="./img/assets/password.png"></span>
-								<input type="password" class="tc-phonepwd" placeholder="请输入您的密码" name="pwd" id="zh-pwd">
-							</div>
-							<span class="tishi"><img src="./img/assets/tishi1x.png"/>验证错误</span>
-						</div>
-						<div>
-							<button class="tc-login-pwd" id="zh-login">登录</button>
-						</div>
-					</form>
-					<div class="tc-over" id="qiehuan">
-						<span id="message" class="left tc-duanxin"><a href="#">短信登录</a></span>
-						<span class="right">
-							<a href="#" class="fr tc-color" id="register">注册 | </a>
-							<a href="#" class="fr tc-color" id="example">忘记密码?</a>
-						</span>
-					</div>
-					<!-- <div class="clearfix" style="margin-top: 47px;">
-						<div class="fl" style="color:#999999;font-size: 14px;text-align: center">
-							<span>-----------------第三方登录------------------</span>
-						</div>
-						<div class="aui-form-content-item1" id="weixin-login">
-							<a href="#">
-								<img src="./img/assets/weixin.png">
-								<p class="tc-weixin">微信登录</p>
-							</a>
-						</div>
-					</div> -->
-				</div>
-			<!-- 短信登录 -->
-				<div class="tc-login" id="duanxin" style="display:none">
-					<div class="tc-out"><img class="tc-on" src="./img/assets/chahao.png" alt=""></div>
-					<div><img class="tc-logoimg" src="./img/assets/dalogo@3x.png" alt=""></div>
-					<!-- <div class="tc-logo"><img class="tc-logoimg" src="./img/assets/logo-lan3x.png" alt="">企云服</div> -->
-					<div class="tc-title"><hr class="tc-hrleft"/>短信登录<hr class="tc-hrright"/></div>
-					<form action="#" method="post">
-						<div class="tc-phone">
-							<div class="tc-phonebox">
-								<span><img src="./img/assets/phone.png"></span>
-								<input type="text" class="tc-phonecon" placeholder="请输入您的手机号" name="dx-phone" id="dx-phone">
-							</div>
-							<span class="tishi dx-phone"></span>
-						</div>
-						<div style="width: 100%;">
-							<div class="tc-phone left" style="margin: 0 0 16px 0;">
-								<div class="tc-phonebox">
-									<span><img src="./img/assets/yanzhengma.png"></span>
-									<input type="text" class="tc-yanzhengma" placeholder="请输入验证码" name="dx-yanzhengma" id="dx-yanzhengma">
-								</div>
-								<span class="tishi"><img src="./img/assets/tishi1x.png"/>验证错误</span>
-							</div>
-							<button class="tc-huoqu right">获取验证码</button>
-						</div>
-						<div>
-							<button class="tc-login-pwd" id="dx-login">登录</button>
-						</div>
-					</form>
-					<div class="tc-over" id="qiehuan">
-						<span id="user-phone" class="left tc-duanxin"><a href="#">密码登录</a></span>
-						<span class="right">
-							<a href="#" class="fr tc-color dx-zc">注册</a>
-						</span>
-					</div>
-					<!-- <div class="clearfix" style="margin-top: 47px;">
-						<div class="fl" style="color:#999999;font-size: 14px;text-align: center">
-							<span>-----------------第三方登录------------------</span>
-						</div>
-						<div class="aui-form-content-item1" id="weixin-login">
-							<a href="#">
-								<img src="./img/assets/weixin.png">
-								<p class="tc-weixin">微信登录</p>
-							</a>
-						</div>
-					</div> -->
-				</div>
+			<div class="zhezhao"></div>
+			<div id="box" class="box">
+				<iframe width="346" height="511"></iframe>
 			</div>
-<!--Home Slider==================================== -->
-
+			
 		<section id="home-slider">
             <div id="slider" class="sl-slider-wrapper">
 
@@ -626,8 +486,6 @@
         <script src="js/jquery.singlePageNav.min.js"></script>
 		<!-- jquery.fancybox.pack -->
         <script src="js/jquery.fancybox.pack.js"></script>
-		<!-- Google Map API -->
-		<!--<script src="http://maps.google.com/maps/api/js?sensor=false"></script>-->
 		<!-- Owl Carousel -->
         <script src="js/owl.carousel.min.js"></script>
         <!-- jquery easing -->
@@ -637,152 +495,13 @@
         <script src="js/jquery.slitslider.js"></script>
         <script src="js/jquery.ba-cond.min.js"></script>
 		<!-- onscroll animation -->
-        <script src="js/wow.min.js"></script>
+		<script src="js/wow.min.js"></script>
+		<!-- socket -->
+		<script src="js/sockjs.min.js"></script>
+		<script src="js/stomp.min.js"></script>
 		<!-- Custom Functions jq表单提交插件-->
         <!-- <script src="js/jquery.form.min.js"></script> -->
         <!-- <script src="js/jquery.validate.min.js"></script> -->
         <script src="js/main.js"></script>
-        <script>
-        	// $(function() {
-			// 	$.validator.addMethod("isMobile", function(value, element) {       
-			// 		var length = value.length;   
-			// 		var mobile = /^[1][3,4,5,7,8][0-9]{9}$/;   
-			// 		return this.optional(element) || (length == 11 && mobile.test(value));       
-			// 	}, "请正确填写您的手机号码");
-    		// 	$("#contact-form").validate({//自定义验证规则
-    		// 		rules: {
-    		// 			phone: {
-			// 				required: true,
-			// 				isMobile:true
-    		// 				// minlength: 8
-			// 			},
-			// 			// realName: "required",
-    		//             email: {
-    		//                 required: true,
-    		//                 email: true
-    		//             },
-    		// 			subject: {
-    		// 				required: true,
-    		//                 minlength: 2
-    		// 			},
-    		// 			message: {
-    		// 				required: true,
-    		//                 minlength: 2
-    		// 			}
-    		// 		},
-			// 		messages: {//提示文字
-			// 			phone: {
-			// 				required: "号码不能为空",
-			// 				// telephone: '请填写正确的手机号'
-			// 			},
-    		// 			// name: {
-    		// 			// 	required: "姓名不能为空",
-    		// 			// 	minlength: "至少输入8位字母和数字"
-    		// 			// },
-    		//             email: {
-			// 				required: "没有电子邮件",
-			// 				email: "请输入正确格式的电子邮件",
-    		//             },
-    		// 			subject: {
-    		// 				required: "你有理由联系,把它写在这里",
-    		//                 minlength: "这一切?真的?"
-    		// 			},
-    		// 			message: {
-    		// 				required: "嗯……嗯,你必须写一些东西寄这张表格。",
-    		// 				minlength: "这一切?真的?"
-    		// 			}
-    		// 		},
-    				// submitHandler: function(form) {
-    				// 	$(form).ajaxSubmit({//jq表单提交
-    				// 		type:"POST",
-    				// 		data: $(form).serialize(),//获取form中的所有数据
-    				// 		url:"mail.php",
-    				// 		success: function() {
-    				// 			$(".contact-form").fadeTo( "slow", 1, function() {
-    		        //                 $(".contact-form").resetForm();//清空form
-    				// 				$(".success").slideDown("slow");//滑动方式显示隐藏元素
-    				// 			});
-    				// 		},
-    				// 		error: function() {
-    				// 			$(".contact-form").fadeTo( "slow", 1, function() {
-    				// 				$(".error").slideDown("slow");
-    				// 			});
-    				// 		}
-    				// 	});
-    				// },
-    		//         errorPlacement: function(error, element) {
-    		//             element.after(error);
-    		//             error.hide().slideDown();
-    		//         }
-    		// 	});
-			// });
-			// 关闭弹窗X
-			$(".tc-on").click(function(){
-				$('#box-zc').css('display','none');
-				$('#box').css('display','none');
-				$(".zhezhao").css("display","none")
-			})
-			// 登录弹出
-            $(".btn1").click(function(){
-				if($('#box').css('display') =="none") {
-					$('#box').show();
-					$('#box-zc').css('display','none');
-					$(".zhezhao").css("display","block")
-				}else {
-					$('#box').hide();
-					$(".zhezhao").css("display","none")
-				}
-            });
-            /*点击短信登录*/
-            $("#message").click(function(){
-				$("#zhanghao").css("display","none")
-				$("#duanxin").css("display","block")
-			})
-			// 点击账号登录
-            $("#user-phone").click(function(){
-				$("#zhanghao").css("display","block")
-				$("#duanxin").css("display","none")
-
-            })
-
-			// 注册弹出
-			$('.register').click(function(){
-				if($('#box-zc').css('display') =="none") {
-					$('#box-zc').show();
-					$('#box').css('display','none');
-					$(".zhezhao").css("display","block")
-				}else {
-					$('#box-zc').hide();
-					$(".zhezhao").css("display","none")
-				}
-			})
-			$('#register').click(function(){
-				$("#box").css('display','none');
-				$('#box-zc').css('display','block');
-			})
-			$('.dx-zc').click(function(){
-				$("#box").css('display','none');
-				$('#box-zc').css('display','block');
-			})
-			// 返回登录
-			$("#go-login").click(function(){
-				$("#box").css('display','block');
-				$('#box-zc').css('display','none');
-			})
-			$(".go-login").click(function(){
-				$("#box").css('display','block');
-				$('#box-zc').css('display','none');
-			})
-
-		// ----------------
-			$("#callback").click(function(){
-                $("#bbb").css("display","none");
-                $("#aaa").css("display","block");
-            })
-            $("#weixin-login").click(function(){
-                $("#bbb").css("display","block");
-                $("#aaa").css("display","none");
-            })
-        </script>
     </body>
 </html>

+ 128 - 185
frontend/saas-portal-web/src/js/main.js

@@ -7,97 +7,6 @@ jQuery(window).load(function(){
     $("#preloader").fadeOut("slow");
     
     // ........................
-    // 手机验证
-    isPhone = function (phone) {
-        var myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
-        if (!myreg.test(phone)) {
-            return false;
-        } else {
-            return true;
-        }
-    };
-    // 密码验证
-    isMima = function(mima){
-        let mimareg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/;
-        if (!mimareg.test(mima)) {
-            return false;
-        } else {
-            return true;
-        }
-    };
-    // $('#pwd').change(function(){
-    //     if (isMima($(this).val())) {
-    //         return
-    //     } else {
-    //         alert("密码格式不对")
-    //     }
-    // })
-    // 注册手机号验证
-    $("#zc-phone").bind('input propertychange',function(){
-        if (isPhone($(this).val())) {
-            $(".zc-phone").html("");
-            $(this).parent().parent().css('border','1px #D8DCE8 solid');
-            $(this).css('outline','');
-        } else {
-            $(".zc-phone").html("<img src='./img/assets/tishi1x.png'/>请输入正确的手机号码");
-            $(this).parent().parent().css('border','1px red solid');
-            $(this).css('outline','none');
-        }
-    })
-    // 账号手机号验证
-    $("#zh-phone").bind('input propertychange',function(){
-        if (isPhone($(this).val())) {
-            $(".zh-phone").html("");
-            $(this).parent().parent().css('border','1px #D8DCE8 solid');
-            $(this).css('outline','');
-        } else {
-            $(".zh-phone").html("<img src='./img/assets/tishi1x.png'/>请输入正确的手机号码");
-            $(this).parent().parent().css('border','1px red solid');
-            $(this).css('outline','none');
-        }
-    })
-    // 短信手机号验证
-    $("#dx-phone").bind('input propertychange',function(){
-        if (isPhone($(this).val())) {
-            $(".dx-phone").html("");
-            $(this).parent().parent().css('border','1px #D8DCE8 solid');
-            $(this).css('outline','');
-        } else {
-            $(".dx-phone").html("<img src='./img/assets/tishi1x.png'/>请输入正确的手机号码");
-            $(this).parent().parent().css('border','1px red solid');
-            $(this).css('outline','none');
-        }
-    })
-    // 账号登录
-    // $("#zh-login").click(function(){
-    //     let name = $("#zh-phone").val();
-    //     let pwd = $("#zh-pwd").val();
-    //     console.log('姓名是'+name+'密码是'+pwd)
-    // })
-    // // 短信登录
-    // $("#dx-login").click(function(){
-    //     let name = $("#dx-phone").val();
-    //     let pwd = $("#dx-yanzhengma").val();
-    //     console.log('姓名是'+name+'密码是'+pwd)
-    // })
-    // // 注册点击
-    // $("#zc-login").click(function(){
-    //     let name = $("#zc-phone").val();
-    //     let tuxingma = $("#zc-tuxingma").val();
-    //     let yanzheng  = $("#zc-yanzhengma").val();
-    //     console.log('姓名是'+name+'图形码是'+tuxingma+'验证码是'+yanzheng)
-    // })
-
-    // 注册协议按钮同意可以点击注册
-    $(".checked").click(function(){
-        if ($(".checked").get(0).checked) {
-            $(".form-btn").attr('disabled',false);
-            $(".form-btn").removeClass("back");
-        } else {
-            $(".form-btn").attr('disabled',true);
-            $(".form-btn").addClass("back");
-        }
-    })
     
     // 帮助中心
     $(".bz-right-conent>div").eq(0).show()
@@ -181,10 +90,135 @@ $(function() {
 
 });
 
-
-
 $(document).ready(function(){
-
+    var Store = (function(){
+        var storeKey = 'app-state', store = window.localStorage;
+        return {
+            get: function(key, defaultValue) {
+                var value = store.getItem(storeKey + '-' + key);
+                return value === undefined? defaultValue : JSON.parse(value);
+            },
+            set: function(key, value) {
+                store.setItem(storeKey + '-' + key, JSON.stringify(value));
+            }
+        };
+    })();
+    var Session = (function(){
+        var key = 'session';
+        return {
+            load: function() {
+                return Store.get(key);
+            },
+            loadData: function(data) {
+                data.span = data.timestamp - new Date().getTime();
+                Store.set(key, data);
+            },
+            isValid: function() {
+                var token = this.load();
+                return token && token.timestamp + token.expire * 1000 > new Date().getTime() + token.span;
+            },
+            get: function(prop) {
+                var token = this.load();
+                return token ? token[prop] : null;
+            },
+            set: function(prop, value) {
+                var token = this.load();
+                if (token) {
+                    token[prop] = value;
+                    Store.set(key, token);
+                }
+            }
+        }
+    })();
+    var setUserProfile = function(account) {
+        if (account) {
+            $(".login").css("display","none");
+            // 显示用户信息
+            $("#user-info").text(account.realname || account.username);
+            $(".profile").css("display","block")
+        } else {
+            $(".login").css("display","block");
+            $(".profile").css("display","none")
+        }
+    };
+    // 已经登录过从Store取出信息
+    setUserProfile(Session.get('account'));
+    // socket
+    var listenOnCallback = function(clientId, resolve) {
+        var socket = new SockJS(env.server.baseUrl + "/ws");
+        stompClient = Stomp.over(socket);
+        stompClient.connect({}, function(frame) {
+            stompClient.subscribe('/clients/' + clientId + '/sso/callback', function(message){
+                stompClient.disconnect(function(){
+                    resolve(JSON.parse(message.body));
+                });
+            });
+        });
+    };
+    // 系统页面token
+    var Frontend = (function(){
+        var frame;
+        return {
+            init: function() {
+                $('body').append('<iframe id="frontend" hidden src="' + 
+                    env.frontend.baseUrl + '/set-token.html"></iframe>');
+                frame = window.frames[window.frames.length - 1];
+            },
+            set: function(session, callback) {
+                window.addEventListener('message', callback, false);
+                frame.postMessage(JSON.stringify(session), '*');
+            },
+            redirect: function() {
+                window.location.href = env.frontend.baseUrl;
+            }
+        };
+    })();
+    Frontend.init();
+    // 关闭弹窗X
+    $(".tc-on").click(function(){
+        $('#box-zc').css('display','none');
+        $('#box').css('display','none');
+        $(".zhezhao").css("display","none")
+    })
+    // 登录弹出
+    $(".btn1").click(function(){
+        if ($('#box').css('display') =="none") {
+            // 随机生成clientId
+            var clientId = Math.random().toString(36).substr(2);
+            $(".zhezhao").css("display","block");
+            $('#box iframe').attr('src', env.server.ssoUrl + '/sassLogin?appId=sp&baseUrl=' + 
+                encodeURIComponent(env.server.baseUrl + '/api/auth/sso/callback/' + clientId));
+            $('#box').show();
+            listenOnCallback(clientId, function(data){
+                var session = data.token, account = data.account;
+                account.companies = account.companies || [];
+                session.account = account;
+                Session.loadData(session);
+                setUserProfile(account);
+                $('#box').hide();
+                $(".zhezhao").css("display","none");
+                // 系统页面token设置
+                Frontend.set(session, function(){
+                    // TODO
+                    Frontend.redirect();
+                });
+            });
+        } else {
+            $('#box').hide();
+            $(".zhezhao").css("display","none")
+        }
+    });
+    // 注册弹出
+    $('.register').click(function(){
+        if ($('#box').css('display') =="none") {
+            $(".zhezhao").css("display","block");
+            $('#box iframe').attr('src', env.server.ssoUrl + '/sassLogin/register?appId=sp');
+            $('#box').show();
+        } else {
+            $('#box').hide();
+            $(".zhezhao").css("display","none")
+        }
+    });
     /* ========================================================================= */
     /*  Portfolio
     /* ========================================================================= */
@@ -302,97 +336,6 @@ $(document).ready(function(){
 	
 });
 
-
-/* ==========  START GOOGLE MAP ========== */
-
-/**
-// When the window has finished loading create our google map below
- google.maps.event.addDomListener(window, 'load', init);
-
-function init() {
-    // Basic options for a simple Google Map
-    // For more options see: https://developers.google.com/maps/documentation/javascript/reference#MapOptions
-
-	    var myLatLng = new google.maps.LatLng(22.402789, 91.822156);
-
-	    var mapOptions = {
-	        zoom: 15,
-	        center: myLatLng,
-	        disableDefaultUI: true,
-	        scrollwheel: false,
-	        navigationControl: true,
-	        mapTypeControl: false,
-	        scaleControl: false,
-	        draggable: true,
-
-        // How you would like to style the map. 
-        // This is where you would paste any style found on Snazzy Maps.
-        styles: [{
-            featureType: 'water',
-            stylers: [{
-                color: '#46bcec'
-            }, {
-                visibility: 'on'
-            }]
-        }, {
-            featureType: 'landscape',
-            stylers: [{
-                color: '#f2f2f2'
-            }]
-        }, {
-            featureType: 'road',
-            stylers: [{
-                saturation: -100
-            }, {
-                lightness: 45
-            }]
-        }, {
-            featureType: 'road.highway',
-            stylers: [{
-                visibility: 'simplified'
-            }]
-        }, {
-            featureType: 'road.arterial',
-            elementType: 'labels.icon',
-            stylers: [{
-                visibility: 'off'
-            }]
-        }, {
-            featureType: 'administrative',
-            elementType: 'labels.text.fill',
-            stylers: [{
-                color: '#444444'
-            }]
-        }, {
-            featureType: 'transit',
-            stylers: [{
-                visibility: 'off'
-            }]
-        }, {
-            featureType: 'poi',
-            stylers: [{
-                visibility: 'off'
-            }]
-        }]
-    };
-
-    // Get the HTML DOM element that will contain your map 
-    // We are using a div with id="map" seen below in the <body>
-    var mapElement = document.getElementById('map-canvas');
-
-    // Create the Google Map using our element and options defined above
-    var map = new google.maps.Map(mapElement, mapOptions);
-
-    // Let's also add a marker while we're at it
-    var marker = new google.maps.Marker({
-        position: new google.maps.LatLng(22.402789, 91.822156),
-        map: map,
-		icon: 'img/icons/map-marker.png',
-    });
-}
-**/
-// ========== END GOOGLE MAP ========== //
-
 var wow = new WOW ({
 	offset:       75,          // distance to the element when triggering the animation (default is 0)
 	mobile:       false,       // trigger animations on mobile devices (default is true)

File diff suppressed because it is too large
+ 1 - 0
frontend/saas-portal-web/src/js/sockjs.min.js


File diff suppressed because it is too large
+ 7 - 0
frontend/saas-portal-web/src/js/stomp.min.js


+ 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/

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

@@ -259,21 +259,21 @@
      * are supported.
      *
      */
-     "loader": {
-         // This property controls how the loader manages caching for requests:
-         //
-         //   - true: allows requests to receive cached responses
-         //   - false: disable cached responses by adding a random "cache buster"
-         //   - other: a string (such as the build.timestamp shown here) to allow
-         //     requests to be cached for this build.
-         //
-         "cache": false,
-
-         // When "cache" is not true, this value is the request parameter used
-         // to control caching.
-         //
-         "cacheParam": "_dc"
-     },
+    "loader": {
+        // This property controls how the loader manages caching for requests:
+        //
+        //   - true: allows requests to receive cached responses
+        //   - false: disable cached responses by adding a random "cache buster"
+        //   - other: a string (such as the build.timestamp shown here) to allow
+        //     requests to be cached for this build.
+        //
+        "cache": false,
+
+        // When "cache" is not true, this value is the request parameter used
+        // to control caching.
+        //
+        "cacheParam": "_dc"
+    },
 
     /**
      * Settings specific to production builds.

+ 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);
                     });
                 }
             }

+ 8 - 6
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js

@@ -36,7 +36,7 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                             condition = [];
                         }
                         //添加默认条件
-                        if(me.ownerCt.trigger.defaultCondition) {
+                        if(me.up('window').trigger.defaultCondition) {
                             condition.push({
                                 type: 'condition',
                                 value: me.ownerCt.trigger.defaultCondition
@@ -71,11 +71,7 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                     },'->',{
                         xtype:'button',
                         text:'新增',
-                        handler:function(b){
-                            var grid = me;
-                            var trigger = grid.ownerCt.trigger;
-                            saas.util.BaseUtil.openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
-                        }
+                        handler: me.onAddClick.bind(me)
                     }])
                 },{
                     xtype: 'pagingtoolbar',
@@ -267,5 +263,11 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
         }
 
         return conditionValue;
+    },
+
+    onAddClick: function(){
+        var grid = this;
+        var trigger = grid.ownerCt.trigger;
+        saas.util.BaseUtil.openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
     }
 });

+ 17 - 9
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -122,6 +122,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
     	}
     },
     onTriggerClick:function(f){
+        var me = this;
         this.fireEvent('beforetriggerclick', this);
         f.blur(f);
         //判断dbfindtrigger归属
@@ -135,6 +136,21 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
         var box = panelEl.getBox();
         var height = box.height;
         var width = box.width;
+
+        var dbItem = {
+            xtype:'dbfindgridpanel',
+            columns: f.dbColumns,
+            dataUrl: f.dataUrl,
+            dbfinds: f.dbfinds,
+            belong: f.belong,
+            dbSearchFields:f.dbSearchFields?f.dbSearchFields:[],
+            dbfindtrigger:f,
+        };
+
+        if(me.onAddClick) {
+            dbItem.onAddClick = me.onAddClick;
+        }
+
         var win = panel.add(Ext.create('Ext.window.Window', {   
             trigger:f,
             belong:f.ownerCt,  
@@ -148,15 +164,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
             closable: true,
             layout:'fit',
             renderTo:panel.getEl(),
-            items:[{
-                xtype:'dbfindgridpanel',
-                columns: f.dbColumns,
-                dataUrl: f.dataUrl,
-                dbfinds: f.dbfinds,
-                belong: f.belong,
-                dbSearchFields:f.dbSearchFields?f.dbSearchFields:[],
-                dbfindtrigger:f
-            }]
+            items:[dbItem]
         }));
         win.show();
     },

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

@@ -73,15 +73,15 @@ Ext.define('saas.view.core.dbfind.types.VendorDbfindTrigger', {
         }
     }, {
         text: "纳税人识别号",
-        dataIndex: "ve_bankaccount",
+        dataIndex: "ve_nsrzh",
         width: 150
     }, {
         text: "开户银行",
-        dataIndex: "ve_bankaccount",
+        dataIndex: "ve_bankcode",
         width: 150
     }, {
         text: "银行账户",
-        dataIndex: "ve_bankcode",
+        dataIndex: "ve_bankaccount",
         width: 200
     }]
 

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

@@ -49,6 +49,84 @@ Ext.define('saas.view.core.dbfind.types.WarehouseDbfindTrigger', {
         flex: 1,
         dataIndex: "wh_type",
         xtype: "",
-    }]
+    }],
+
+    onAddClick: function() {
+        var me=this;
+        var tab = saas.util.BaseUtil.getCurrentTab();
+        // this.isEdit = !!record;
+        this.dialog = tab.add({
+            autoScroll:true,
+            xtype: 'document-kind-childwin',
+            bind: {
+                title: '新增仓库资料'
+            },
+            dataKind: 'warehouse',
+            belong: {
+                columns: [{
+                    text: '编号',
+                    dataIndex: 'wh_code',
+                    width: 200
+                },{
+                    text: '仓库名称',
+                    dataIndex: 'wh_description',
+                    width: 200
+                },{
+                    text: '类型',
+                    dataIndex: 'wh_type',
+                    width: 200
+                },{  
+                    text: '仓库状态码',
+                    dataIndex: 'wh_status',
+                    hidden:true,
+                },{
+                    text: '仓库状态',
+                    dataIndex: 'wh_statuscode',
+                    width:90,
+                    xtype: 'actioncolumn',
+                    align : 'center',
+                    items: [{
+                        iconCls:'',
+                        getClass: function(v, meta, rec) {
+                            if(rec.get('wh_statuscode')=='OPEN'){
+                                return 'x-grid-checkcolumn-checked-btn';
+                            }else{
+                                return 'x-grid-checkcolumn-btn';
+                            }
+                        },
+                        handler: function(view, rowIndex, colIndex) {
+                            var rec = view.getStore().getAt(rowIndex);
+                            var type=rec.get('wh_statuscode')=='OPEN'?true:false;
+                            //  禁用/启用
+                            var form = this.ownerCt.ownerCt.ownerCt;
+                            var grid = this.ownerCt.ownerCt;
+                            saas.util.BaseUtil.request({
+                                url: (!type?form._openUrl:form._closeUrl)+'/'+rec.get('id'),
+                                params: '',
+                                method: 'POST',
+                            })
+                            .then(function(localJson) {
+                                if(localJson.success){
+                                    saas.util.BaseUtil.showToast('操作成功');
+                                    grid.store.load();
+                                }
+                            })
+                            .catch(function(res) {
+                                console.error(res);
+                                saas.util.BaseUtil.showToast('操作失败: ' + res.message);
+                            });
+                        }
+                    }]
+                }],
+                keyField:'id',
+                reqUrl: '/api/document/warehouse/save',
+                delUrl: '/api/document/warehouse/delete'
+            },
+            // _parent:this.getView(),
+            // record:record,
+            session: true
+        });
+        this.dialog.show();
+    }
 
 });

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

@@ -100,7 +100,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text:'打印',
             hidden: true,
             bind: {
-                // hidden: '{!id}'
+                hidden: '{!showPrintBtn || !id}'
             },
             handler:"onPrint"
         }, {

+ 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

+ 15 - 2
frontend/saas-web/app/view/core/query/QueryFormPanel.js

@@ -15,7 +15,7 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
         labelAlign: 'right',
         labelWidth: 90,
         columnWidth: 0.25,
-        blankText: '该字段不能为空'
+        blankText: '该字段不能为空',
 	},
 
     dockedItems: [{
@@ -30,6 +30,19 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
             text: '查询',
             handler: 'onQuery'
         },'->']
-    }]
+    }],
+
+    listeners: {
+        beforerender: function(form) {
+            var fiels = form.getForm().getFields();
+            fiels.each(function(f) {
+                f.on && f.on({
+                    keydown: {
+                        fn: 'onQuery',
+                    }
+                });
+            });
+        }
+    }
 
 });

+ 1 - 1
frontend/saas-web/app/view/core/query/QueryPanelController.js

@@ -13,7 +13,7 @@ Ext.define('saas.view.core.query.QueryPanelController', {
         });
         this.queryWin.show();
     },
-    onQuery: function (btn) {
+    onQuery: function () {
         var me = this,
         queryPanel = me.getView(),
         viewModel = me.getViewModel(),

+ 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", 

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

@@ -417,8 +417,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
         .then(function(localJson) {
             me.setLoading(false);
             if(localJson.success){
-                saas.util.BaseUtil.showToast('保存成功');
-                var grid = form.ownerCt._parent.lookup('document-kind-Grid');
+                var grid = form.ownerCt._parent ? form.ownerCt._parent.lookup('document-kind-Grid') : null;
                 if(grid){
                     grid.store.load();
                 }
@@ -427,6 +426,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                         typeof combo.setValue == 'function' && combo.setValue(params._value);
                     });
                 }
+                saas.util.BaseUtil.showToast('保存成功');
                 form.ownerCt.close();
             }
         })

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

@@ -201,7 +201,9 @@ Ext.define('saas.view.document.product.FormPanel', {
     }, {
         xtype: 'numberfield',
         fieldLabel: 'L/T',
-        name: 'pr_leadtime'
+        name: 'pr_leadtime',
+        minValue: 0,
+        maxLength: 10
     }, {
         xtype: 'checkbox',
         fieldLabel: '期初设置',
@@ -370,6 +372,8 @@ Ext.define('saas.view.document.product.FormPanel', {
             trueData = detailGrid.getTrueData();
 
             viewModel.set('qcsz', trueData.length > 0);
+            viewModel.notify();
+            form.getForm().findField('qcsz').resetOriginalValue();
         }
     }
 });

+ 1 - 0
frontend/saas-web/app/view/money/othreceipts/FormPanel.js

@@ -87,6 +87,7 @@ Ext.define('saas.view.money.othreceipts.FormPanel', {
                 width : 200.0, 
                 dataIndex : "ord_type",
                 items : null,
+                hiddenBtn:false,//true 则会关闭新增按钮功能
                 editor : {
                     xtype : "remotecombo", 
                     storeUrl:'/api/document/fundinouttype/getCombo?condition=收入',

+ 3 - 0
frontend/saas-web/app/view/money/othreceipts/FormPanelModel.js

@@ -2,4 +2,7 @@ Ext.define('saas.view.money.othreceipts.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-othreceipts-formpanel',
 
+    data: {
+        showPrintBtn: true
+    }
 });

+ 1 - 0
frontend/saas-web/app/view/money/othreceipts/QueryPanel.js

@@ -76,6 +76,7 @@ Ext.define('saas.view.money.othreceipts.QueryPanel', {
         fieldLabel: '收入类别',
         xtype : "remotecombo",
         storeUrl:'/api/document/fundinouttype/getCombo?condition=收入',
+        hiddenBtn:true//true 则会关闭新增按钮功能
     }],
     moreQueryFormItems: [],
     queryGridConfig: {

+ 2 - 1
frontend/saas-web/app/view/money/othspendings/FormPanel.js

@@ -87,6 +87,7 @@ Ext.define('saas.view.money.othspendings.FormPanel', {
                 width : 200.0, 
                 dataIndex : "osd_type",
                 items : null,
+                hiddenBtn:false,//true 则会关闭新增按钮功能
                 editor : {
                     xtype : "remotecombo",
                     storeUrl:'/api/document/fundinouttype/getCombo?condition=支出',
@@ -96,7 +97,7 @@ Ext.define('saas.view.money.othspendings.FormPanel', {
                         this.dialog = form.getController().getView().add({
                             xtype: 'document-kind-childwin',
                             bind: {
-                                title: '新增收入类别'
+                                title: '新增支出类别'
                             },
                             dataKind:'inoutkind',
                             belong:document.etc['inoutkind'],

+ 3 - 0
frontend/saas-web/app/view/money/othspendings/FormPanelModel.js

@@ -2,4 +2,7 @@ Ext.define('saas.view.money.othspendings.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-othspendings-formpanel',
 
+    data: {
+        showPrintBtn: true
+    }
 });

+ 1 - 0
frontend/saas-web/app/view/money/othspendings/QueryPanel.js

@@ -75,6 +75,7 @@ Ext.define('saas.view.money.othspendings.QueryPanel', {
         fieldLabel: '支出类别',
         xtype : "remotecombo",
         storeUrl:'/api/document/fundinouttype/getCombo?condition=支出',
+        hiddenBtn:true//true 则会关闭新增按钮功能
     }],
     moreQueryFormItems: [],
     queryGridConfig: {

+ 4 - 0
frontend/saas-web/app/view/money/payBalance/FormPanelModel.js

@@ -2,6 +2,10 @@ Ext.define('saas.view.money.payBalance.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-paybalance-formpanel',
 
+    data: {
+        showPrintBtn: true
+    },
+    
     formulas: {
         pb_vendname_change: {
             bind: '{pb_vendid}',

+ 1 - 1
frontend/saas-web/app/view/money/recBalance/FormPanelController.js

@@ -27,7 +27,7 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
                     Ext.apply(f,{
                         //赋值 
                         dbfinds:[{
-                            from: 'id', to: 'rb_bankid'
+                            from: 'id', to: 'rd_bankid'
                         }, {
                             from:'bk_bankcode', to:'rd_bankcode'
                         },{

+ 3 - 0
frontend/saas-web/app/view/purchase/purchase/FormPanelModel.js

@@ -2,6 +2,9 @@ Ext.define('saas.view.purchase.purchase.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.purchase-purchase-formpanel',
 
+    data: {
+        showPrintBtn: true
+    },
 
     formulas:{
         turnHidden:{

+ 5 - 4
frontend/saas-web/app/view/purchase/purchase/QueryPanel.js

@@ -202,7 +202,7 @@ Ext.define('saas.view.purchase.purchase.QueryPanel', {
             xtype: 'numbercolumn',
             width: 120, 
             renderer : function(v) {
-            return Ext.util.Format.number(v, '0');
+                return Ext.util.Format.number(v, '0');
             }
         }, {
             text: '物料编号',
@@ -218,7 +218,7 @@ Ext.define('saas.view.purchase.purchase.QueryPanel', {
             width: 180
         }, {
             text: '单位',
-            dataIndex: 'pr_spec',
+            dataIndex: 'pr_unit',
             width: 100
         },{
             text: '采购数量',
@@ -232,7 +232,8 @@ Ext.define('saas.view.purchase.purchase.QueryPanel', {
                 return Ext.util.Format.number(v, format);
             },
         }, {
-            text: '交货日期',
+            // text: '交货日期',
+            text: '需求日期',
             dataIndex: 'pd_delivery',
             xtype: 'datecolumn',
             width: 200
@@ -243,7 +244,7 @@ Ext.define('saas.view.purchase.purchase.QueryPanel', {
             width: 100,
             renderer : function(v) {
                 var arr = (v + '.').split('.');
-                var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');
+                var xr = (new Array(arr[1].length > 8 ? 8 : arr[1].length)).fill('0');
                 var format = '0,000.' + xr.join();
                 return Ext.util.Format.number(v, format);
             }

+ 10 - 8
frontend/saas-web/app/view/purchase/purchaseIn/FormPanelModel.js

@@ -1,15 +1,17 @@
 Ext.define('saas.view.purchase.purchaseIn.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.purchase-purchasein-formpanel',
-    
+
     data: {
-        pi_class: '采购验收单'
-     },
-     formulas:{
-        turnHidden:{
-            bind:'{pi_statuscode}',
-            get:function(value){
-                return value!='AUDITED';
+        pi_class: '采购验收单',
+        showPrintBtn: true
+    },
+
+    formulas: {
+        turnHidden: {
+            bind: '{pi_statuscode}',
+            get: function (value) {
+                return value != 'AUDITED';
             }
         }
     }

+ 1 - 8
frontend/saas-web/app/view/purchase/purchaseIn/QueryPanel.js

@@ -190,13 +190,7 @@ Ext.define('saas.view.purchase.purchaseIn.QueryPanel', {
         },{
             text: '单位',
             dataIndex: 'pr_unit',
-            width: 120,
-            renderer : function(v) {
-                var arr = (v + '.').split('.');
-                var xr = (new Array(arr[1].length > 8 ? 8 : arr[1].length)).fill('0');
-                var format = '0,000.' + xr.join();
-                return Ext.util.Format.number(v, format);
-            },
+            width: 120
         },{
             text: '数量',
             dataIndex: 'pd_inqty',
@@ -239,7 +233,6 @@ Ext.define('saas.view.purchase.purchaseIn.QueryPanel', {
         },{
             text: '相关单号',
             dataIndex: 'pd_ordercode',
-            xtype:'numbercolumn',
             width: 120
         }]
     }

+ 4 - 3
frontend/saas-web/app/view/purchase/purchaseOut/FormPanelModel.js

@@ -1,8 +1,9 @@
 Ext.define('saas.view.purchase.purchaseOut.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.purchase-purchaseout-formpanel',
-    
+
     data: {
-        pi_class: '采购验退单'
-     }
+        pi_class: '采购验退单',
+        showPrintBtn: true
+    }
 });

+ 1 - 1
frontend/saas-web/app/view/purchase/report/Purchase.js

@@ -8,7 +8,7 @@ Ext.define('saas.view.purchase.report.Purchase', {
     viewName: 'purchase-report-purchase',
 
     groupField: null,
-    listUrl: '/api/purchase/purchase/list',
+    listUrl: '/api/purchase/report/purchaseDetail',
     defaultCondition: null,
     reportTitle: '采购明细报表',
     QueryWidth:0.2,

+ 4 - 0
frontend/saas-web/app/view/sale/sale/FormPanelModel.js

@@ -1,4 +1,8 @@
 Ext.define('saas.view.sale.sale.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.sale-sale-formpanel',
+
+    data: {
+        showPrintBtn: true
+    }
 });

+ 6 - 3
frontend/saas-web/app/view/sale/sale/QueryPanel.js

@@ -162,20 +162,23 @@ Ext.define('saas.view.sale.sale.QueryPanel', {
             width: 200
         }, {
             text: '客户名称',
-            dataIndex: 'sa_cuname',
+            dataIndex: 'sa_custname',
             width: 120
         }, {
             text: '明细序号',
             dataIndex: 'sd_detno',
             xtype: 'numbercolumn',
-            width: 120
+            width: 120,
+            renderer : function(v) {
+                return Ext.util.Format.number(v, '0');
+            }
         }, {
             text: '物料编号',
             dataIndex: 'sd_prodcode',
             width: 120
         }, {
             text: '物料名称',
-            dataIndex: 'pe_detail',
+            dataIndex: 'pr_detail',
             width: 120
         }, {
             text: '物料规格',

+ 4 - 0
frontend/saas-web/app/view/sale/saleIn/FormPanelModel.js

@@ -1,4 +1,8 @@
 Ext.define('saas.view.sale.saleIn.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.sale-salein-formpanel',
+
+    data: {
+        showPrintBtn: true
+    }
 });

+ 4 - 0
frontend/saas-web/app/view/sale/saleOut/FormPanelModel.js

@@ -2,4 +2,8 @@ Ext.define('saas.view.sale.saleout.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.sale-saleout-formpanel',
 
+    data: {
+        showPrintBtn: true
+    }
+
 });

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