Kaynağa Gözat

Merge remote-tracking branch 'origin/dev' into test

guq 7 yıl önce
ebeveyn
işleme
5a487ded96
51 değiştirilmiş dosya ile 288 ekleme ve 237 silme
  1. 4 0
      applications/commons/commons-api/pom.xml
  2. 1 1
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberService.java
  3. 21 0
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberServiceFallback.java
  4. 1 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  5. 4 0
      applications/commons/commons-server/pom.xml
  6. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/CommonsApplication.java
  7. 0 4
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java
  8. 4 0
      applications/document/document-dto/pom.xml
  9. 2 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/CustomerFormDTO.java
  10. 2 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/ProductListDTO.java
  11. 2 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/VendorListDTO.java
  12. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/DocumentApplication.java
  13. 3 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BanksubledgerMapper.java
  14. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductDetailMapper.java
  15. 7 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  16. 12 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  17. 15 9
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  18. 17 2
      applications/document/document-server/src/main/resources/application.yml
  19. 3 3
      applications/document/document-server/src/main/resources/mapper/BanksubledgerMapper.xml
  20. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductDetailMapper.xml
  21. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/BanksubledgerMapper.java
  22. 3 3
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  23. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  24. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  25. 2 2
      applications/money/money-server/src/main/resources/mapper/BanksubledgerMapper.xml
  26. 2 1
      applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdInOutFormDTO.java
  27. 3 1
      applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/PurchaseFormDTO.java
  28. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/PurchaseApplication.java
  29. 4 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  30. 6 2
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  31. 14 2
      applications/purchase/purchase-server/src/main/resources/application.yml
  32. 4 0
      applications/sale/sale-dto/pom.xml
  33. 2 1
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/ProdInOutFormDTO.java
  34. 4 8
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java
  35. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/SaleApplication.java
  36. 4 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java
  37. 6 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  38. 5 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  39. 14 2
      applications/sale/sale-server/src/main/resources/application.yml
  40. 2 0
      applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml
  41. 13 0
      frontend/saas-portal-web/src/components/conenter/home.vue
  42. 5 0
      frontend/saas-web/app/util/FormUtil.js
  43. 14 156
      frontend/saas-web/app/view/core/form/DataMultiCombo.js
  44. 1 1
      frontend/saas-web/app/view/core/form/FormPanelController.js
  45. 7 0
      frontend/saas-web/app/view/document/product/FormController.js
  46. 1 0
      frontend/saas-web/app/view/document/product/FormModel.js
  47. 7 0
      frontend/saas-web/app/view/document/product/FormPanel.js
  48. 14 1
      frontend/saas-web/app/view/sale/report/Sale.js
  49. 1 2
      frontend/saas-web/app/view/sys/account/AddWindow.js
  50. 7 14
      frontend/saas-web/app/view/sys/account/EditWindow.js
  51. 26 0
      frontend/saas-web/overrides/util/Sorter.js

+ 4 - 0
applications/commons/commons-api/pom.xml

@@ -24,5 +24,9 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 1 - 1
applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberService.java

@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestParam;
  * @Author: guq
  * @Date: 2018/10/20
  */
-@FeignClient("commons-server")
+@FeignClient(name = "commons-server", fallback = MaxnumberServiceFallback.class)
 public interface MaxnumberService {
     /**
      * @Description: 更新并获取最大编号

+ 21 - 0
applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberServiceFallback.java

@@ -0,0 +1,21 @@
+package com.usoftchina.saas.commons.api;
+
+import com.usoftchina.saas.base.Result;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author: guq
+ * @create: 2018-12-14 09:06
+ **/
+@Component
+public class MaxnumberServiceFallback implements MaxnumberService {
+    @Override
+    public Result<String> pushMaxnubmer(Integer count, String code, String caller) {
+        return Result.error("网络异常,请稍后重试!");
+    }
+
+    @Override
+    public Result<String> getMaxnumber(String caller, boolean update) {
+        return Result.error("网络异常,请稍后重试!");
+    }
+}

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

@@ -38,6 +38,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_ENABLE(79314, "只能开启已禁用的单据"),
     BIZ_NULLCALLER(79315, "该单据的定义不存在"),
     BIZ_REPORT_NOCALLER(79316, "报表配置不存在"),
+    BIZ_REPORT_NOTCORRECT(79317, "导入数据无效"),
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),

+ 4 - 0
applications/commons/commons-server/pom.xml

@@ -75,6 +75,10 @@
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/CommonsApplication.java

@@ -5,6 +5,7 @@ import com.usoftchina.saas.server.jdbc.EnableDynamicDataSource;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableFeignClients("com.usoftchina.saas")
 @MapperScan("com.usoftchina.saas.commons.mapper")
 @EnableAuthClient
