Browse Source

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

zhuth 7 years ago
parent
commit
c04d75e645
69 changed files with 778 additions and 290 deletions
  1. 53 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/config/WebConfig.java
  2. 19 4
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/MessageLogController.java
  3. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MessagelogMapper.java
  4. 5 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/MessageLogService.java
  5. 38 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MessageLogServiceImpl.java
  6. 12 0
      applications/commons/commons-server/src/main/resources/mapper/MessagelogMapper.xml
  7. 1 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/DocumentApplication.java
  8. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/config/WebConfig.java
  9. 2 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/config/WebConfig.java
  10. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  11. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  12. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  13. 14 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/PurchaseApplication.java
  14. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/config/WebConfig.java
  15. 1 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/ProdInOutController.java
  16. 5 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/ProdIODetailMapper.java
  17. 1 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchasedetailMapper.java
  18. 14 3
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  19. 8 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  20. 21 5
      applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml
  21. 18 5
      applications/purchase/purchase-server/src/main/resources/mapper/PurchasedetailMapper.xml
  22. 1 1
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/ProdIODetailDTO.java
  23. 1 1
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/ProdInOutListDTO.java
  24. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/config/WebConfig.java
  25. 2 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java
  26. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java
  27. 1 1
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java
  28. 26 27
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  29. 13 3
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  30. 20 17
      applications/sale/sale-server/src/main/resources/mapper/ProdIODetailMapper.xml
  31. 6 0
      applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml
  32. 1 1
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/dto/ProdIODetailDTO.java
  33. 1 1
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/dto/ProdInOutListDTO.java
  34. 1 1
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/ProdIODetail.java
  35. 2 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/config/WebConfig.java
  36. 1 1
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/ProdInOutServiceImpl.java
  37. 13 14
      base-servers/auth/auth-dto/src/main/java/com/usoftchina/saas/auth/dto/AuthDTO.java
  38. 1 1
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  39. 1 0
      frontend/saas-web/app/view/core/base/GridPanel.js
  40. 1 1
      frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js
  41. 1 1
      frontend/saas-web/app/view/core/dbfind/MultiDbfindTrigger.js
  42. 0 1
      frontend/saas-web/app/view/document/kind/Kind.js
  43. 1 1
      frontend/saas-web/app/view/document/kind/KindModel.js
  44. 2 0
      frontend/saas-web/app/view/document/other/Warehouse.js
  45. 1 1
      frontend/saas-web/app/view/document/product/FormPanel.js
  46. 1 1
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  47. 0 66
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  48. 1 1
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js
  49. 1 1
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanelController.js
  50. 1 1
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js
  51. 1 1
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanelController.js
  52. 8 2
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  53. 9 3
      frontend/saas-web/app/view/sale/sale/FormPanelController.js
  54. 1 1
      frontend/saas-web/app/view/sale/sale/QueryPanel.js
  55. 2 10
      frontend/saas-web/app/view/sale/saleIn/FormPanel.js
  56. 1 1
      frontend/saas-web/app/view/sale/saleIn/FormPanelController.js
  57. 1 1
      frontend/saas-web/app/view/sale/saleIn/QueryPanel.js
  58. 6 2
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  59. 8 3
      frontend/saas-web/app/view/sale/saleOut/FormPanelController.js
  60. 1 1
      frontend/saas-web/app/view/sale/saleOut/QueryPanel.js
  61. 1 1
      frontend/saas-web/app/view/stock/appropriationInOut/FormPanel.js
  62. 1 1
      frontend/saas-web/app/view/stock/appropriationInOut/FormPanelController.js
  63. 1 1
      frontend/saas-web/app/view/stock/otherIn/FormPanel.js
  64. 25 29
      frontend/saas-web/app/view/stock/otherIn/FormPanelController.js
  65. 1 1
      frontend/saas-web/app/view/stock/otherOut/FormPanel.js
  66. 1 63
      frontend/saas-web/app/view/stock/otherOut/FormPanelController.js
  67. 240 0
      frontend/saas-web/app/view/sys/maxnumbers/DataList.js
  68. 121 0
      frontend/saas-web/app/view/sys/messagelog/DataList.js
  69. 23 0
      frontend/saas-web/resources/json/navigation.json

+ 53 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/config/WebConfig.java

@@ -0,0 +1,53 @@
+package com.usoftchina.saas.commons.config;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+
+/**
+ * @author: guq
+ * @create: 2018-10-30 11:20
+ **/
+
+@Configuration
+public class WebConfig extends WebMvcConfigurationSupport{
+    @Bean
+    public HttpMessageConverter<String> responseBodyConverter() {
+        StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
+        return converter;
+    }
+
+    @Bean
+    public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
+        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+        converter.setObjectMapper(objectMapper);
+        return converter;
+    }
+
+    @Override
+    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+        super.configureMessageConverters(converters);
+        converters.add(responseBodyConverter());
+        converters.add(MappingJacksonHttpMessageConverter());
+    }
+
+    @Override
+    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
+        configurer.favorPathExtension(false);
+    }
+
+}

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

@@ -1,14 +1,16 @@
 package com.usoftchina.saas.commons.controller;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.commons.po.Messagelog;
 import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.service.MessageLogService;
 
+import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.async.DeferredResult;
 
 import java.util.concurrent.CompletableFuture;
@@ -24,6 +26,19 @@ public class MessageLogController {
     @Autowired
     private MessageLogService messageLogService;
 
+    /**
+     * 采购订单列表
+     *
+     * @param page
+     * @param req
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<PageInfo<Messagelog>> getListData(PageRequest page, ListReqDTO req) {
+        PageInfo<Messagelog> listData = messageLogService.getListData(page, req);
+        return Result.success(listData);
+    }
+
     @RequestMapping("/save")
     public DeferredResult<String> save(@RequestBody DocBaseDTO baseDTO) {
         // Create the deferredResult and initiate a callback object, task, with it

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

@@ -28,4 +28,6 @@ public interface MessagelogMapper extends CommonBaseMapper<Messagelog>{
     int updateByPrimaryKeySelective(Messagelog record);
 
     int updateByPrimaryKey(Messagelog record);
+
+    List<Messagelog> selectMessageLog(@Param("con") String con, @Param("companyId") Long companyId);
 }

+ 5 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/MessageLogService.java

@@ -1,10 +1,13 @@
 package com.usoftchina.saas.commons.service;
 
+import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.base.service.CommonBaseService;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.mapper.MessagelogMapper;
 import com.usoftchina.saas.commons.po.Messagelog;
 import com.usoftchina.saas.commons.po.Operation;
+import com.usoftchina.saas.page.PageRequest;
 
 public interface MessageLogService extends CommonBaseService<MessagelogMapper, Messagelog>{
     String save(DocBaseDTO baseDTO);
@@ -24,4 +27,6 @@ public interface MessageLogService extends CommonBaseService<MessagelogMapper, M
     String open(DocBaseDTO baseDTO);
 
     String customizeLog(DocBaseDTO baseDTO, Operation operation);
+
+    PageInfo<Messagelog> getListData(PageRequest page, ListReqDTO req);
 }

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

@@ -1,19 +1,25 @@
 package com.usoftchina.saas.commons.service.impl;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.mapper.MessagelogMapper;
 import com.usoftchina.saas.commons.po.Messagelog;
 import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.service.MessageLogService;
 import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.page.PageRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.MessageSource;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Locale;
 
 /**
@@ -25,6 +31,8 @@ public class MessageLogServiceImpl extends CommonBaseServiceImpl<MessagelogMappe
 
     @Autowired
     private MessageSource messageSource;
+    @Autowired
+    private MessagelogMapper messagelogMapper;
 
     @Override
     public String save(DocBaseDTO baseDTO) {
@@ -72,6 +80,22 @@ public class MessageLogServiceImpl extends CommonBaseServiceImpl<MessagelogMappe
         return log(operation, baseDTO);
     }
 
+    @Override
+    public PageInfo<Messagelog> getListData(PageRequest page, ListReqDTO req) {
+        //设置默认分页
+        if (null == page || page.getSize() == 0 || page.getNumber() == 0) {
+            page = new PageRequest();
+            page.setNumber(1);
+            page.setSize(10);
+        }
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        //查询数据
+        List<Messagelog> lists = getListByMode(req);
+        //取分页信息
+        PageInfo<Messagelog> pageInfo = new PageInfo<Messagelog>(lists);
+        return pageInfo;
+    }
+
     private String log(Operation operation, DocBaseDTO baseDTO) {
         String language = "zh_CN";
         Messagelog msg = new Messagelog();
@@ -90,4 +114,18 @@ public class MessageLogServiceImpl extends CommonBaseServiceImpl<MessagelogMappe
     private String getLocalMessage(String msg, String language) {
        return messageSource.getMessage(msg, null, Locale.CHINA);
     }
+
+
+    private List<Messagelog> getListByMode(ListReqDTO req) {
+        List<Messagelog> list = null;
+        Long companyId = BaseContextHolder.getCompanyId();
+        String con = req.getFinalCondition();
+        if (null == con) {
+            con = "1=1";
+        }
+        if (null == req || StringUtils.isEmpty(req.getMode()) || "MAIN".equals(req.getMode())) {
+            list = messagelogMapper.selectMessageLog(con, companyId);
+        }
+        return list;
+    }
 }

+ 12 - 0
applications/commons/commons-server/src/main/resources/mapper/MessagelogMapper.xml

@@ -304,4 +304,16 @@
       updaterId = #{updaterId,jdbcType=INTEGER}
     where ml_id = #{id,jdbcType=INTEGER}
   </update>
+  <select id="selectMessageLog" resultMap="BaseResultMap">
+    select  *  from messagelog
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and  companyId = #{companyId}
+      </if>
+    </where>
+    order by ml_id
+  </select>
 </mapper>

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

@@ -13,10 +13,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableTransactionManagement
 @EnableFeignClients("com.usoftchina.saas")
 @MapperScan("com.usoftchina.saas.document.mapper")
-public class DocumentApplication  {
+public class DocumentApplication {
     public static void main(String[] args) {
         SpringApplication.run(DocumentApplication.class, args);
     }
 
-
 }

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

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.document.config;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -31,6 +32,7 @@ public class WebConfig extends WebMvcConfigurationSupport{
     public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
         converter.setObjectMapper(objectMapper);
         return converter;

+ 2 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/config/WebConfig.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.money.config;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -31,6 +32,7 @@ public class WebConfig extends WebMvcConfigurationSupport{
     public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
         converter.setObjectMapper(objectMapper);
         return converter;

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

@@ -88,7 +88,7 @@ public class OthreceiptsServiceImpl implements OthreceiptsService {
         if ( othreceipts == null || "".equals(othreceipts)){
             this.insert(othte);
         }else {
-            othreceiptsMapper.updateByPrimaryKey(othreceipts);
+            othreceiptsMapper.updateByPrimaryKeySelective(othreceipts);
         }
     }
 

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

@@ -120,7 +120,7 @@ public class OthspendingsServiceImpl implements OthspendingsService {
         if ( othspendings == null || "".equals(othspendings)){
             this.insert(othsp);
         }else {
-            othspendingsMapper.updateByPrimaryKey(othspendings);
+            othspendingsMapper.updateByPrimaryKeySelective(othspendings);
         }
     }
 

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

@@ -102,7 +102,7 @@ public class PaybalanceServiceImpl implements PaybalanceService {
         if ( paybalance == null || "".equals(paybalance)){
             this.insert(pay);
         }else {
-            paybalanceMapper.updateByPrimaryKey(paybalance);
+            paybalanceMapper.updateByPrimaryKeySelective(paybalance);
         }
     }
 

+ 14 - 1
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/PurchaseApplication.java

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

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

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.purchase.config;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -31,6 +32,7 @@ public class WebConfig extends WebMvcConfigurationSupport{
     public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
         converter.setObjectMapper(objectMapper);
         return converter;

+ 1 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/ProdInOutController.java

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
  * Created by zdw
  * 2018-10-17 11:41.
  */
+@CrossOrigin
 @RestController
 @RequestMapping("/prodinout")
 public class ProdInOutController {

+ 5 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/ProdIODetailMapper.java

@@ -2,6 +2,7 @@ package com.usoftchina.saas.purchase.mapper;
 
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.purchase.po.ProdIODetail;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -29,4 +30,8 @@ public interface ProdIODetailMapper extends CommonBaseMapper<ProdIODetail> {
     List<ProdIODetail> selectByFK(Long id);
 
     void deleteByFK(Long id);
+
+    void calcProdIn(@Param("pi_id") Long pi_id,@Param("pi_class") String pi_class);
+
+    void calcProdOut(@Param("pi_id") Long pi_id,@Param("pi_class") String pi_class);
 }

+ 1 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchasedetailMapper.java

@@ -30,4 +30,5 @@ public interface PurchasedetailMapper extends CommonBaseMapper<Purchase> {
     void updatePurchaseYqty(Integer pu_id);
 
 
+    void calcPurchase(Long pu_id);
 }

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

@@ -153,7 +153,6 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 detail.setCompanyId(companyId);
                 detail.setCreatorId(userId);
                 detail.setCreateTime(new Date());
-
                 insertDetails.add(detail);
             }
             //插入从表
@@ -192,14 +191,15 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
             prodIODetailMapper.batchUpdate(updateDetails);
         }
         baseDTO = getBaseDTOById(pi_id,pi_class,pi_inoutno);
+        //计算金额,未税单价,未税金额等
+        calcProdInout(pi_id,pi_class);
         //更新已转数
+        updateYqty(prodInOut);
         //日志记录
         messageLogService.update(baseDTO);
-        updateYqty(prodInOut);
         return baseDTO;
     }
 
-
     @Override
     @Transactional
     public void delete(Long id) {
@@ -341,6 +341,17 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         }
     }
 
+
+    private void calcProdInout(Long pi_id, String pi_class) {
+        if ("采购验收单".equals(pi_class)) {
+            prodIODetailMapper.calcProdIn(pi_id,pi_class);
+        } else if ("采购验退单".equals(pi_class)) {
+            prodIODetailMapper.calcProdOut(pi_id,pi_class);
+        }
+    }
+
+
+
     private void updateYqty(ProdInOut prodInOut) {
         //更新已转数
         if ("采购验收单".equals(prodInOut.getPi_class())){

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

@@ -172,6 +172,8 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         }
         baseDTO = getBaseDTOById(pu_id);
         //日志
+        //计算金额,未税单价,未税金额等
+        calcPurchase(pu_id);
         messageLogService.save(baseDTO);
         return baseDTO;
     }
@@ -505,4 +507,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         DocBaseDTO baseDTO = new DocBaseDTO(id, code, BillCodeSeq.PURCHASE.getCaller());
         return baseDTO;
     }
+
+    @Transactional
+    private void calcPurchase(Long pu_id) {
+//        purchasedetailMapper.calcPurchase(pu_id);
+    }
+
 }

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

@@ -721,11 +721,10 @@
   </update>
 
   <update id="updatePurchaseYqty" parameterType="java.lang.Integer">