+@EnableCircuitBreaker
 public class CommonsApplication {
     public static void main(String[] args) {
         SpringApplication.run(CommonsApplication.class, args);

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

@@ -142,10 +142,6 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
             length = maxnumbers.getMn_number();
             Integer serialNum = praseSerialNum(maxcode, length);
             if (null != serialNum) {
-                /*detail.setMd_maxno(serialNum);
-                detail.setUpdaterId(userId);
-                detail.setUpdateTime(new Date());
-                maxnumbersdetailMapper.updateByPrimaryKeySelective(detail);*/
                 maxnumbersdetailMapper.updateMaxno(detail.getId(), serialNum, BaseContextHolder.getCompanyId());
             }
 

+ 4 - 0
applications/document/document-dto/pom.xml

@@ -26,6 +26,10 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-dto</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

+ 2 - 1
applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/CustomerFormDTO.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.document.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * 2018-10-23 17:26.
  */
 @Data
-public class CustomerFormDTO implements Serializable {
+public class CustomerFormDTO extends BaseFormDTO implements Serializable {
 
     private CustomerDTO main;
     private List<CustomercontactDTO> items1;

+ 2 - 1
applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/ProductListDTO.java

@@ -1,12 +1,13 @@
 package com.usoftchina.saas.document.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import com.usoftchina.saas.document.entities.Product;
 import com.usoftchina.saas.document.entities.ProductDetail;
 
 import java.io.Serializable;
 import java.util.List;
 
-public class ProductListDTO implements Serializable {
+public class ProductListDTO extends BaseFormDTO implements Serializable {
 
     private Product main;
     private List<ProductDetail> items;

+ 2 - 1
applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/VendorListDTO.java

@@ -1,12 +1,13 @@
 package com.usoftchina.saas.document.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import com.usoftchina.saas.document.entities.Vendor;
 import com.usoftchina.saas.document.entities.Vendorcontact;
 
 import java.io.Serializable;
 import java.util.List;
 
-public class VendorListDTO implements Serializable {
+public class VendorListDTO extends BaseFormDTO implements Serializable {
 
     private Vendor main;
     private List<Vendorcontact> items;

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

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @SpringBootApplication
@@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableFeignClients("com.usoftchina.saas")
 @MapperScan("com.usoftchina.saas.document.mapper")
 @EnableDynamicDataSource
+@ComponentScan(basePackages = {"com.usoftchina.saas"})
 public class DocumentApplication {
     public static void main(String[] args) {
         SpringApplication.run(DocumentApplication.class, args);

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

@@ -19,7 +19,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
 //    Long insert(Banksubledger record);
 
     int insertSelective(Banksubledger record);
-    List<String> selectCode(String code);
+    List<String> selectCode(@Param("code") String code, @Param("companyid") Long companyid);
 
     Banksubledger selectByPrimaryKey(Integer bl_id);
 
@@ -28,6 +28,6 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
     int updateByPrimaryKey(Banksubledger record);
 
     int updateBankcode(@Param("bk_thisamount") Double bk_thisamount, @Param("nowbalance") Double nowbalance,
-                       @Param("bankcode") String bankcode, @Param("symbol") String symbol);
-    Double selectThisamount(String bankcode);
+                       @Param("bankcode") String bankcode, @Param("symbol") String symbol, @Param("companyId") Long companyId);
+    Double selectThisamount(String bankcode, @Param("companyId") Long companyId);
 }

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

@@ -27,4 +27,6 @@ public interface ProductDetailMapper extends CommonBaseMapper<ProductDetail> {
     List<ProductDetail> selectByProdId(Long id);
 
     boolean deleteByProdId(Long id);
+
+    void updatePd_price(Long id);
 }

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

@@ -159,7 +159,10 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         }
         //编号校验
         cu_code = RegexpUtils.replaceSpecCharacter(cu_code);
-        cu_code = pushMaxnubmer(cu_code, cu_id);
+        //检测单号是否修改
+        if (data.isCodeModified()) {
+            cu_code = pushMaxnubmer(cu_code, cu_id);
+        }
         //单号赋值
         customer.setCu_code(cu_code);
         //新增
@@ -513,6 +516,9 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
                 CustomerDTO customerDTO = JSONObject.parseObject(main.getDd_maindata(), CustomerDTO.class);
                 //验证业务员
                 if (!StringUtils.isEmpty(customerDTO.getCu_sellername())) {

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

@@ -108,14 +108,17 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
         String prCode = product.getPr_code().trim().toUpperCase();
         prCode = RegexpUtils.replaceSpecCharacter(prCode);
-        String code = pushMaxnubmer(prCode, product.getId());
+        if (productListDTO.isCodeModified()) {
+            prCode = pushMaxnubmer(prCode, product.getId());
+        }
+
         if(product.getId() == 0){
             //保存
             product.setCompanyId(companyId);
             product.setCreatorId(userId);
             product.setCreateTime(new Date());
             product.setCreatorName(userName);
-            product.setPr_code(code);
+            product.setPr_code(prCode);
             //保存主表
             getMapper().insertSelective(product);
             //保存明细表数据
@@ -130,10 +133,11 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
                 productDetailMapper.batchInsert(productDetailList);
             }
+            productDetailMapper.updatePd_price(product.getId());
             //生成库存初始化数据并过账
             generateProdIOPost(product, productDetailList);
 
-            docBaseDTO = generateMsgObj(product.getId(), code);
+            docBaseDTO = generateMsgObj(product.getId(), prCode);
             //记录LOG
             messageLogService.save(docBaseDTO);
         }else{
@@ -191,7 +195,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
             product.setUpdaterId(BaseContextHolder.getUserId());
             product.setUpdateTime(new Date());
-            product.setPr_code(code);
+            product.setPr_code(prCode);
             getMapper().updateByPrimaryKeySelective(product);
             docBaseDTO = generateMsgObj(product.getId(), product.getPr_code());
             //记录LOG
@@ -618,6 +622,10 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                //数据验证
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
                 Product product = JSONObject.parseObject(main.getDd_maindata(), Product.class);
                 Warehouse warehouse = null;
                 //验证仓库

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

@@ -142,9 +142,12 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             YM = beginDate;
         }
         ve_code = RegexpUtils.replaceSpecCharacter(ve_code);
-        String code = pushMaxnubmer(ve_code, main.getId());
+        if (vendorListDTO.isCodeModified()) {
+            ve_code = pushMaxnubmer(ve_code, main.getId());
+        }
+        //String code = pushMaxnubmer(ve_code, main.getId());
         if(main.getId() == 0){
-            int count = getMapper().getCountByCode(code, companyId);
+            int count = getMapper().getCountByCode(ve_code, companyId);
             if(count > 0){
                 throw new BizException(BizExceptionCode.REPEAT_CODE);
             }
@@ -153,7 +156,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 throw new BizException(BizExceptionCode.REPEAT_NAME);
             }
             //保存主表信息
-            main.setVe_code(code);
+            main.setVe_code(ve_code);
             //更新应付款余额
             Double beginapamount = main.getVe_beginapamount()==null ? new Double(0):main.getVe_beginapamount();
             Double beginprepayamount = main.getVe_beginprepayamount()==null ? new Double(0):main.getVe_beginprepayamount();
@@ -177,14 +180,14 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 vendorcontactMapper.batchInsert(items);
             }
             //记录LOG
-            messageLogService.save(generateMsgObj(mainId, code));
+            messageLogService.save(generateMsgObj(mainId, ve_code));
         }else{
-            main.setVe_code(code);
+            main.setVe_code(ve_code);
             Long mainId = main.getId();
             Vendor oldVendor = getMapper().selectByPrimaryKey(main.getId());
 
-            int count = getMapper().getCountByCode(code, companyId);
-            if (!code.equals(oldVendor.getVe_code())){
+            int count = getMapper().getCountByCode(ve_code, companyId);
+            if (!ve_code.equals(oldVendor.getVe_code())){
                 if (count > 0){
                     throw new BizException(BizExceptionCode.REPEAT_CODE);
                 }
@@ -251,7 +254,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 }
             }
             //记录LOG
-            messageLogService.update(generateMsgObj(main.getId(), code));
+            messageLogService.update(generateMsgObj(main.getId(), ve_code));
         }
 
         //更新应收款余额
@@ -293,7 +296,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             subledgerMapper.insertSelective(subledger);
         }
 
-        return generateMsgObj(main.getId(), code);
+        return generateMsgObj(main.getId(), ve_code);
     }
 
     /**
@@ -453,6 +456,9 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
                 Vendor vendor = JSONObject.parseObject(main.getDd_maindata(), Vendor.class);
                 vendor.setVe_status(Status.ENABLE.getDisplay());
                 vendor.setVe_statuscode(Status.ENABLE.name());

+ 17 - 2
applications/document/document-server/src/main/resources/application.yml

@@ -75,5 +75,20 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 6000
-  ConnectTimeout: 6000
+  ReadTimeout: 5000
+  ConnectTimeout: 5000
+feign:
+  hystrix:
+    enabled: true
+hystrix:
+    command:
+        default:
+            execution:
+              timeout:
+                enabled: true
+              isolation:
+                    thread:
+                        timeoutInMilliseconds: 4000
+logging:
+  level:
+     com.usoftchina.saas.document.mapper: debug

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

@@ -348,18 +348,18 @@
     <select id="selectCode" parameterType="java.lang.String" resultType="java.lang.String">
         select bl_code
         from banksubledger
-        where bl_code = #{bl_code,jdbcType=VARCHAR}
+        where bl_code = #{bl_code,jdbcType=VARCHAR} and companyId = #{companyid}
     </select>
 
     <update id="updateBankcode">
     update bankinformation
     set bk_thisamount = (IFNULL(#{bk_thisamount,jdbcType=DOUBLE},0) ${symbol} #{nowbalance})
-    where bk_bankcode = #{bankcode,jdbcType=VARCHAR}
+    where bk_bankcode = #{bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
   </update>
 
     <select id="selectThisamount" resultType="java.lang.Double" parameterType="java.lang.String">
    select bk_thisamount from bankinformation
-    where bk_bankcode = #{bankcode,jdbcType=VARCHAR}
+    where bk_bankcode = #{bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
   </select>
 
 </mapper>

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

@@ -336,4 +336,7 @@
     <delete id="deleteByProdId" >
         DELETE FROM PRODUCTDETAIL WHERE PD_PRODID=#{id}
     </delete>
+    <update id="updatePd_price" parameterType="long">
+        update productdetail set pd_amount=round(pd_num*pd_price,2) where pd_piid=#{id};
+    </update>
 </mapper>

+ 2 - 2
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/BanksubledgerMapper.java

@@ -22,7 +22,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
 //    Long insert(Banksubledger record);
 
     int insertSelective(Banksubledger record);
-    List<String> selectCode(String code);
+    List<String> selectCode(@Param("code") String code, @Param("companyid") Long companyid);
 
     List<Banksubledger> selectByExample(BanksubledgerExample example);
 
@@ -37,7 +37,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
     int updateByPrimaryKey(Banksubledger record);
 
     int updateBankcode(@Param("bk_thisamount") Double bk_thisamount, @Param("nowbalance") Double nowbalance,
-                       @Param("bankcode") String bankcode, @Param("symbol") String symbol);
+                       @Param("bankcode") String bankcode, @Param("symbol") String symbol, @Param("companyId") Long companyId);
     Double selectThisamount(@Param("bankcode") String bankcode, @Param("companyId") Long companyId);
 
 

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

@@ -220,9 +220,9 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
             Double amount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_bankcode(), BaseContextHolder.getCompanyId());
             Double inamount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_inbankcode(), BaseContextHolder.getCompanyId());
             banksubledgerMapper.updateBankcode(amount, fundtransferdetail.getFtd_nowbalance(),
-                    fundtransferdetail.getFtd_bankcode(), "+");
+                    fundtransferdetail.getFtd_bankcode(), "+", BaseContextHolder.getCompanyId());
             banksubledgerMapper.updateBankcode(inamount, fundtransferdetail.getFtd_nowbalance(),
-                    fundtransferdetail.getFtd_bankcode(), "-");
+                    fundtransferdetail.getFtd_bankcode(), "-", BaseContextHolder.getCompanyId());
 
             //资金账号表
             int bk_id = fundtransferdetail.getFtd_bankid();
@@ -418,7 +418,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
             banksubledger.setBl_spending(fundtransferdetail.getFtd_nowbalance());
             banksubledger.setBl_remark(fundtransferdetail.getFtd_remark());
             banksubledger.setBl_orderamount(fundtransferdetail.getFtd_nowbalance() * -1);
-            if (banksubledgerMapper.selectCode(banksubledger.getBl_code()) == null){
+            if (banksubledgerMapper.selectCode(banksubledger.getBl_code(), BaseContextHolder.getCompanyId()) == null){
                 banksubledgerMapper.insertSelective(banksubledger);
             }else {
                 banksubledgerMapper.updateByPrimaryKeySelective(banksubledger);

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

@@ -127,7 +127,7 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         while (isList.hasNext()){
             Othreceiptsdetail othreceiptsdetail = (Othreceiptsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othreceiptsdetail.getOrd_nowbalance(),
-                    othreceipts.getOr_bankcode(), "+");
+                    othreceipts.getOr_bankcode(), "+", companyId);
 
         }
 
@@ -226,7 +226,7 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         while (isList.hasNext()){
             Othreceiptsdetail othreceiptsdetail = (Othreceiptsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othreceiptsdetail.getOrd_nowbalance(),
-                    othreceipts.getOr_bankcode(), "-");
+                    othreceipts.getOr_bankcode(), "-", BaseContextHolder.getCompanyId());
         }
 
         //资金账号表

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

@@ -167,7 +167,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         while (isList.hasNext()){
             Othspendingsdetail othspendingsdetail = (Othspendingsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othspendingsdetail.getOsd_nowbalance(),
-                    othspendings.getOs_bankcode(), "+");
+                    othspendings.getOs_bankcode(), "+", BaseContextHolder.getCompanyId());
         }
 
         //资金账号表
@@ -261,7 +261,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         while (isList.hasNext()){
             Othspendingsdetail othspendingsdetail = (Othspendingsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othspendingsdetail.getOsd_nowbalance(),
-                    othspendings.getOs_bankcode(), "-");
+                    othspendings.getOs_bankcode(), "-", BaseContextHolder.getCompanyId());
         }
 
         //资金账号表

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

@@ -434,13 +434,13 @@
     <select id="selectCode" parameterType="java.lang.String" resultType="java.lang.String">
         select bl_code
         from banksubledger
-        where bl_code = #{bl_code,jdbcType=VARCHAR}
+        where bl_code = #{bl_code,jdbcType=VARCHAR} and companyId = #{companyid}
     </select>
 
     <update id="updateBankcode">
     update bankinformation
     set bk_thisamount = (IFNULL(#{bk_thisamount,jdbcType=DOUBLE},0) ${symbol} #{nowbalance})
-    where bk_bankcode = #{bankcode,jdbcType=VARCHAR}
+    where bk_bankcode = #{bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
   </update>
 
     <select id="selectThisamount" resultType="java.lang.Double">

+ 2 - 1
applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdInOutFormDTO.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.purchase.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * 2018-10-17 13:45.
  */
 @Data
-public class ProdInOutFormDTO implements Serializable {
+public class ProdInOutFormDTO extends BaseFormDTO implements Serializable {
 
     private ProdInOutDTO main;
     private List<ProdIODetailDTO> items;

+ 3 - 1
applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/PurchaseFormDTO.java

@@ -1,5 +1,7 @@
 package com.usoftchina.saas.purchase.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
 import java.io.Serializable;
 import java.util.List;
 
@@ -9,7 +11,7 @@ import java.util.List;
  * @author yingp
  * @date 2018/10/9
  */
-public class PurchaseFormDTO implements Serializable{
+public class PurchaseFormDTO extends BaseFormDTO implements Serializable{
     private PurchaseDTO main;
     private List<PurchaseDetailDTO> items;
 

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

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
@@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableAuthClient
 @MapperScan("com.usoftchina.saas.purchase.mapper")
 @EnableDynamicDataSource
+@ComponentScan(basePackages = {"com.usoftchina.saas"})
 public class PurchaseApplication {
     public static void main(String[] args) {
         SpringApplication.run(PurchaseApplication.class, args);

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

@@ -153,7 +153,10 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         baseDTO.setCode(pi_inoutno);
         baseDTO.setId(pi_id);
         baseDTO.setName(pi_class);
-        pi_inoutno = pushMaxnubmer(baseDTO);
+        //检测单号是否更改
+        if (formdata.isCodeModified()) {
+            pi_inoutno = pushMaxnubmer(baseDTO);
+        }
         prodInOut.setPi_inoutno(pi_inoutno);
         prodInOut.setPi_prstatus(Status.PAYNONE.getDisplay());
         prodInOut.setPi_prstatuscode(Status.PAYNONE.name());

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

@@ -122,8 +122,12 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         String pu_code = main.getPu_code();
         Purchase purchase = BeanMapper.map(main, Purchase.class);
 
-        //编号校验
-        pu_code = pushMaxnubmer(pu_code, pu_id);
+        //检测编号是否修改
+        if (formdata.isCodeModified()) {
+            //编号校验
+            pu_code = pushMaxnubmer(pu_code, pu_id);
+        }
+
         //单号赋值
         purchase.setPu_code(pu_code);
         //判断更新与保存动作

+ 14 - 2
applications/purchase/purchase-server/src/main/resources/application.yml

@@ -75,5 +75,17 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 6000
-  ConnectTimeout: 6000
+  ReadTimeout: 5000
+  ConnectTimeout: 5000
+feign:
+  hystrix:
+    enabled: true
+hystrix:
+    command:
+        default:
+            execution:
+              timeout:
+                enabled: true
+              isolation:
+                    thread:
+                        timeoutInMilliseconds: 4000

+ 4 - 0
applications/sale/sale-dto/pom.xml

@@ -28,5 +28,9 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>document-dto</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-dto</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 2 - 1
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/ProdInOutFormDTO.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.sale.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * 2018-10-23
  */
 @Data
-public class ProdInOutFormDTO implements Serializable {
+public class ProdInOutFormDTO extends BaseFormDTO implements Serializable {
 
     private ProdInOutDTO main;
     private List<ProdIODetailDTO> items;

+ 4 - 8
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.sale.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author: guq
  * @create: 2018-10-23 11:03
  **/
-public class SaleFormDTO {
+public class SaleFormDTO  extends BaseFormDTO implements Serializable {
     private SaleDTO main;
     private List<SaleDetailDTO> items;
 
@@ -26,11 +29,4 @@ public class SaleFormDTO {
         this.items = items;
     }
 
-    @Override
-    public String toString() {
-        return "PurchaseFormDTO{" +
-                "main=" + main +
-                ", items=" + items +
-                '}';
-    }
 }

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

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
 
 
 /**
@@ -19,6 +20,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 @EnableFeignClients("com.usoftchina.saas")
 @EnableAuthClient
 @EnableDynamicDataSource
+@ComponentScan(basePackages = {"com.usoftchina.saas"})
 public class SaleApplication  {
     public static void main(String[] args) {
         SpringApplication.run(SaleApplication.class, args);

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

@@ -95,6 +95,10 @@ public class SaleList implements Serializable {
 
     private Double sd_sendqty;
 
+    private Double sd_pdsendqty;
+
+    private Double sd_pdsendqtytotal;
+
     private Double sd_pdqty;
 
     private String sd_remark;

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

@@ -103,8 +103,12 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         baseDTO.setName(pi_class);
         baseDTO.setId(pi_id);
         baseDTO.setCode(pi_inoutno);
-        //编号获取
-        pi_inoutno = pushMaxnubmer(baseDTO);
+        //检测编号是否修改
+        if (formdata.isCodeModified()) {
+            //编号获取
+            pi_inoutno = pushMaxnubmer(baseDTO);
+        }
+
         prodInOut.setPi_inoutno(pi_inoutno);
         prodInOut.setPi_class(main.getPi_class());
         prodInOut.setPi_said(main.getPi_said());

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

@@ -117,8 +117,11 @@ public class SaleServiceImpl implements SaleService{
         sale.setSa_sendstatus(Status.UNTURNOUT.getDisplay());
         sale.setSa_sendstatuscode(Status.UNTURNOUT.name());
 
-        //编号校验
-        sa_code = pushMaxnubmer(sa_code, sa_id);
+        //检测编号是否改动
+        if (formdata.isCodeModified()) {
+            //编号校验
+            sa_code = pushMaxnubmer(sa_code, sa_id);
+        }
         //单号赋值
         sale.setSa_code(sa_code);
         //判断更新与保存动作

+ 14 - 2
applications/sale/sale-server/src/main/resources/application.yml

@@ -73,5 +73,17 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 6000
-  ConnectTimeout: 6000
+  ReadTimeout: 5000
+  ConnectTimeout: 5000
+feign:
+  hystrix:
+    enabled: true
+hystrix:
+    command:
+        default:
+            execution:
+              timeout:
+                enabled: true
+              isolation:
+                    thread:
+                        timeoutInMilliseconds: 4000

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

@@ -43,6 +43,8 @@
         <result column="sd_nettotal" property="sd_nettotal" jdbcType="DOUBLE" />
         <result column="sd_delivery" property="sd_delivery" jdbcType="TIMESTAMP" />
         <result column="sd_sendqty" property="sd_sendqty" jdbcType="DOUBLE" />
+        <result column="sd_pdsendqty" property="sd_pdsendqty" jdbcType="DOUBLE" />
+        <result column="sd_pdsendqtytotal" property="sd_pdsendqtytotal" jdbcType="DOUBLE" />
         <result column="sd_yqty" property="sd_yqty" jdbcType="DOUBLE" />
         <result column="sd_pdqty" property="sd_pdqty" jdbcType="DOUBLE" />
         <result column="sd_remark" property="sd_remark" jdbcType="VARCHAR" />

+ 13 - 0
frontend/saas-portal-web/src/components/conenter/home.vue

@@ -276,6 +276,19 @@
           session.account = account
           Session.set(session);
           this.account = Session.getAccount();
+          //有企业信息时 第一次访问页面 跳转企业列表
+          if(account.companies.length>0){
+            //监听访问首页的次数
+            if(!localStorage.VisitCount){
+              localStorage.VisitCount = '1'
+            }else{
+              localStorage.VisitCount = (Number(localStorage.VisitCount) + 1 ) + ''
+            }
+            if(localStorage.VisitCount=='1'){
+              const me = this || _this;
+              me.$router.push({path: '/enterprise'})
+            }
+          }
         }
       })
     },

+ 5 - 0
frontend/saas-web/app/util/FormUtil.js

@@ -178,6 +178,11 @@ Ext.define('saas.util.FormUtil', {
                         model:item.storeModel,
                         data: [],
                         listeners: {
+                            datachanged: function(s, eOpts) {
+                                var g = form.query('detailGridField')[index];
+                                g.fireEvent('datachanged', g, s, eOpts);
+                            },
+                            // 为新增行设置默认值
                             add: function(store, records, index, eOpts) {
                                 Ext.Array.each(records, function(r) {
                                     for(k in defaultValueColumns) {

+ 14 - 156
frontend/saas-web/app/view/core/form/DataMultiCombo.js

@@ -2,9 +2,15 @@
  * Created by zhouy on 2018/10/17.
  */
 Ext.define('saas.view.core.form.DataMultiCombo', {
-    extend: 'Ext.form.field.Trigger',
+    extend: 'Ext.form.field.Tag',
     alias: 'widget.datamulticombo',
-    editable : false,
+    displayField: 'display',
+    valueField: 'value',
+    createNewOnEnter: true,
+    createNewOnBlur: true,
+    filterPickList: true,
+    queryMode: 'local',
+    publishes: 'value',
     matchFieldWidth: true,
     autoScroll:true,
     value: [],
@@ -36,167 +42,19 @@ Ext.define('saas.view.core.form.DataMultiCombo', {
                             datas.push(o);
                         });
                     }else{
-                        saas.util.BaseUtil.showErrorToast('下拉框读取数据为空!');
+                        saas.util.BaseUtil.showErrorToast('岗位数据为空,请维护角色列表!');
                     }
                     me.datas = datas;
+                    me.store=Ext.create('Ext.data.Store', {
+                        fields: ['display','value'],
+                        data : datas
+                    });
                 },
                 failure: function (response, opts) {
-                    saas.util.BaseUtil.showErrorToast('上传失败: ' + response.responseText);
+                    saas.util.BaseUtil.showErrorToast('读取岗位失败: ' + response.responseText);
                 }
             });
         }
         me.callParent(arguments);
-    },
-    listeners:{
-        afterrender:function(f){
-            // this.mon(f.el,{
-            //     mouseover: this.onMouseOver,
-            //     mouseleave:this.onMouseLeave,
-            //     scope:this
-            // });
-        }
-
-    },
-    onMouseOver:function(){
-       this.showMenu();
-    },
-    onMouseLeave:function(a,b,c){
-        this.hideMenu(a.parentEvent?a:b);//el光标离开第二个参数为Event对象
-    },
-    onTriggerClick:function(){
-        this.showMenu();
-    },
-    getMenu: function() {
-        var me = this;
-
-        if (!me.menu) {
-
-            me.menu = Ext.create('Ext.menu.Menu',{
-                style:'max-height: 195px;overflow-y:scroll;',
-                hideOnParentHide: false,
-                items: me.getMenuItems(),
-                listeners:{
-                    mouseleave:me.onMouseLeave,
-                    scope:me,
-                }
-            });
-        }
-        return me.menu;
-    },
-    getMenuItems:function(){
-        var me = this,
-            i = 0,
-            item,
-            items = me.datas,
-            itemsLn = me.datas.length,
-            menuItems = [],
-            value = me.value;
-        if(value=='') value = []
-        for (; i < itemsLn; i++) {
-            item = items[i];
-            var checked = !!value.find(function(v) {
-                return v.value == item[1];
-            });
-            menuItem = new Ext.menu.CheckItem({
-                text: item[0],
-                checked: checked,
-                checkValue:item[1],
-                hideOnClick: false,
-                checkHandler: this.onCheckChange,
-                scope: this
-            });
-            menuItems.push(menuItem);
-        }
-        return menuItems.length ? menuItems : null;
-    },
-    onCheckChange:function(checkItem, checked){
-        var items=this.menu.items.items,
-            checkedItems = [];
-        Ext.Array.each(items,function(item){
-            if(item.checked){
-                checkedItems.push({
-                    text: item.text,
-                    value: item.checkValue
-                });
-            }
-        });
-        this.setValue(checkedItems);
-    },
-
-    setValue: function(items) {
-        var me = this, rawV = '',
-        datas = me.datas,
-        menu = me.menu,
-        items = items==null?[]:items;
-        if(!Ext.isArray(items)) {
-            if(items&&items.indexOf(',')>0){
-                items = items.split(',')
-            }else{
-                items = [items]
-            }
-        }
-        items.map(function(item, index) {
-            if(Ext.isString(item)) {
-                var data = datas.find(function(d) {
-                    return d[0] == item;
-                });
-                items[index] = {
-                    text: data[0],
-                    value: data[1]
-                }
-            }
-        })
-        rawV = items.map(function(item) {
-            return item.text
-        }).join(',');
-        this.setRawValue(rawV);
-        this.value = items;
-        if(menu) {
-            Ext.Array.each(menu.items.items, function(item) {
-                item.setChecked(!!items.find(function(i) {
-                    return i.value == item.checkValue;
-                }));
-            });
-        }
-        this.publishState('value', items);
-    },
-
-    showMenu: function (e, menu) {
-        menu = menu || this.getMenu();
-        /**
-         * menu上边框样式待处理
-         * */
-        if (menu) {
-            if (menu.isVisible()) {
-                    menu.focus();
-            } else {
-                menu.autoFocus = true;
-                if(this.matchFieldWidth){
-                    menu.setWidth(this.bodyEl.getWidth());
-                }
-                if (menu.isMenu) {
-                    menu.showBy(this.inputEl, this.getMenuAlign(),[-1, 0]);
-                } else if (menu.isViewportMenu) {
-                    menu.setDisplayed(!menu.getDisplayed());
-                } else {
-                    menu.show();
-                }
-            }
-        }
-    },
-    hideMenu: function(b) {
-        if (this.hasVisibleMenu()) {
-            var target=b.parentEvent.relatedTarget;
-            if(target){
-                if(!((target.className && target.className.indexOf('x-menu')!=-1) || (target.name && target.name.indexOf(this.name)!=-1))){
-                    this.menu.hide();
-                }
-            }
-        }
-        return this;
-    },
-    hasVisibleMenu: function() {
-        var menu = this.menu;
-        return menu && menu.rendered && menu.isVisible();
     }
 });

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

@@ -167,7 +167,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
         codeField = form.getForm().findField(form._codeField),
         detailCount = form.detailCount,
         viewModel = me.getViewModel(),
-        codeModified = codeField && codeField.isDirty();
+        codeModified = !form.initId || (codeField && codeField.isDirty());
 
         //form里面数据
         var formData = form.getSaveData();

+ 7 - 0
frontend/saas-web/app/view/document/product/FormController.js

@@ -175,5 +175,12 @@ Ext.define('saas.view.document.product.FormController', {
            var m = Ext.util.Format.number(pd_num*pd_price, '0,000.00');
            item.set('pd_amount', m);               
         });
+    },
+
+    onDataChanged: function(grid, store) {
+        var me = this,
+        viewModel = me.getViewModel(),
+        trueData = grid.getTrueData();
+        viewModel.set('qcsz_disabled', trueData.length > 0);
     }
 });

+ 1 - 0
frontend/saas-web/app/view/document/product/FormModel.js

@@ -5,6 +5,7 @@ Ext.define('saas.view.document.product.FormModel', {
     data: {
         id: 0,
         qcsz: true,
+        qcsz_disabled: false
     },
 
     formulas:{

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

@@ -208,6 +208,9 @@ Ext.define('saas.view.document.product.FormPanel', {
         fieldLabel: '期初设置',
         name: 'qcsz',
         ignore: true,
+        bind: {
+            disabled: '{qcsz_disabled}'
+        },
         listeners: {
             change: 'qcsz_change'
         }
@@ -219,6 +222,9 @@ Ext.define('saas.view.document.product.FormPanel', {
         allowEmpty:true,
         // hidden: true,
         deleteDetailUrl:'/api/document/product/deleteDetail',
+        listeners: {
+            datachanged: 'onDataChanged'
+        },
         columns : [
         {
             text : "ID", 
@@ -369,6 +375,7 @@ Ext.define('saas.view.document.product.FormPanel', {
             trueData = detailGrid.getTrueData();
 
             viewModel.set('qcsz', trueData.length > 0);
+            viewModel.set('qcsz_disabled', trueData.length > 0);
             viewModel.notify();
             form.getForm().findField('qcsz').resetOriginalValue();
         }

+ 14 - 1
frontend/saas-web/app/view/sale/report/Sale.js

@@ -192,7 +192,7 @@ Ext.define('saas.view.sale.report.Sale', {
         }
     }, {
         text: '出货数量',
-        dataIndex: 'sd_sendqty',
+        dataIndex: 'sd_pdsendqty',
         exportFormat: 'Quantity',
         xtype: 'numbercolumn',
         renderer : function(v) {
@@ -201,6 +201,19 @@ Ext.define('saas.view.sale.report.Sale', {
             var format = '0.' + xr.join('');
             return Ext.util.Format.number(v, format);
         }
+    }, {
+        text: '出货金额',
+        dataIndex: 'sd_pdsendqtytotal',
+        exportFormat: 'Amount',
+        width: 110,
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        }
+
     }, {
         text : "备注", 
         dataIndex : "sd_remark",

+ 1 - 2
frontend/saas-web/app/view/sys/account/AddWindow.js

@@ -165,7 +165,6 @@ Ext.define('saas.view.sys.account.AddWindow', {
                 fieldLabel: '岗位角色',
                 name: 'roleIds',
                 allowBlank:false,
-                maxLength: 30,
             },{
                 margin:'5 0 0 0',
                 xtype:'displayfield',
@@ -201,7 +200,7 @@ Ext.define('saas.view.sys.account.AddWindow', {
         var o = '';
         var dataField = form.down('[name=roleIds]');
         Ext.Array.each(dataField.value,function(item) {
-            o+=item.value+','
+            o+=item+','
         });
         o = o.substring(0,o.length-1);
         params['username'] = params['mobile'];

+ 7 - 14
frontend/saas-web/app/view/sys/account/EditWindow.js

@@ -11,6 +11,9 @@ Ext.define('saas.view.sys.account.EditWindow', {
         },{
             dataIndex: 'roleNames',
             width: 150
+        },{
+            dataIndex: 'roleIds',
+            hidden:true
         },{
             dataIndex: 'mobile',
             width: 110
@@ -39,10 +42,8 @@ Ext.define('saas.view.sys.account.EditWindow', {
                 xtype:'datamulticombo',
                 dataUrl:'/api/account/role/list',
                 fieldLabel: '岗位角色',
-                name: 'roleNames',
-                allowBlank:true,
-                maxLength: 20,
-                beforeLabelTextTpl: "",
+                name: 'roleIds',
+                allowBlank:false
             },{
                 xtype:'textfield',
                 fieldLabel: '手机号码',
@@ -52,7 +53,6 @@ Ext.define('saas.view.sys.account.EditWindow', {
                 readOnly:true,
                 editable:false,
                 allowBlank:true,
-                maxLength: 30,
                 beforeLabelTextTpl: "",
             },{
                 xtype:'textfield',
@@ -61,7 +61,6 @@ Ext.define('saas.view.sys.account.EditWindow', {
                 readOnly:true,
                 editable:false,
                 allowBlank:true,
-                maxLength: 30,
                 beforeLabelTextTpl: "",
             }]
         }
@@ -71,7 +70,6 @@ Ext.define('saas.view.sys.account.EditWindow', {
         var belong = this.belong;
         me.setLoading(true);
         var form=this.down('form');
-        var combo = this._combo;
         var params = {};
         var names = belong.columns.map(column => column.dataIndex);
 
@@ -86,15 +84,10 @@ Ext.define('saas.view.sys.account.EditWindow', {
 
         //更改参数
         var o = '';
-        Ext.Array.each(params.roleNames,function(item) {
-            o+=item.value+','
+        Ext.Array.each(params.roleIds,function(item) {
+            o+=item+','
         });
         o = o.substring(0,o.length-1);
-
-        if(o==""){
-            saas.util.BaseUtil.showErrorToast('岗位角色未选择,无法保存!')
-        }
-
         var _params = {
             accountId:Number(params['accountId']),
             roleIds:o,

+ 26 - 0
frontend/saas-web/overrides/util/Sorter.js

@@ -0,0 +1,26 @@
+Ext.define('saas.override.util.Sorter', {
+    override: 'Ext.util.Sorter',
+
+    sortFn: function (item1, item2) {
+        var me = this,
+            transform = me._transform,
+            root = me._root,
+            property = me._property,
+            lhs, rhs;
+ 
+        if (root) {
+            item1 = item1[root];
+            item2 = item2[root];
+        }
+ 
+        lhs = item1[property] || '';
+        rhs = item2[property] || '';
+ 
+        if (transform) {
+            lhs = transform(lhs);
+            rhs = transform(rhs);
+        }
+ 
+        return (lhs > rhs) ? 1 : (lhs < rhs ? -1 : 0);
+    },
+});