-
-update prodiodetail a
-set a.pd_yqty =ifnull((select  b.pd_outqty  from  (select pd_ioid,sum(pd_outqty) pd_outqty from  prodiodetail left join prodinout on pd_piid = pi_id where pd_piclass='采购验退单'
-and pi_puid=#{id,jdbcType=INTEGER}  GROUP BY pd_ioid) b where ifnull(b.pd_ioid ,0)= a.pd_id ),0)
-where a.pd_piid = (select pi_id from prodinout where pi_puid=#{id,jdbcType=INTEGER} and pi_class='采购验收单')
+  update prodiodetail a
+  set a.pd_yqty =ifnull((select  b.pd_outqty  from  (select pd_ioid,sum(pd_outqty) pd_outqty from  prodiodetail left join prodinout on pd_piid = pi_id where pd_piclass='采购验退单'
+  and pi_puid=#{id,jdbcType=INTEGER}  GROUP BY pd_ioid) b where ifnull(b.pd_ioid ,0)= a.pd_id ),0)
+  where a.pd_piid = (select pi_id from prodinout where pi_puid=#{id,jdbcType=INTEGER} and pi_class='采购验收单')
   </update>
 
 
@@ -739,4 +738,21 @@ where a.pd_piid = (select pi_id from prodinout where pi_puid=#{id,jdbcType=INTEG
     where pd_piid = #{id,jdbcType=INTEGER}
   </delete>
 
+  <update id="calcProdIn">
+    update prodiodetail set pd_netprice = pd_orderprice/(1+pd_taxrate/100) where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodiodetail set pd_total = pd_orderprice*pd_inqty,pd_nettotal = pd_netprice*pd_inqty where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_total = (select sum(pd_total) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_nettotal = (select sum(pd_nettotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
+  </update>
+
+  <update id="calcProdOut">
+    update prodiodetail set pd_netprice = pd_orderprice/(1+pd_taxrate/100) where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodiodetail set pd_total = pd_orderprice*pd_outqty,pd_nettotal = pd_netprice*pd_outqty where pd_piid = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_total = (select sum(pd_total) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
+    update prodinout set pi_nettotal = (select sum(pd_nettotal) from prodiodetail where pd_piid = #{pi_id,jdbcType=INTEGER} ) where pi_id = #{pi_id,jdbcType=INTEGER};
+  </update>
+
+
+
+
 </mapper>

+ 18 - 5
applications/purchase/purchase-server/src/main/resources/mapper/PurchasedetailMapper.xml

@@ -428,12 +428,25 @@
   </select>
 
   <update id="updatePurchaseYqty" parameterType="integer" >
-update purchasedetail
-set pd_yqty=ifnull((select sum(IFNULL(pd_inqty,0)-IFNULL(pd_outqty,0))
-from prodiodetail
-where ((pd_piclass='采购验退单'  and pd_status=99 ) or pd_piclass='采购验收单') and IFNULL(pd_orderid,0)=purchasedetail.pd_id),0)
-where pd_puid=#{pu_id}
+    update purchasedetail
+    set pd_yqty=ifnull((select sum(IFNULL(pd_inqty,0)-IFNULL(pd_outqty,0))
+    from prodiodetail
+    where ((pd_piclass='采购验退单'  and pd_status=99 ) or pd_piclass='采购验收单') and IFNULL(pd_orderid,0)=purchasedetail.pd_id),0)
+    where pd_puid=#{pu_id}
   </update>
 
 
+  <update id="calcPurchase" parameterType="long" >
+    update purchasedetail set pd_netprice = PD_PRICE/(1+pd_taxrate/100) where pd_puid = #{pu_id,jdbcType=INTEGER};
+    update purchasedetail set pd_total = PD_PRICE*pd_qty,pd_nettotal = pd_netprice*pd_inqty where pd_puid = #{pu_id,jdbcType=INTEGER};
+    update purchase set pu_total = (select sum(pd_total) from prodiodetail where pd_puid = #{pi_id,jdbcType=INTEGER} ) where pu_id = #{pu_id,jdbcType=INTEGER};
+    update purchase set p_nettotal = (select sum(pd_nettotal) from prodiodetail where pd_puid = #{pi_id,jdbcType=INTEGER} ) where pu_id = #{pu_id,jdbcType=INTEGER};
+  </update>
+
+
+
+
+
+
+
 </mapper>

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

@@ -66,7 +66,7 @@ public class ProdIODetailDTO implements Serializable {
 
     private Long pd_orderid;
 
-    private Integer pd_sdid;
+    private Long pd_sdid;
 
     private Integer pd_status;
 

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

@@ -117,7 +117,7 @@ public class ProdInOutListDTO extends CommonBaseDTO implements Serializable {
 
     private Integer pd_orderid;
 
-    private Integer pd_sdid;
+    private Long pd_sdid;
 
     private Integer pd_status;
 

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

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.sale.config;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -31,6 +32,7 @@ public class WebConfig extends WebMvcConfigurationSupport{
     public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
         converter.setObjectMapper(objectMapper);
         return converter;

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

@@ -159,8 +159,8 @@ public class SaleController {
 
     @PostMapping("/turnProdOut/{id}")
     public Result turnOut(@PathVariable("id") Long id) {
-        saleService.turnOut(id);
-        return Result.success();
+        DocBaseDTO baseDTO = saleService.turnOut(id);
+        return Result.success(baseDTO);
     }
 
     @GetMapping("/test")

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

@@ -38,4 +38,6 @@ public interface ProdInOutMapper extends CommonBaseMapper<ProdInOut> {
     String validateBatchClose(List<DocBaseDTO> baseDTOs);
 
     String validateBatchOpen(List<DocBaseDTO> baseDTOs);
+
+    void updatePiTotal(Long id);
 }

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

@@ -39,5 +39,5 @@ public interface SaleService {
 
     void open(long id);
 
-    void turnOut(Long id);
+    DocBaseDTO turnOut(Long id);
 }

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

@@ -127,8 +127,6 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 prodIODetailMapper.batchInsert(insertDetails);
             }
             baseDTO = getBaseDTOById(pi_id,pi_class,pi_inoutno);
-            //更新明细金额
-            getTotal(pi_id,pi_class);
             //日志记录
             messageLogService.save(baseDTO);
             return baseDTO;
@@ -155,9 +153,13 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         if (updateDetails.size()>0) {
             prodIODetailMapper.batchUpdate(updateDetails);
         }
+
         baseDTO = getBaseDTOById(pi_id,pi_class,pi_inoutno);
-        //更新已转数
-        updateYqty(prodInOut);
+        ProdInOut prodInOutNow = checkAndReturnOrder(pi_id);
+        //更新明细金额等
+        setTotal(prodInOutNow);
+        //日志
+        messageLogService.update(baseDTO);
         return baseDTO;
 
     }
@@ -179,8 +181,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         //主表删除
         prodInOutMapper.deleteByPrimaryKey(id);
         DocBaseDTO docBaseDTO = getBaseDTOById(id,prodInOut.getPi_class(),prodInOut.getPi_inoutno());
-        //更新已转数
-        updateYqty(prodInOut);
+        //更新明细金额等
+        setTotal(prodInOut);
         //日志
        messageLogService.deleteDetail(docBaseDTO);
     }
@@ -190,8 +192,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         ProdIODetail prodIODetail = prodIODetailMapper.selectByPrimaryKey(id);
         ProdInOut prodInOut = checkAndReturnOrder(prodIODetail.getPd_piid());
         Integer num = prodIODetailMapper.deleteByPrimaryKey(id);
-        //更新已转数
-        updateYqty(prodInOut);
+        //更新明细金额等
+        setTotal(prodInOut);
         DocBaseDTO docBaseDTO = getBaseDTOById(id,prodInOut.getPi_class(),prodInOut.getPi_inoutno());
         //日志
         messageLogService.deleteDetail(docBaseDTO);
@@ -555,22 +557,6 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         //return  caller+Math.abs(Math.random()*100);
     }
 
-    /**
-     * @Description: 更新已转数
-     * @Param: [code, id]
-     * @return: java.lang.String
-     * @Author: wuyx
-     * @Date: 2018/10/23
-     */
-    private void updateYqty(ProdInOut prodInOut) {
-        //更新已转数
-        if ("销售出货单".equals(prodInOut.getPi_class())){
-            prodIODetailMapper.updateSaleYqty(prodInOut.getPi_said());
-        }else if ("销售退货单".equals(prodInOut.getPi_class())){
-            prodIODetailMapper.updateSaleOutYqty(prodInOut.getPi_said());
-        }
-    }
-
     /**
      * @Description
      * @Param: [id]
@@ -591,11 +577,24 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
     }
 
     //更新最新明细总额
-    private void getTotal(Long id,String pi_class) {
-        if(BillCodeSeq.SALEOUT.getName().equals(pi_class)){
+    private void setTotal(ProdInOut prodInOut ) {
+        String pi_class = prodInOut.getPi_class();
+        Long id = prodInOut.getId();
+        if(BillCodeSeq.SALEOUT.getName().equals(pi_class)){//销售出货单
+            //更新明细
             prodIODetailMapper.updatePDSaleOut(id);
-        }else{
+            //更新主表
+            prodInOutMapper.updatePiTotal(id);
+
+            //更新销售已转数
+            prodIODetailMapper.updateSaleYqty(prodInOut.getPi_said());
+        }else{//销售退货单
+            //更新明细
             prodIODetailMapper.updatePDSaleIN(id);
+            //更新主表
+            prodInOutMapper.updatePiTotal(id);
+            //出货单已转数
+            prodIODetailMapper.updateSaleOutYqty(prodInOut.getPi_said());
         }
     }
 

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

@@ -9,6 +9,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.exception.BizException;
@@ -116,6 +117,8 @@ public class SaleServiceImpl implements SaleService{
         sale.setCreateTime(new Date());
         sale.setSa_recorderid(userId);
         sale.setSa_recorder("test");
+        sale.setSa_sendstatus(Status.UNTURNOUT.getDisplay());
+        sale.setSa_sendstatuscode(Status.UNTURNOUT.name());
 
         //编号校验
         sa_code = pushMaxnubmer(sa_code, sa_id);
@@ -383,7 +386,7 @@ public class SaleServiceImpl implements SaleService{
 
     @Override
     @Transactional
-    public void turnOut(Long id) {
+    public DocBaseDTO turnOut(Long id) {
         Integer count = 0;
         double pdQty = 0;
         double pdYqty = 0;
@@ -433,6 +436,7 @@ public class SaleServiceImpl implements SaleService{
         prodInOut.setPi_sacode(sale.getSa_code());
         //设置公司id
         prodInOut.setCompanyId(companyId);
+        prodInOut.setPi_address(sale.getSa_toplace());
 
         prodInOutMapper.insertSelective(prodInOut);
         //插入出货单从表
@@ -448,13 +452,15 @@ public class SaleServiceImpl implements SaleService{
             prodIODetail.setPd_orderid(sale.getId());
             prodIODetail.setPd_ordercode(sale.getSa_code());
             prodIODetail.setPd_orderdetno(saleDetail.getSd_detno());
-            prodIODetail.setPd_orderprice(saleDetail.getSd_price());
+            prodIODetail.setPd_sendprice(saleDetail.getSd_price());
+            prodIODetail.setPd_sdid(saleDetail.getId());
             prodIODetail.setPd_prodid(saleDetail.getSd_prodid());
             prodIODetail.setPd_prodcode(saleDetail.getSd_prodcode());
+            prodIODetail.setPd_taxrate(saleDetail.getSd_taxrate());
             //公司id
             prodIODetail.setCompanyId(companyId);
             //本次转单数
-            prodIODetail.setPd_inqty((saleDetail.getSd_qty()-saleDetail.getSd_yqty()));
+            prodIODetail.setPd_outqty((saleDetail.getSd_qty()-saleDetail.getSd_yqty()));
             prodIODetailMapper.insertSelective(prodIODetail);
             //更新已转数
             saleDetail.setSd_yqty(saleDetail.getSd_qty());
@@ -466,6 +472,10 @@ public class SaleServiceImpl implements SaleService{
         sale.setSa_sendstatuscode(Status.TURNOUT.name());
         //更新存在字段
          saleMapper.updateByPrimaryKeySelective(sale);
+         //日志记录
+         DocBaseDTO baseDTO = new DocBaseDTO(pi_id, pi_inoutno, BillCodeSeq.SALEOUT.getCaller());
+         //messageLogService.customizeLog(baseDTO, Operation.);
+         return baseDTO;
     }
 
     //更新最新销售总额

+ 20 - 17
applications/sale/sale-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -615,12 +615,12 @@
       (
       #{item.pd_piid,jdbcType=INTEGER},#{item.pd_inoutno,jdbcType=VARCHAR},#{item.pd_piclass,jdbcType=VARCHAR},#{item.pd_pdno,jdbcType=INTEGER},#{item.pd_ordercode,jdbcType=VARCHAR},
       #{item.pd_orderdetno,jdbcType=INTEGER},#{item.pd_prodid,jdbcType=INTEGER},#{item.pd_prodcode,jdbcType=VARCHAR},#{item.pd_unit,jdbcType=VARCHAR},
-      #{item.pd_inqty,jdbcType=INTEGER},#{item.pd_outqty,jdbcType=INTEGER},#{item.pd_orderprice,jdbcType=DOUBLE},#{item.pd_sendprice,jdbcType=DOUBLE},#{item.pd_price,jdbcType=DOUBLE},
+      #{item.pd_inqty,jdbcType=DOUBLE},#{item.pd_outqty,jdbcType=DOUBLE},#{item.pd_orderprice,jdbcType=DOUBLE},#{item.pd_sendprice,jdbcType=DOUBLE},#{item.pd_price,jdbcType=DOUBLE},
       #{item.pd_total,jdbcType=DOUBLE},#{item.pd_taxrate,jdbcType=DOUBLE},#{item.pd_netprice,jdbcType=DOUBLE},#{item.pd_nettotal,jdbcType=DOUBLE},
-      #{item.pd_whid,jdbcType=INTEGER},#{item.pd_whcode,jdbcType=VARCHAR},#{item.pd_whname,jdbcType=VARCHAR},#{item.pd_inwhid,jdbcType=INTEGER},#{item.pd_inwhcode,jdbcType=VARCHAR},
-      #{item.pd_inwhname,jdbcType=VARCHAR},#{item.pd_orderid,jdbcType=INTEGER},#{item.pd_sdid,jdbcType=INTEGER},#{item.pd_status,jdbcType=VARCHAR},#{item.pd_remark,jdbcType=VARCHAR},
+      #{item.pd_whid},#{item.pd_whcode,jdbcType=VARCHAR},#{item.pd_whname,jdbcType=VARCHAR},#{item.pd_inwhid},#{item.pd_inwhcode,jdbcType=VARCHAR},
+      #{item.pd_inwhname,jdbcType=VARCHAR},#{item.pd_orderid},#{item.pd_sdid},#{item.pd_status,jdbcType=VARCHAR},#{item.pd_remark,jdbcType=VARCHAR},
       #{item.companyId,jdbcType=INTEGER},#{item.updaterId,jdbcType=INTEGER},#{item.updateTime,jdbcType=TIMESTAMP},#{item.pd_text1,jdbcType=VARCHAR},#{item.pd_text2,jdbcType=VARCHAR},
-      #{item.pd_text3,jdbcType=VARCHAR},#{item.pd_text4,jdbcType=VARCHAR},#{item.pd_text5,jdbcType=VARCHAR},#{item.pd_ym,jdbcType=INTEGER},#{item.pd_yqty,jdbcType=INTEGER}
+      #{item.pd_text3,jdbcType=VARCHAR},#{item.pd_text4,jdbcType=VARCHAR},#{item.pd_text5,jdbcType=VARCHAR},#{item.pd_ym,jdbcType=INTEGER},#{item.pd_yqty,jdbcType=DOUBLE}
       )
     </foreach>
   </insert>
@@ -738,19 +738,22 @@
   </update>
 
   <update id="updateSaleOutYqty" parameterType="long">
-update prodiodetail
-  set a.pd_yqty =IFNULL((select  b.pd_inqty  from  (select pi_said,sum(pd_inqty) pd_inqty from  prodiodetail left join prodinout on pd_piid = pi_id where pd_piclass='销售退货单'
-and pi_said=#{id}  GROUP BY pd_ioid) b where IFNULL(b.pd_ioid ,0)= a.pd_id ),0)
-where a.pd_piid = (select pi_id from prodinout where pi_said=#{id} and pi_class='销售出货单')
+update prodiodetail a
+  set a.pd_yqty =IFNULL(
+    (
+      select  b.pd_inqty  from
+        (select pd_ioid,sum(pd_inqty) pd_inqty from  prodiodetail  where pd_piclass='销售退货单'
+          and pd_piid=#{id}  GROUP BY pd_ioid ) b
+          where IFNULL(b.pd_ioid ,0)= a.pd_id
+     ),0)
+where a.pd_id in (select pd_ioid from prodiodetail where pd_piid=#{id} and pi_class='销售出货单')
   </update>
   <update id="updateSaleYqty" parameterType="long">
-    update saledetail
-    set a.sd_yqty =IFNULL((
-    select  b.pd_ounqty  from  (select pi_said,sum(pd_outqty) pd_outqty
-      from  prodiodetail left join prodinout on pd_piid = pi_id where pd_piclass='销售出货单'
-      and pi_said=#{id}  GROUP BY pi_said) b where IFNULL(b.pd_ioid ,0)= a.pd_id
-      ),0)
-    where a.sd_said = #{id}
+
+    update saledetail a set a.sd_yqty =IFNULL( ( select b.pd_outqty from (
+    select pd_sdid,sum(pd_outqty) pd_outqty from prodiodetail left join
+    prodinout on pd_piid = pi_id where pd_piclass='销售出货单' and pi_said=#{id}
+    GROUP BY pd_sdid) b where IFNULL(b.pd_sdid ,0) = a.sd_id ),0) where a.sd_said =#{id}
   </update>
 
   <select id="selectByFK" parameterType="long" resultMap="BaseResultMap">
@@ -760,14 +763,14 @@ where a.pd_piid = (select pi_id from prodinout where pi_said=#{id} and pi_class=
 
   <update id="updatePDSaleIN" parameterType="long">
    update prodiodetail set
-   pd_total=IFNULL(pd_inqty,0)*IFNULL(pd_orderprice,0),
+   pd_total=IFNULL(pd_inqty,0)*IFNULL(pd_sendprice,0),
    pd_netprice = IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100),
    pd_nettotal = (IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100))*IFNULL(pd_inqty,0)
    where pd_piid=#{id}
   </update>
   <update id="updatePDSaleOut" parameterType="long">
     update prodiodetail set
-    pd_total=IFNULL(pd_outqty,0)*IFNULL(pd_orderprice,0),
+    pd_total=IFNULL(pd_outqty,0)*IFNULL(pd_sendprice,0),
     pd_netprice = IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100),
     pd_nettotal = (IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100))*IFNULL(pd_outqty,0)
     where pd_piid=#{id}

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

@@ -538,4 +538,10 @@
       #{item.id}
     </foreach>
   </select>
+  <update id="updatePiTotal"  parameterType="long">
+   update ProdInOut SET
+   pi_total = round(IFNULL((SELECT sum(round(pd_total,2)) FROM ProdIODetail WHERE pd_piid=pi_id),0),2)
+   where pi_id = #{id}
+  </update>
+
 </mapper>

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

@@ -63,7 +63,7 @@ public class ProdIODetailDTO extends CommonBaseDTO implements Serializable {
 
     private Integer pd_orderid;
 
-    private Integer pd_sdid;
+    private Long pd_sdid;
 
     private Integer pd_status;
 

+ 1 - 1
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/dto/ProdInOutListDTO.java

@@ -122,7 +122,7 @@ public class ProdInOutListDTO extends CommonBaseEntity implements Serializable {
 
     private Integer pd_orderid;
 
-    private Integer pd_sdid;
+    private Long pd_sdid;
 
     private Integer pd_status;
 

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

@@ -59,7 +59,7 @@ public class ProdIODetail extends CommonBaseEntity implements Serializable {
 
     private Long pd_orderid;
 
-    private Integer pd_sdid;
+    private Long pd_sdid;
 
     private Integer pd_status;
 

+ 2 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/config/WebConfig.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.storage.config;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -31,6 +32,7 @@ public class WebConfig extends WebMvcConfigurationSupport{
     public MappingJackson2HttpMessageConverter MappingJacksonHttpMessageConverter(){
         MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
         objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
         converter.setObjectMapper(objectMapper);
         return converter;

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

@@ -34,7 +34,7 @@ import org.springframework.util.StringUtils;
 import java.util.*;
 
 @Service
-public class ProdInoutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper, ProdInOut> implements ProdInOutService {
+public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper, ProdInOut> implements ProdInOutService {
 
     @Autowired
     private ProdIODetailMapper prodIODetailMapper;

+ 13 - 14
base-servers/auth/auth-dto/src/main/java/com/usoftchina/saas/auth/dto/AuthDTO.java

@@ -1,9 +1,8 @@
 package com.usoftchina.saas.auth.dto;
 
-import com.usoftchina.saas.account.dto.CompanyBaseDTO;
+import com.usoftchina.saas.account.dto.AccountDTO;
 
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * @author yingp
@@ -11,37 +10,37 @@ import java.util.List;
  */
 public class AuthDTO implements Serializable{
     private TokenDTO token;
-    private List<CompanyBaseDTO> companies;
+    private AccountDTO account;
 
     public AuthDTO() {
     }
 
-    public AuthDTO(TokenDTO token, List<CompanyBaseDTO> companies) {
+    public AuthDTO(TokenDTO token, AccountDTO account) {
         this.token = token;
-        this.companies = companies;
+        this.account = account;
     }
 
-    public TokenDTO getToken() {
-        return token;
+    public AccountDTO getAccount() {
+        return account;
     }
 
-    public void setToken(TokenDTO token) {
-        this.token = token;
+    public void setAccount(AccountDTO account) {
+        this.account = account;
     }
 
-    public List<CompanyBaseDTO> getCompanies() {
-        return companies;
+    public TokenDTO getToken() {
+        return token;
     }
 
-    public void setCompanies(List<CompanyBaseDTO> companies) {
-        this.companies = companies;
+    public void setToken(TokenDTO token) {
+        this.token = token;
     }
 
     @Override
     public String toString() {
         return "AuthDTO{" +
                 "token=" + token +
-                ", companies=" + companies +
+                ", account=" + account +
                 '}';
     }
 }

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

@@ -62,7 +62,7 @@ public class AuthController {
             JwtInfo info = new JwtInfo(appId, companyId, accountDTO.getId(), accountDTO.getUsername());
             TokenVO tokenVO = JwtHelper.generateToken(info, privateKeyPath, expire);
             TokenDTO tokenDTO = BeanMapper.map(tokenVO, TokenDTO.class);
-            return Result.success(new AuthDTO(tokenDTO, accountDTO.getCompanies()));
+            return Result.success(new AuthDTO(tokenDTO, accountDTO));
         }
         return Result.error(result.getCode(), result.getMessage());
     }

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

@@ -217,6 +217,7 @@ Ext.define('saas.view.core.base.GridPanel', {
             return Ext.Array.insert(columns,0,[{
                 xtype:'actioncolumn',
                 width:70,
+                dataIndex:'actioncolumn',
                 text:'操作',
                 items: [{
                     tooltip: '编辑',

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

@@ -23,7 +23,7 @@ Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
                     var selectRecordArr = selModel.view.ownerCt.selectRecordArr;
                     var index = -1;
                     index = selectRecordArr.findIndex(function(f){
-                        return f.id==record.id
+                        return f.id==(rec&&rec.id?rec.id:0)
                     });
                     if(index>-1){
                         selectRecordArr.splice(index,1);

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

@@ -103,7 +103,7 @@ Ext.define('saas.view.core.dbfind.MultiDbfindTrigger', {
         //判断dbfindtrigger归属
         f.judge(f);
         var panel = f.up('core-tab-panel'),panelEl;
-        if(f.ownerCt.ownerCt.id.indexOf('window-')>-1){
+        if(!f.column&&f.ownerCt.ownerCt.id.indexOf('window-')>-1){
             panelEl = f.ownerCt.ownerCt.getEl();
         }else{
             panelEl = panel.getEl()

+ 0 - 1
frontend/saas-web/app/view/document/kind/Kind.js

@@ -187,7 +187,6 @@ Ext.define('saas.view.document.kind.Kind', {
                 xtype: 'actioncolumn',
                 align : 'center',
                 items: [{
-                    icon:'/api/resource/images/16/lock_bg.png',
                     tooltip: '锁定',
                     iconCls:'',
                     getClass: function(v, meta, rec) {

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

@@ -234,7 +234,7 @@ Ext.define('saas.view.document.kind.KindModel', {
                 }
             }
         },
-        productunit: {
+        productunit: {    
             fields:[
                 {name: 'id', type: 'int'},
                 {name: 'pu_name',  type: 'string'}

+ 2 - 0
frontend/saas-web/app/view/document/other/Warehouse.js

@@ -3,6 +3,8 @@ Ext.define('saas.view.document.other.Warehouse', {
     xtype: 'other-warehouse',
     autoScroll: true,
     layout:'fit',
+    _openUrl:'/api/document/warehouse/open',
+    _closeUrl:'/api/document/warehouse/close',
     defaultType:'warehouse',
     tbar: ['->',{
         xtype:'button',

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

@@ -54,7 +54,7 @@ Ext.define('saas.view.document.product.FormPanel', {
         editable:false,
         xtype : "remotecombo", 
         storeUrl:'/api/document/producttype/getCombo',
-        name : "pr_type", 
+        name : "pr_kind", 
         fieldLabel : "物料类型", 
         allowBlank : false, 
         columnWidth : 0.25,

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

@@ -115,7 +115,7 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             },
             {

+ 0 - 66
frontend/saas-web/app/view/purchase/purchase/FormPanelController.js

@@ -74,72 +74,6 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
 
                 }
             },
-            // 从表-物料编号
-            'dbfindtrigger[name=pd_prodcode]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        //数据接口
-                        dataUrl: '/api/document/product/list',
-                        addXtype: 'document-product-formpanel',
-                        addTitle: '物料资料',
-                        //放大镜赋值设置
-                        dbfinds:[{
-                            from:'pr_code',to:'pd_prodcode'
-                        }, {
-                            from:'pr_unit',to:'pd_unit'
-                        }, {
-                            from: 'pr_detail', to: 'pr_detail'
-                        }],
-                        //联想查询条件
-                        dbCondition:"CONCAT(pr_code, pr_detail) like '{0}%'",
-                        //联想设置
-                        dbtpls:[{
-                            field:'pr_code',width:100
-                        },{
-                            field:'pr_detail',width:100
-                        }],
-                        //窗口字段设置
-                        dbSearchFields:[{
-                            emptyText:'输入物料编号或物料名称',
-                            xtype : "textfield", 
-                            name : "search", 
-                            conditionExpression:"CONCAT(pr_code, pr_detail) like '{0}%'",
-                            allowBlank : true, 
-                            columnWidth : 0.25
-                        }],
-                        //窗口列设置
-                        dbColumns:[{
-                            "text": "物料ID",
-                            "flex": 0,
-                            "dataIndex": "pr_id",
-                            "width": 0,
-                            "xtype": "",
-                            "items": null
-                        },{
-                            "text": "物料编号",
-                            "flex": 1,
-                            "dataIndex": "pr_code",
-                            "width": 100,
-                            "xtype": "",
-                            "items": null
-                        }, {
-                            "text": "物料名称",
-                            "flex": 1,
-                            "dataIndex": "pr_detail",
-                            "xtype": "",
-                            "items": null
-                        }, {
-                            "text": "物料规格",
-                            "flex": 0,
-                            "dataIndex": "pr_spec",
-                            "width": 200,
-                            "xtype": "",
-                            "items": null
-                        }]
-                    }) ;   
-
-                }
-            },
             //从表多选放大镜赋值关系 以及 tpl模板
             'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){

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

@@ -140,7 +140,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             },
             {

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

@@ -69,7 +69,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanelController', {
                 }
             },
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pd_prodcode]':{
+            'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',

+ 1 - 1
frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js

@@ -132,7 +132,7 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             },
             {

+ 1 - 1
frontend/saas-web/app/view/purchase/purchaseOut/FormPanelController.js

@@ -68,7 +68,7 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanelController', {
                 }
             },
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pd_prodcode]':{
+            'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',

+ 8 - 2
frontend/saas-web/app/view/sale/sale/FormPanel.js

@@ -85,7 +85,7 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             }, {
                 text : "名称", 
@@ -114,7 +114,13 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                 format:'0,000.00',
                 items : null,
                 summaryType: 'sum'
-            }, 
+            },  {
+                text : "已转数", 
+                dataIndex : "sd_yqty", 
+                width : 120.0, 
+                xtype : "numbercolumn", 
+                format:'0.00'
+            },
             {
                 text : "单价", 
                 editor : {

+ 9 - 3
frontend/saas-web/app/view/sale/sale/FormPanelController.js

@@ -19,7 +19,7 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
                             },{
                                 from:'cu_name',to:'sa_custname'
                             },{
-                                from:'ca_address',to:'sa_address'
+                                from:'ca_address',to:'sa_toplace'
                         }],
                         dbtpls:[{
                             field:'cu_code',width:100
@@ -94,7 +94,7 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
                 }
             },
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=sd_prodcode]':{
+            'multidbfindtrigger[name=sd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',
@@ -203,7 +203,13 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('转单成功');
+                var intValue = localJson.data.id,
+                    codeValue= localJson.data.code,
+                    name = localJson.data.name;
+                openTab('sale-saleout-formpanel',name+"("+codeValue+")",codeValue+intValue, {
+                    initId: intValue
+                });
+                showToast('转单成功');    
             }
         })
         .catch(function(res) {

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

@@ -82,7 +82,7 @@ Ext.define('saas.view.sale.sale.QueryPanel', {
         }, {
             text: '销售单号',
             dataIndex: 'sa_code',
-            width: 120
+            width: 180
         }, {
             text: '客户编号',
             dataIndex: 'sa_cucode',

+ 2 - 10
frontend/saas-web/app/view/sale/saleIn/FormPanel.js

@@ -83,7 +83,7 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             }, {
                 text : "名称", 
@@ -111,15 +111,7 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
                 xtype : "numbercolumn", 
                 format:'0',
                 summaryType: 'sum'
-            },            {
-                text : "已转数", 
-                dataIndex : "pd_yqty", 
-                width : 120.0, 
-                xtype : "numbercolumn", 
-                format:'0',
-                summaryType: 'sum'
-            }, 
-            {
+            }, {
                 text : "仓库", 
                 dataIndex : "pd_whname", 
                 width : 120.0, 

+ 1 - 1
frontend/saas-web/app/view/sale/saleIn/FormPanelController.js

@@ -93,7 +93,7 @@ Ext.define('saas.view.sale.saleIn.FormPanelController', {
                     }) ;   
                 }
             },
-            'dbfindtrigger[name=pd_prodcode]':{
+            'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',

+ 1 - 1
frontend/saas-web/app/view/sale/saleIn/QueryPanel.js

@@ -79,7 +79,7 @@ Ext.define('saas.view.sale.saleIn.QueryPanel', {
         }, {
             text: '单据编号',
             dataIndex: 'pi_inoutno',
-            width: 150
+            width: 180
         }, {
             text: '单据状态',
             dataIndex: 'pi_status',

+ 6 - 2
frontend/saas-web/app/view/sale/saleOut/FormPanel.js

@@ -94,7 +94,7 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             }, {
                 text : "名称", 
@@ -164,7 +164,10 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
                 text : "金额", 
                 dataIndex : "pd_total", 
                 width : 120.0, 
-                xtype : "numbercolumn"
+                xtype : "numbercolumn",
+                editor : {
+                    xtype : "numberfield"
+                },
             }, {
                 text : "税率", 
                 dataIndex : "pd_taxrate", 
@@ -205,6 +208,7 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
         format : "Y-m-d", 
         xtype : "datefield", 
         name : "pi_recorddate", 
+        
         fieldLabel : "录入日期",
         readOnly:true
     }, {

+ 8 - 3
frontend/saas-web/app/view/sale/saleOut/FormPanelController.js

@@ -90,7 +90,7 @@ Ext.define('saas.view.sale.saleout.FormPanelController', {
                     }) ;   
                 }
             },
-            'dbfindtrigger[name=pd_prodcode]':{
+            'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         conditionCode:'pr_code',
@@ -258,8 +258,13 @@ Ext.define('saas.view.sale.saleout.FormPanelController', {
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('转单成功');
-              
+                var intValue = localJson.data.id,
+                    codeValue= localJson.data.code,
+                    name = localJson.data.name;
+                openTab('sale-salein-formpanel',name+"("+codeValue+")",codeValue+intValue, {
+                    initId: intValue
+                });
+                showToast('转单成功');    
             }
         })
         .catch(function(res) {

+ 1 - 1
frontend/saas-web/app/view/sale/saleOut/QueryPanel.js

@@ -79,7 +79,7 @@ Ext.define('saas.view.sale.saleout.QueryPanel', {
         }, {
             text: '单据编号',
             dataIndex: 'pi_inoutno',
-            width: 150
+            width: 180
         }, {
             text: '单据状态',
             dataIndex: 'pi_status',

+ 1 - 1
frontend/saas-web/app/view/stock/appropriationInOut/FormPanel.js

@@ -136,7 +136,7 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             },
             {

+ 1 - 1
frontend/saas-web/app/view/stock/appropriationInOut/FormPanelController.js

@@ -115,7 +115,7 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanelController', {
                 }
             },            
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pd_prodcode]':{
+            'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',

+ 1 - 1
frontend/saas-web/app/view/stock/otherIn/FormPanel.js

@@ -134,7 +134,7 @@ Ext.define('saas.view.stock.otherIn.FormPanel', {
                     queryMode : "local", 
                     store : null, 
                     valueField : "value", 
-                    xtype : "dbfindtrigger"
+                    xtype : "multidbfindtrigger"
                 }
             },
             {

+ 25 - 29
frontend/saas-web/app/view/stock/otherIn/FormPanelController.js

@@ -6,40 +6,35 @@ Ext.define('saas.view.stock.otherIn.FormPanelController', {
         var me = this;
         this.control({
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pu_vendcode]': {
-                beforerender: function (f) {
-                    Ext.apply(f, {
-                        dataUrl: '/api/document/vendor/list',
+            'dbfindtrigger[name=pi_vendname]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        dataUrl:'/api/document/vendor/list',
                         // dataUrl:'http://localhost:9480/vendor/list',
                         addXtype: 'document-vendor-formpanel',
                         addTitle: '供应商资料',
-                        dbfinds: [{
-                            from: 've_id',
-                            to: 'pi_vendid'
-                        }, {
-                            from: 've_code',
-                            to: 'pu_vendcode'
-                        }, {
-                            from: 've_name',
-                            to: 'pu_vendname'
+                        dbfinds:[{
+                            from:'id',to:'pi_vendid'
+                        },{
+                            from:'ve_code',to:'pi_vendcode'
+                        },{
+                            from:'ve_name',to:'pi_vendname'
                         }],
-                        dbtpls: [{
-                            field: 've_code',
-                            width: 100
-                        }, {
-                            field: 've_name',
-                            width: 100
+                        dbtpls:[{
+                            field:'ve_code',width:100
+                        },{
+                            field:'ve_name',width:100
                         }],
-                        dbColumns: [{
-                            conditionCode: 've_id',
+                        dbColumns:[{
+                            conditionCode:'id',
                             "text": "供应商ID",
                             "flex": 0,
-                            "dataIndex": "ve_id",
+                            "dataIndex": "id",
                             "width": 0,
                             "xtype": "",
                             "items": null
-                        }, {
-                            conditionCode: 've_code',
+                        },{
+                            conditionCode:'ve_code',
                             "text": "供应商编号",
                             "flex": 1,
                             "dataIndex": "ve_code",
@@ -47,14 +42,14 @@ Ext.define('saas.view.stock.otherIn.FormPanelController', {
                             "xtype": "",
                             "items": null
                         }, {
-                            conditionCode: 've_name',
+                            conditionCode:'ve_name',
                             "text": "供应商名称",
                             "flex": 1,
                             "dataIndex": "ve_name",
                             "xtype": "",
                             "items": null
                         }, {
-                            conditionCode: 've_type',
+                            conditionCode:'ve_type',
                             "text": "供应商类型",
                             "flex": 0,
                             "dataIndex": "ve_type",
@@ -62,8 +57,9 @@ Ext.define('saas.view.stock.otherIn.FormPanelController', {
                             "xtype": "",
                             "items": null
                         }]
-                    });
-                },
+                    }) ;   
+
+                }
             },
             //放大镜赋值关系 以及 tpl模板
             'dbfindtrigger[name=pi_custname]': {
@@ -118,7 +114,7 @@ Ext.define('saas.view.stock.otherIn.FormPanelController', {
                 }
             },
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pd_prodcode]': {
+            'multidbfindtrigger[name=pd_prodcode]': {
                 beforerender: function (f) {
                     Ext.apply(f, {
                         dataUrl: '/api/document/product/list',

+ 1 - 1
frontend/saas-web/app/view/stock/otherOut/FormPanel.js

@@ -131,7 +131,7 @@ Ext.define('saas.view.stock.otherOut.FormPanel', {
                     queryMode: "local",
                     store: null,
                     valueField: "value",
-                    xtype: "dbfindtrigger"
+                    xtype: "multidbfindtrigger"
                 }
             },
             {

+ 1 - 63
frontend/saas-web/app/view/stock/otherOut/FormPanelController.js

@@ -5,72 +5,10 @@ Ext.define('saas.view.stock.otherOut.FormPanelController', {
     init: function (form) {
         var me = this;
         this.control({
-            //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pu_vendcode]': {
-                beforerender: function (f) {
-                    Ext.apply(f, {
-                        dataUrl: '/api/document/vendor/list',
-                        // dataUrl:'http://localhost:9480/vendor/list',
-                        addXtype: 'document-vendor-formpanel',
-                        addTitle: '供应商资料',
-                        dbfinds: [{
-                            from: 've_id',
-                            to: 'pi_vendid'
-                        }, {
-                            from: 've_code',
-                            to: 'pu_vendcode'
-                        }, {
-                            from: 've_name',
-                            to: 'pu_vendname'
-                        }],
-                        dbtpls: [{
-                            field: 've_code',
-                            width: 100
-                        }, {
-                            field: 've_name',
-                            width: 100
-                        }],
-                        dbColumns: [{
-                            conditionCode: 've_id',
-                            "text": "供应商ID",
-                            "flex": 0,
-                            "dataIndex": "ve_id",
-                            "width": 0,
-                            "xtype": "",
-                            "items": null
-                        }, {
-                            conditionCode: 've_code',
-                            "text": "供应商编号",
-                            "flex": 1,
-                            "dataIndex": "ve_code",
-                            "width": 100,
-                            "xtype": "",
-                            "items": null
-                        }, {
-                            conditionCode: 've_name',
-                            "text": "供应商名称",
-                            "flex": 1,
-                            "dataIndex": "ve_name",
-                            "xtype": "",
-                            "items": null
-                        }, {
-                            conditionCode: 've_type',
-                            "text": "供应商类型",
-                            "flex": 0,
-                            "dataIndex": "ve_type",
-                            "width": 200,
-                            "xtype": "",
-                            "items": null
-                        }]
-                    });
-
-                }
-            },
             //放大镜赋值关系 以及 tpl模板
             'dbfindtrigger[name=pi_vendname]':{
                 beforerender:function(f){
                     Ext.apply(f,{
-
                         dataUrl:'/api/document/vendor/list',
                         // dataUrl:'http://localhost:9480/vendor/list',
                         addXtype: 'document-vendor-formpanel',
@@ -173,7 +111,7 @@ Ext.define('saas.view.stock.otherOut.FormPanelController', {
                 }
             },            
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pd_prodcode]':{
+            'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',

+ 240 - 0
frontend/saas-web/app/view/sys/maxnumbers/DataList.js

@@ -0,0 +1,240 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.sys.maxnumbers.DataList', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'sys-maxnumbers-datalist',
+    autoScroll: true,
+    frame:true,
+    layout:'fit',
+    dataUrl:'http://192.168.253.31:8920/number/list',
+    saveUrl:'http://192.168.253.31:8920/number/save',
+    deleteUrl:'http://192.168.253.31:8920/number/delete/',
+
+    tbar: [{
+        cls:'x-formpanel-btn-orange',
+        xtype:'button',
+        text:'查询',
+        listeners: {
+            click: 'onQuery'
+        }
+    },'->',{
+        cls:'x-formpanel-btn-blue',
+        xtype:'button',
+        text:'新增',
+        listeners: {
+            click: 'onAdd'
+        }
+    }],
+
+    columns : [{
+        text : "id", 
+        width : 0, 
+        dataIndex : "id", 
+        xtype : "numbercolumn", 
+    },{
+        text : "单据caller", 
+        width : 200.0, 
+        dataIndex : "mn_caller", 
+        xtype : "", 
+    }, 
+    {
+        text : "单据前缀", 
+        dataIndex : "mn_leadcode", 
+        width : 120.0, 
+        xtype : "", 
+    }, 
+    {
+        text : "单据规则", 
+        dataIndex : "mn_rule", 
+        width : 220.0, 
+        xtype : "", 
+    },{
+        text : "规则长度", 
+        dataIndex : "mn_number", 
+        width : 120.0, 
+        xtype : "", 
+    }],
+
+    dbSearchFields: [],
+    condition:'',
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.columns = me.insertFirstColumn(me.columns);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 10,
+                data: [],
+                proxy: {
+                    timeout:8000,
+                    type: 'ajax',
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = "";
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            number: op._page,
+                            size: store.pageSize,
+                            condition: JSON.stringify(condition)
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    emptyMsg: "暂无数据",
+                    store: me.store,
+                    displayMsg: '显示{0}到{1}条数据,共有{2}条',
+                    beforePageText: "当前第",
+                    afterPageText: "页,共{0}页"
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    onVastDeal:function(url,type){
+        var form = this.ownerCt;
+        var grid = this;
+        var data = grid.getGridSelected(type);
+        if(!data){
+            showToast('请勾选符合条件的行进行操作。');
+            return false;
+        }
+        if(data&&data.length>0){
+            var params = JSON.stringify({baseDTOs:data});
+            form.BaseUtil.request({
+                    url: url,
+                    params: params,
+                    method: 'POST',
+                    async:false
+                })
+                .then(function() {
+                    showToast('操作成功');
+                    grid.store.load();
+                })
+                .catch(function(response) {
+                    showToast('操作失败');
+                });
+        }else{
+            showToast('请勾选至少一条明细。');
+        }
+    },
+
+    listeners:{
+        itemClick: function(view,record,a,index,c) {
+            var classList = c.target.classList.value;
+            var form = view.ownerCt.ownerCt;
+            if(classList.indexOf('fa-pencil')>-1){
+                var config = {};
+                config.initId = record.get('id');
+                openTab(form._formXtype, '修改'+form._title, form._formXtype+config.initId, config);
+            }else if(classList.indexOf('fa-trash-o')>-1){
+                //删除
+                var id = record.get('id');
+                if(id){
+                    form.BaseUtil.request({
+                        url: form._deleteUrl+id,
+                        method: 'POST',
+                    })
+                    .then(function(localJson) {
+                        if(localJson.success){
+                            //解析参数
+                            showToast('删除成功');
+                            view.ownerCt.store.load();
+                        }
+                    })
+                    .catch(function() {
+                        showToast('删除失败');
+                    });
+                }
+            }
+        }
+    },
+
+    getCondition: function(f,conditionExpression){
+        var condition = '';
+        if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
+            
+        }else if(f.xtype=='textfield'&&f.value!=''){
+            condition=conditionExpression.replace(new RegExp("\\{0}","g"), f.value);
+        }
+        if(condition.length>0){
+            condition+= ' AND ';
+        }
+        return condition;
+    },
+
+    insertFirstColumn:function(columns){
+        var me=this;
+        if(columns.length>0 && columns[0].xtype!='actioncolumn'){
+            return Ext.Array.insert(columns,0,[{
+                xtype:'actioncolumn',
+                width:70,
+                dataIndex:'actioncolumn',
+                text:'操作',
+                items: [{
+                    tooltip: '编辑',
+                    iconCls: 'x-fa fa-pencil fa-fw',
+                    scope:this
+                },{
+                    text:'删除',
+                    iconCls:'x-fa fa-trash-o fa-fw',
+                    tooltip: '删除',
+                    scope:this
+                }]
+            }]);
+        }
+        return columns;
+    },
+
+    getGridSelected:function(type){
+        var isErrorSelect = false;
+        var checkField = this.statusCodeField;
+        var me = this,
+        items = me.selModel.getSelection(),
+        data = new Array() ;
+        Ext.each(items, function(item, index){
+            if(!Ext.isEmpty(item.data[me.idField])){
+                var o = new Object();
+                if(me.idField){
+                    o['id'] = item.data[me.idField];
+                }
+                if(me.codeField){
+                    o['code'] = item.data[me.codeField];
+                }
+                if(type&&type==item.data[checkField]){
+                    isErrorSelect = true
+                }
+                data.push(o);
+            }
+        });
+        if(isErrorSelect){
+            return false;
+        }
+		return data;
+    }
+
+})
+
+

+ 121 - 0
frontend/saas-web/app/view/sys/messagelog/DataList.js

@@ -0,0 +1,121 @@
+Ext.define('saas.view.sys.messagelog.DataList', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'sys-messagelog-datalist',
+
+    autoScroll: true,
+    frame:true,
+    layout:'fit',
+    dataUrl:'http://192.168.253.58:8920/messagelog/list',
+    saveUrl:'/api/common/number/save',
+    deleteUrl:'/api/common/number/delete/',
+
+    tbar: [{
+        cls:'x-formpanel-btn-orange',
+        xtype:'button',
+        text:'查询',
+        listeners: {
+            click: 'onQuery'
+        }
+    },'->'],
+
+    //字段属性
+    columns : [{
+        text : "id", 
+        width : 0, 
+        dataIndex : "id", 
+        xtype : "numbercolumn",   
+    },{
+        text : "单据编号", 
+        width : 200.0, 
+        dataIndex : "ml_code", 
+    }, 
+    {
+        text : "操作", 
+        dataIndex : "ml_content", 
+        width : 220.0, 
+    }, 
+    {
+        text : "结果", 
+        dataIndex : "ml_result", 
+        width : 120.0, 
+    }, 
+    {
+        text : "处理人", 
+        dataIndex : "ml_man", 
+        width : 200, 
+    }],
+
+    dbSearchFields: [],
+    condition:'',
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 10,
+                data: [],
+                proxy: {
+                    timeout:8000,
+                    type: 'ajax',
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = "";
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            number: op._page,
+                            size: store.pageSize,
+                            condition: JSON.stringify(condition)
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    emptyMsg: "暂无数据",
+                    store: me.store,
+                    displayMsg: '显示{0}到{1}条数据,共有{2}条',
+                    beforePageText: "当前第",
+                    afterPageText: "页,共{0}页"
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    getCondition: function(f,conditionExpression){
+        var condition = '';
+        if((f.xtype == 'checkbox' || f.xtype == 'radio')&&f.logic){
+            
+        }else if(f.xtype=='textfield'&&f.value!=''){
+            condition=conditionExpression.replace(new RegExp("\\{0}","g"), f.value);
+        }
+        if(condition.length>0){
+            condition+= ' AND ';
+        }
+        return condition;
+    },
+
+    refresh:function(){
+        //debugger
+    }
+
+});

+ 23 - 0
frontend/saas-web/resources/json/navigation.json

@@ -246,4 +246,27 @@
             "leaf": true
         }]
     }]
+},{
+    "text": "设置",
+    "iconCls": "x-fa fa-cog",
+    "items": [{
+        "text": "系统设置",
+        "items": [{
+            "id":"sys-messagelog-datalist",
+            "text": "操作日志",
+            "viewType": "sys-messagelog-datalist",
+            "leaf": true
+        }, {
+            "id":"sys-messagelog-datalist",
+            "text": "单据编码规则",
+            "viewType": "sys-maxnumbers-datalist",
+            "leaf": true
+        }, {
+            "id":"product-list-formpanel",
+            "text": "结账/反结账",
+            "viewType": "document-product-basepanel",
+            "addType":"document-product-formpanel",
+            "leaf": true
+        }]
+    }]
 }]