Browse Source

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

hy 8 years ago
parent
commit
fc95aa3e67
99 changed files with 9348 additions and 180 deletions
  1. 3 2
      README.md
  2. 2 2
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberService.java
  3. 26 5
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  4. 59 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Status.java
  5. 4 6
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/MaxnumberController.java
  6. 4 0
      applications/document/document-dto/pom.xml
  7. 61 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customer.java
  8. 112 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustomerList.java
  9. 32 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customeraddress.java
  10. 32 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customercontact.java
  11. 0 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/AddressController.java
  12. 34 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CustomerController.java
  13. 11 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerListMapper.java
  14. 18 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerMapper.java
  15. 21 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomeraddressMapper.java
  16. 19 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomercontactMapper.java
  17. 17 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/CustomerService.java
  18. 60 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  19. 108 0
      applications/document/document-server/src/main/resources/mapper/CustomerListMapper.xml
  20. 377 0
      applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml
  21. 236 0
      applications/document/document-server/src/main/resources/mapper/CustomeraddressMapper.xml
  22. 212 0
      applications/document/document-server/src/main/resources/mapper/CustomercontactMapper.xml
  23. 0 22
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/Status.java
  24. 1 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  25. 18 7
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  26. 1 1
      applications/purchase/purchase-server/src/main/resources/application.yml
  27. 2 2
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseListMapper.xml
  28. 5 1
      applications/sale/pom.xml
  29. 15 0
      applications/sale/sale-dto/pom.xml
  30. 54 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleDTO.java
  31. 56 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleDetailDTO.java
  32. 36 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java
  33. 21 0
      applications/sale/sale-server/pom.xml
  34. 19 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/SaleApplication.java
  35. 166 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java
  36. 11 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleListMapper.java
  37. 43 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  38. 40 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaledetailMapper.java
  39. 53 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/Sale.java
  40. 53 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleDetail.java
  41. 1941 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleExample.java
  42. 105 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java
  43. 1651 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaledetailExample.java
  44. 43 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java
  45. 478 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  46. 63 0
      applications/sale/sale-server/src/main/resources/application.yml
  47. 132 0
      applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml
  48. 543 0
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  49. 495 0
      applications/sale/sale-server/src/main/resources/mapper/SaledetailMapper.xml
  50. 4 0
      applications/storage/storage-server/pom.xml
  51. 33 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/ProdIODetailMapper.java
  52. 20 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/ProdInOutListMapper.java
  53. 53 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/ProdInOutService.java
  54. 323 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/ProdInoutServiceImpl.java
  55. 11 1
      base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyDTO.java
  56. 65 0
      base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyRegDTO.java
  57. 41 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java
  58. 18 5
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/CompanyController.java
  59. 16 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountMapper.java
  60. 9 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/Account.java
  61. 14 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java
  62. 16 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java
  63. 1 1
      base-servers/account/account-server/src/main/resources/mapper/AccountCompanyMapper.xml
  64. 17 4
      base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml
  65. 118 0
      base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/controller/AccountControllerTest.java
  66. 75 0
      base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/controller/CompanyControllerTest.java
  67. 8 8
      base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/service/AccountServiceTest.java
  68. 4 6
      base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/service/CompanyServiceTest.java
  69. 22 0
      framework/core/src/main/java/com/usoftchina/saas/base/Result.java
  70. 1 0
      framework/core/src/main/java/com/usoftchina/saas/exception/ExceptionCode.java
  71. 12 0
      framework/core/src/main/java/com/usoftchina/saas/utils/JsonUtils.java
  72. 17 1
      framework/server-starter/src/main/java/com/usoftchina/saas/server/ServerAutoConfiguration.java
  73. 22 0
      framework/test-starter/pom.xml
  74. 118 0
      framework/test-starter/src/main/java/com.usoftchina.saas.test/BaseControllerTest.java
  75. 16 0
      framework/test-starter/src/main/java/com.usoftchina.saas.test/TestConstant.java
  76. 3 3
      framework/test-starter/src/main/java/com.usoftchina.saas.test/TestContextListener.java
  77. 1 1
      framework/test-starter/src/main/resources/META-INF/spring.factories
  78. 26 32
      frontend/saas-web/app/util/FormUtil.js
  79. 31 23
      frontend/saas-web/app/view/core/form/FormPanel.js
  80. 58 23
      frontend/saas-web/app/view/core/form/FormPanelController.js
  81. 4 2
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  82. 7 9
      frontend/saas-web/app/view/core/form/field/DetailGridField.js
  83. 4 0
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  84. 153 0
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  85. 158 0
      frontend/saas-web/app/view/money/payBalance/FormPanelController.js
  86. 5 0
      frontend/saas-web/app/view/money/payBalance/FormPanelModel.js
  87. 196 0
      frontend/saas-web/app/view/money/payBalance/QueryPanel.js
  88. 117 0
      frontend/saas-web/app/view/money/payBalance/QueryPanelController.js
  89. 5 0
      frontend/saas-web/app/view/money/payBalance/QueryPanelModel.js
  90. 2 1
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  91. 2 1
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js
  92. 2 1
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js
  93. 2 1
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  94. 2 1
      frontend/saas-web/app/view/sale/saleIn/FormPanel.js
  95. 2 1
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  96. 2 1
      frontend/saas-web/app/view/stock/otherIn/FormPanel.js
  97. 2 1
      frontend/saas-web/app/view/stock/otherOut/FormPanel.js
  98. 10 0
      pom.xml
  99. 7 2
      script/mysql/init/account.sql

+ 3 - 2
README.md

@@ -1,4 +1,4 @@
-# 项目结构:
+# 项目结构
 
 ```
 ├─saas-platform
@@ -66,7 +66,7 @@
 │  │
 ```
 
-# 开发环境:
+# 开发环境
 
 > 数据库
 
@@ -82,6 +82,7 @@
 | 类型 | 地址 | 账号 | 密码 | 说明 |
 | ---- | :----: | :----: | :----: | ---- |
 | rabbitmq | 192.168.0.176:5672 | saas | select123*** | 消息中间件 [控制台](http://192.168.0.176:15672)|
+| redis | 192.168.253.12:6379 | | | 内存数据库 |
 
 
 > 服务器

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

@@ -19,7 +19,7 @@ public interface MaxnumberService {
      * @Date: 2018/10/19 api/commons
      */
     @PostMapping("/number/pushMaxnubmer")
-    public String pushMaxnubmer(@RequestParam("count") Integer count,@RequestParam("code") String code,
+    public Result<String> pushMaxnubmer(@RequestParam("count") Integer count,@RequestParam("code") String code,
                                 @RequestParam("caller") String caller);
     /**
      * @Description 获取单号
@@ -29,5 +29,5 @@ public interface MaxnumberService {
      * @Date: 2018/10/22
      */
     @PostMapping("/getMaxnumber")
-    public Result getMaxnumber(@RequestParam("caller") String caller, @RequestParam("update") boolean update);
+    public Result<String> getMaxnumber(@RequestParam("caller") String caller, @RequestParam("update") boolean update);
 }

+ 26 - 5
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -2,15 +2,36 @@ package com.usoftchina.saas.commons.exception;
 
 import com.usoftchina.saas.exception.BaseExceptionCode;
 
+/**
+ * 业务异常Code类
+ * Code范围:
+ *      1. 采购:      70000-71999
+ *      2. 销售:      72000-73999
+ *      3. 资金:      74000-75999
+ *      4. 库存:      76000-77999
+ *      5. 基础资料:   78000-79999
+ *  @author chenwei
+ *  @Date 2018/10/23
+ */
 public enum BizExceptionCode implements BaseExceptionCode {
 
+    //基础资料
+    MAX_NUM_OUTOF_BOUNDS(78000, "流水号长度大于最大设定的长度"),
+    NULL_CODE(79000, "单据编号为空"),
+    NULL_CODERULE(79100, "单据规则不存在,请先确定单据生成规则"),
+    CODE_EXISTS(79200, "单据编号已存在"),
+    BIZ_CLOSE(79301, "只能关闭已审核的单据"),
+    BIZ_OPEN(79002, "只能打开已关闭的单据"),
 
-    // 业务异常
-    MAX_NUM_OUTOF_BOUNDS(52000, "流水号长度大于最大设定的长度"),
-    NULL_CODE(53000, "单据编号为空"),
-    NULL_CODERULE(54000, "单据规则不存在,请先确定单据生成规则"),
-    CODE_EXISTS(55000, "单据编号已存在");
+    //采购
 
+    //销售
+
+    //资金
+
+    //库存
+
+    ;
     private int code;
     private String message;
 

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

@@ -0,0 +1,59 @@
+package com.usoftchina.saas.commons.po;
+
+public enum Status {
+    /**
+     * 在录入
+     */
+    UNAUDITED("未审核"),
+
+    /**
+     * 已关闭
+     */
+    CLOSE("已关闭"),
+
+    /**
+     * 已审核
+     */
+    AUDITED("已审核"),
+
+    /**
+     * 未入库
+     */
+    UNTURNIN("未入库"),
+
+    /**
+     * 部分入库
+     */
+    PART2IN("部分入库"),
+
+    /**
+     * 已入库
+     */
+    TURNIN("已入库"),
+
+    /**
+     * 部分出库
+     */
+    PARTOUT("部分出库"),
+
+    /**
+     * 已出库
+     */
+    TURNOUT("已出库"),
+
+    /**
+     * 未出库
+     */
+    UNTURNOUT("未出库")
+
+
+    ;
+    private String display;
+    private Status(String display){
+        this.display = display;
+    }
+
+    public String getDisplay(){
+        return display;
+    }
+}

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

@@ -25,15 +25,13 @@ public class MaxnumberController {
     private MaxnumberService maxnumberService;
 
     @PostMapping("/getMaxnumber")
-    public Result getMaxnumber(String caller, boolean update) {
-        Map<String, Object> code = new HashMap<>();
-        code.put("code",  maxnumberService.getMaxnumner(caller, update));
-        return Result.success(code);
+    public Result<String> getMaxnumber(String caller, boolean update) {
+        return Result.success(maxnumberService.getMaxnumner(caller, update));
     }
 
     @PostMapping("/pushMaxnubmer")
-    public String pushMaxnubmer(@RequestParam("count") Integer count, @RequestParam("code") String code,
+    public Result<String> pushMaxnubmer(@RequestParam("count") Integer count, @RequestParam("code") String code,
                                 @RequestParam("caller") String caller) {
-        return maxnumberService.pushMaxnubmer(count, code, caller);
+        return Result.success(maxnumberService.pushMaxnubmer(count, code, caller));
     }
 }

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

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

+ 61 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customer.java

@@ -0,0 +1,61 @@
+package com.usoftchina.saas.document.entities;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+@Data
+public class Customer extends CommonBaseEntity implements Serializable {
+
+    private String cu_code;
+
+    private String cu_name;
+
+    private String cu_uu;
+
+    private String cu_type;
+
+    private Date cu_begindate;
+
+    private Double cu_beginaramount;
+
+    private Double cu_beginprerecamount;
+
+    private Double cu_promisedays;
+
+    private Double cu_taxrate;
+
+    private Integer cu_sellerid;
+
+    private String cu_sellercode;
+
+    private String cu_sellername;
+
+    private Double cu_credit;
+
+    private String cu_status;
+
+    private String cu_statuscode;
+
+    private Integer cu_recordmanid;
+
+    private String cu_recordman;
+
+    private Date cu_recorddate;
+
+    private String cu_text1;
+
+    private String cu_text2;
+
+    private String cu_text3;
+
+    private String cu_text4;
+
+    private String cu_text5;
+
+    private Double cu_leftamount;
+
+    private Double cu_recamount;
+
+}

+ 112 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustomerList.java

@@ -0,0 +1,112 @@
+package com.usoftchina.saas.document.entities;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Created by zdw
+ * 2018-10-23 15:35.
+ */
+
+@Data
+public class CustomerList extends CommonBaseEntity{
+//customer
+    private String cu_code;
+
+    private String cu_name;
+
+    private String cu_uu;
+
+    private String cu_type;
+
+    private Date cu_begindate;
+
+    private Double cu_beginaramount;
+
+    private Double cu_beginprerecamount;
+
+    private Double cu_promisedays;
+
+    private Double cu_taxrate;
+
+    private Integer cu_sellerid;
+
+    private String cu_sellercode;
+
+    private String cu_sellername;
+
+    private Double cu_credit;
+
+    private String cu_status;
+
+    private String cu_statuscode;
+
+    private Integer cu_recordmanid;
+
+    private String cu_recordman;
+
+    private Date cu_recorddate;
+
+    private String cu_text1;
+
+    private String cu_text2;
+
+    private String cu_text3;
+
+    private String cu_text4;
+
+    private String cu_text5;
+
+    private Double cu_leftamount;
+
+    private Double cu_recamount;
+//customeraddress
+
+    private Long ca_cuid;
+
+    private Integer ca_detno;
+
+    private String ca_person;
+
+    private Integer ca_phone;
+
+    private Integer ca_default;
+
+    private String ca_text1;
+
+    private String ca_text2;
+
+    private String ca_text3;
+
+    private String ca_text4;
+
+    private String ca_text5;
+
+    private String ca_address;
+//    Customercontact
+
+    private Long cc_cuid;
+
+    private Integer cc_detno;
+
+    private String cc_name;
+
+    private Integer cc_tel;
+
+    private String cc_qq;
+
+    private String cc_email;
+
+    private String cc_text1;
+
+    private String cc_text2;
+
+    private String cc_text3;
+
+    private String cc_text4;
+
+    private String cc_text5;
+
+}

+ 32 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customeraddress.java

@@ -0,0 +1,32 @@
+package com.usoftchina.saas.document.entities;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class Customeraddress extends CommonBaseEntity implements Serializable {
+
+    private Long ca_cuid;
+
+    private Integer ca_detno;
+
+    private String ca_person;
+
+    private Integer ca_phone;
+
+    private Integer ca_default;
+
+    private String ca_text1;
+
+    private String ca_text2;
+
+    private String ca_text3;
+
+    private String ca_text4;
+
+    private String ca_text5;
+
+    private String ca_address;
+
+}

+ 32 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customercontact.java

@@ -0,0 +1,32 @@
+package com.usoftchina.saas.document.entities;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class Customercontact extends CommonBaseEntity implements Serializable {
+
+    private Long cc_cuid;
+
+    private Integer cc_detno;
+
+    private String cc_name;
+
+    private Integer cc_tel;
+
+    private String cc_qq;
+
+    private String cc_email;
+
+    private String cc_text1;
+
+    private String cc_text2;
+
+    private String cc_text3;
+
+    private String cc_text4;
+
+    private String cc_text5;
+
+}

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

@@ -1,7 +1,5 @@
 package com.usoftchina.saas.document.controller;
 
-
-import com.sun.org.apache.regexp.internal.RE;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.document.entities.Address;
 import com.usoftchina.saas.document.service.AddressService;

+ 34 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CustomerController.java

@@ -1,9 +1,43 @@
 package com.usoftchina.saas.document.controller;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.document.entities.CustomerList;
+import com.usoftchina.saas.document.service.CustomerService;
+import com.usoftchina.saas.page.PageRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 /**
  * Created by zdw
  * 2018-10-23 11:39.
  */
 
+@RestController
+@RequestMapping("/customer")
 public class CustomerController {
+
+    @Autowired
+    private CustomerService customerService;
+
+    /**
+     * 采购订单列表
+     *
+     * @param page
+     * @param req
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<PageInfo<CustomerList>> getListData(PageRequest page, ListReqDTO req) {
+        PageInfo<CustomerList> listData = customerService.getListData(page, req);
+        return Result.success(listData);
+    }
+
+
+
+
+
 }

+ 11 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerListMapper.java

@@ -0,0 +1,11 @@
+package com.usoftchina.saas.document.mapper;
+
+import com.usoftchina.saas.document.entities.CustomerList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CustomerListMapper {
+    List<CustomerList> selectCustomerListByCondition(@Param("con") String con, @Param("companyId") Long companyId);
+    List<CustomerList> selectCustomerBycondition(@Param("con") String con, @Param("companyId") Long companyId);
+}

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

@@ -0,0 +1,18 @@
+package com.usoftchina.saas.document.mapper;
+
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import com.usoftchina.saas.document.entities.Customer;
+
+public interface CustomerMapper extends CommonBaseMapper<Customer> {
+    int deleteByPrimaryKey(Integer cu_id);
+
+    int insert(Customer record);
+
+    int insertSelective(Customer record);
+
+    Customer selectByPrimaryKey(Integer cu_id);
+
+    int updateByPrimaryKeySelective(Customer record);
+
+    int updateByPrimaryKey(Customer record);
+}

+ 21 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomeraddressMapper.java

@@ -0,0 +1,21 @@
+package com.usoftchina.saas.document.mapper;
+
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import com.usoftchina.saas.document.entities.Customer;
+import com.usoftchina.saas.document.entities.Customeraddress;
+
+public interface CustomeraddressMapper extends CommonBaseMapper<Customer> {
+    int deleteByPrimaryKey(Integer ca_id);
+
+    int insert(Customeraddress record);
+
+    int insertSelective(Customeraddress record);
+
+    Customeraddress selectByPrimaryKey(Integer ca_id);
+
+    int updateByPrimaryKeySelective(Customeraddress record);
+
+    int updateByPrimaryKeyWithBLOBs(Customeraddress record);
+
+    int updateByPrimaryKey(Customeraddress record);
+}

+ 19 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomercontactMapper.java

@@ -0,0 +1,19 @@
+package com.usoftchina.saas.document.mapper;
+
+
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import com.usoftchina.saas.document.entities.Customercontact;
+
+public interface CustomercontactMapper extends CommonBaseMapper<Customercontact> {
+    int deleteByPrimaryKey(Integer cc_id);
+
+    int insert(Customercontact record);
+
+    int insertSelective(Customercontact record);
+
+    Customercontact selectByPrimaryKey(Integer cc_id);
+
+    int updateByPrimaryKeySelective(Customercontact record);
+
+    int updateByPrimaryKey(Customercontact record);
+}

+ 17 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/CustomerService.java

@@ -0,0 +1,17 @@
+package com.usoftchina.saas.document.service;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.service.CommonBaseService;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.document.entities.Customer;
+import com.usoftchina.saas.document.entities.CustomerList;
+import com.usoftchina.saas.document.mapper.CustomerMapper;
+import com.usoftchina.saas.page.PageRequest;
+
+/**
+ * Created by zdw
+ * 2018-10-23 15:26.
+ */
+public interface CustomerService extends CommonBaseService<CustomerMapper, Customer> {
+    PageInfo<CustomerList> getListData(PageRequest page, ListReqDTO req);
+}

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

@@ -0,0 +1,60 @@
+package com.usoftchina.saas.document.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.entities.Customer;
+import com.usoftchina.saas.document.entities.CustomerList;
+import com.usoftchina.saas.document.mapper.CustomerListMapper;
+import com.usoftchina.saas.document.mapper.CustomerMapper;
+import com.usoftchina.saas.document.service.CustomerService;
+import com.usoftchina.saas.page.PageRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * Created by zdw
+ * 2018-10-23 15:29.
+ */
+@Service
+public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, Customer> implements CustomerService {
+
+    @Autowired
+    private CustomerListMapper customerListMapper;
+
+    @Override
+    public PageInfo<CustomerList> 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<CustomerList> lists = getListByMode(req);
+        //取分页信息
+        PageInfo<CustomerList> pageInfo = new PageInfo<CustomerList>(lists);
+        return pageInfo;
+    }
+
+    private List<CustomerList> getListByMode(ListReqDTO req) {
+        List<CustomerList> 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 = customerListMapper.selectPurchaseBycondition(con, companyId);
+        } else {
+            list = customerListMapper.selectPurchaseListByCondition(con, companyId);
+        }
+        return list;
+    }
+}

+ 108 - 0
applications/document/document-server/src/main/resources/mapper/CustomerListMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usoftchina.saas.document.mapper.CustomerListMapper">
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.document.entities.CustomerList">
+    <id column="pi_id" jdbcType="INTEGER" property="id" />
+    <result column="pi_inoutno" jdbcType="VARCHAR" property="pi_inoutno" />
+    <result column="pi_class" jdbcType="VARCHAR" property="pi_class" />
+    <result column="pi_date" jdbcType="TIMESTAMP" property="pi_date" />
+    <result column="pi_vendid" jdbcType="INTEGER" property="pi_vendid" />
+    <result column="pi_vendcode" jdbcType="VARCHAR" property="pi_vendcode" />
+    <result column="pi_vendname" jdbcType="VARCHAR" property="pi_vendname" />
+    <result column="pi_custid" jdbcType="INTEGER" property="pi_custid" />
+    <result column="pi_custcode" jdbcType="VARCHAR" property="pi_custcode" />
+    <result column="pi_custname" jdbcType="VARCHAR" property="pi_custname" />
+    <result column="pi_puid" jdbcType="INTEGER" property="pi_puid" />
+    <result column="pi_pucode" jdbcType="VARCHAR" property="pi_pucode" />
+    <result column="pi_said" jdbcType="INTEGER" property="pi_said" />
+    <result column="pi_sacode" jdbcType="VARCHAR" property="pi_sacode" />
+    <result column="pi_total" jdbcType="DOUBLE" property="pi_total" />
+    <result column="pi_recordmanid" jdbcType="INTEGER" property="pi_recordmanid" />
+    <result column="pi_recordman" jdbcType="VARCHAR" property="pi_recordman" />
+    <result column="pi_recorddate" jdbcType="TIMESTAMP" property="pi_recorddate" />
+    <result column="pi_status" jdbcType="VARCHAR" property="pi_status" />
+    <result column="pi_statuscode" jdbcType="VARCHAR" property="pi_statuscode" />
+    <result column="pi_printstatus" jdbcType="VARCHAR" property="pi_printstatus" />
+    <result column="pi_printstatuscode" jdbcType="VARCHAR" property="pi_printstatuscode" />
+    <result column="pi_text1" jdbcType="VARCHAR" property="pi_text1" />
+    <result column="pi_text2" jdbcType="VARCHAR" property="pi_text2" />
+    <result column="pi_text3" jdbcType="VARCHAR" property="pi_text3" />
+    <result column="pi_text4" jdbcType="VARCHAR" property="pi_text4" />
+    <result column="pi_text5" jdbcType="VARCHAR" property="pi_text5" />
+    <result column="pi_address" jdbcType="VARCHAR" property="pi_address" />
+    <result column="pd_piid" jdbcType="INTEGER" property="pd_piid" />
+    <result column="pd_inoutno" jdbcType="VARCHAR" property="pd_inoutno" />
+    <result column="pd_piclass" jdbcType="VARCHAR" property="pd_piclass" />
+    <result column="pd_pdno" jdbcType="INTEGER" property="pd_pdno" />
+    <result column="pd_ordercode" jdbcType="VARCHAR" property="pd_ordercode" />
+    <result column="pd_orderdetno" jdbcType="INTEGER" property="pd_orderdetno" />
+    <result column="pd_prodid" jdbcType="INTEGER" property="pd_prodid" />
+    <result column="pd_prodcode" jdbcType="VARCHAR" property="pd_prodcode" />
+    <result column="pd_unit" jdbcType="VARCHAR" property="pd_unit" />
+    <result column="pd_inqty" jdbcType="INTEGER" property="pd_inqty" />
+    <result column="pd_outqty" jdbcType="INTEGER" property="pd_outqty" />
+    <result column="pd_orderprice" jdbcType="DOUBLE" property="pd_orderprice" />
+    <result column="pd_sendprice" jdbcType="DOUBLE" property="pd_sendprice" />
+    <result column="pd_price" jdbcType="DOUBLE" property="pd_price" />
+    <result column="pd_total" jdbcType="DOUBLE" property="pd_total" />
+    <result column="pd_taxrate" jdbcType="DOUBLE" property="pd_taxrate" />
+    <result column="pd_netprice" jdbcType="DOUBLE" property="pd_netprice" />
+    <result column="pd_nettotal" jdbcType="DOUBLE" property="pd_nettotal" />
+    <result column="pd_whid" jdbcType="INTEGER" property="pd_whid" />
+    <result column="pd_whcode" jdbcType="VARCHAR" property="pd_whcode" />
+    <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />
+    <result column="pd_inwhid" jdbcType="INTEGER" property="pd_inwhid" />
+    <result column="pd_inwhcode" jdbcType="VARCHAR" property="pd_inwhcode" />
+    <result column="pd_inwhname" jdbcType="VARCHAR" property="pd_inwhname" />
+    <result column="pd_orderid" jdbcType="INTEGER" property="pd_orderid" />
+    <result column="pd_sdid" jdbcType="INTEGER" property="pd_sdid" />
+    <result column="pd_status" jdbcType="INTEGER" property="pd_status" />
+    <result column="companyid" jdbcType="INTEGER" property="companyId" />
+    <result column="updaterid" jdbcType="INTEGER" property="updaterId" />
+    <result column="updatetime" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="pd_text1" jdbcType="VARCHAR" property="pd_text1" />
+    <result column="pd_text2" jdbcType="VARCHAR" property="pd_text2" />
+    <result column="pd_text3" jdbcType="VARCHAR" property="pd_text3" />
+    <result column="pd_text4" jdbcType="VARCHAR" property="pd_text4" />
+    <result column="pd_text5" jdbcType="VARCHAR" property="pd_text5" />
+    <result column="pd_ym" jdbcType="INTEGER" property="pd_ym" />
+    <result column="pd_yqty" jdbcType="INTEGER" property="pd_yqty" />
+    <result column="pd_ioid" jdbcType="INTEGER" property="pd_ioid" />
+
+  </resultMap>
+
+
+  <select id="selectCustomerListByCondition" parameterType="string" resultMap="BaseResultMap">
+    select  *  from purchase left join purchasedetail on pu_id=pd_puid
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and   companyId = #{companyId}
+      </if>
+    </where>  order by pu_id,pd_detno
+  </select>
+
+  <select id="selectCustomerBycondition" parameterType="string" resultMap="BaseResultMap">
+    select  *  from prodinout
+    <where>
+      <if test="begin != null">
+        pu_date &gt;= ${begin}
+      </if>
+      <if test="end!= null">
+        AND  pu_date &lt;= ${end}
+      </if>
+      <if test="status != null">
+        AND pu_status=${status}
+      </if>
+      <if test="keyword != null">
+        AND ${keyword}
+      </if>
+    </where>
+  </select>
+
+
+
+
+</mapper>

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

@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usoftchina.saas.document.mapper.CustomerMapper">
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.document.entities.Customer">
+    <id column="cu_id" jdbcType="INTEGER" property="id" />
+    <result column="cu_code" jdbcType="VARCHAR" property="cu_code" />
+    <result column="cu_name" jdbcType="VARCHAR" property="cu_name" />
+    <result column="cu_uu" jdbcType="VARCHAR" property="cu_uu" />
+    <result column="cu_type" jdbcType="VARCHAR" property="cu_type" />
+    <result column="cu_begindate" jdbcType="TIMESTAMP" property="cu_begindate" />
+    <result column="cu_beginaramount" jdbcType="DOUBLE" property="cu_beginaramount" />
+    <result column="cu_beginprerecamount" jdbcType="DOUBLE" property="cu_beginprerecamount" />
+    <result column="cu_promisedays" jdbcType="DOUBLE" property="cu_promisedays" />
+    <result column="cu_taxrate" jdbcType="DOUBLE" property="cu_taxrate" />
+    <result column="cu_sellerid" jdbcType="INTEGER" property="cu_sellerid" />
+    <result column="cu_sellercode" jdbcType="VARCHAR" property="cu_sellercode" />
+    <result column="cu_sellername" jdbcType="VARCHAR" property="cu_sellername" />
+    <result column="cu_credit" jdbcType="DOUBLE" property="cu_credit" />
+    <result column="cu_status" jdbcType="VARCHAR" property="cu_status" />
+    <result column="cu_statuscode" jdbcType="VARCHAR" property="cu_statuscode" />
+    <result column="cu_recordmanid" jdbcType="INTEGER" property="cu_recordmanid" />
+    <result column="cu_recordman" jdbcType="VARCHAR" property="cu_recordman" />
+    <result column="cu_recorddate" jdbcType="TIMESTAMP" property="cu_recorddate" />
+    <result column="companyid" jdbcType="INTEGER" property="companyId" />
+    <result column="updaterId" jdbcType="INTEGER" property="updaterId" />
+    <result column="updatetime" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="cu_text1" jdbcType="VARCHAR" property="cu_text1" />
+    <result column="cu_text2" jdbcType="VARCHAR" property="cu_text2" />
+    <result column="cu_text3" jdbcType="VARCHAR" property="cu_text3" />
+    <result column="cu_text4" jdbcType="VARCHAR" property="cu_text4" />
+    <result column="cu_text5" jdbcType="VARCHAR" property="cu_text5" />
+    <result column="cu_leftamount" jdbcType="DOUBLE" property="cu_leftamount" />
+    <result column="cu_recamount" jdbcType="DOUBLE" property="cu_recamount" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    cu_id, cu_code, cu_name, cu_uu, cu_type, cu_begindate, cu_beginaramount, cu_beginprerecamount, 
+    cu_promisedays, cu_taxrate, cu_sellerid, cu_sellercode, cu_sellername, cu_credit, 
+    cu_status, cu_statuscode, cu_recordmanid, cu_recordman, cu_recorddate, companyid, 
+    updaterId, updatetime, cu_text1, cu_text2, cu_text3, cu_text4, cu_text5, cu_leftamount, 
+    cu_recamount
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from customer
+    where cu_id = #{cu_id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from customer
+    where cu_id = #{cu_id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="com.usoftchina.saas.document.entities.Customer">
+    insert into customer (cu_id, cu_code, cu_name, 
+      cu_uu, cu_type, cu_begindate, 
+      cu_beginaramount, cu_beginprerecamount, cu_promisedays, 
+      cu_taxrate, cu_sellerid, cu_sellercode, 
+      cu_sellername, cu_credit, cu_status, 
+      cu_statuscode, cu_recordmanid, cu_recordman, 
+      cu_recorddate, companyid, updaterId, 
+      updatetime, cu_text1, cu_text2, 
+      cu_text3, cu_text4, cu_text5, 
+      cu_leftamount, cu_recamount)
+    values (#{cu_id,jdbcType=INTEGER}, #{cu_code,jdbcType=VARCHAR}, #{cu_name,jdbcType=VARCHAR}, 
+      #{cu_uu,jdbcType=VARCHAR}, #{cu_type,jdbcType=VARCHAR}, #{cu_begindate,jdbcType=TIMESTAMP}, 
+      #{cu_beginaramount,jdbcType=DOUBLE}, #{cu_beginprerecamount,jdbcType=DOUBLE}, #{cu_promisedays,jdbcType=DOUBLE}, 
+      #{cu_taxrate,jdbcType=DOUBLE}, #{cu_sellerid,jdbcType=INTEGER}, #{cu_sellercode,jdbcType=VARCHAR}, 
+      #{cu_sellername,jdbcType=VARCHAR}, #{cu_credit,jdbcType=DOUBLE}, #{cu_status,jdbcType=VARCHAR}, 
+      #{cu_statuscode,jdbcType=VARCHAR}, #{cu_recordmanid,jdbcType=INTEGER}, #{cu_recordman,jdbcType=VARCHAR}, 
+      #{cu_recorddate,jdbcType=TIMESTAMP}, #{companyid,jdbcType=INTEGER}, #{updaterId,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=TIMESTAMP}, #{cu_text1,jdbcType=VARCHAR}, #{cu_text2,jdbcType=VARCHAR}, 
+      #{cu_text3,jdbcType=VARCHAR}, #{cu_text4,jdbcType=VARCHAR}, #{cu_text5,jdbcType=VARCHAR}, 
+      #{cu_leftamount,jdbcType=DOUBLE}, #{cu_recamount,jdbcType=DOUBLE})
+  </insert>
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.Customer">
+    insert into customer
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="cu_id != null">
+        cu_id,
+      </if>
+      <if test="cu_code != null">
+        cu_code,
+      </if>
+      <if test="cu_name != null">
+        cu_name,
+      </if>
+      <if test="cu_uu != null">
+        cu_uu,
+      </if>
+      <if test="cu_type != null">
+        cu_type,
+      </if>
+      <if test="cu_begindate != null">
+        cu_begindate,
+      </if>
+      <if test="cu_beginaramount != null">
+        cu_beginaramount,
+      </if>
+      <if test="cu_beginprerecamount != null">
+        cu_beginprerecamount,
+      </if>
+      <if test="cu_promisedays != null">
+        cu_promisedays,
+      </if>
+      <if test="cu_taxrate != null">
+        cu_taxrate,
+      </if>
+      <if test="cu_sellerid != null">
+        cu_sellerid,
+      </if>
+      <if test="cu_sellercode != null">
+        cu_sellercode,
+      </if>
+      <if test="cu_sellername != null">
+        cu_sellername,
+      </if>
+      <if test="cu_credit != null">
+        cu_credit,
+      </if>
+      <if test="cu_status != null">
+        cu_status,
+      </if>
+      <if test="cu_statuscode != null">
+        cu_statuscode,
+      </if>
+      <if test="cu_recordmanid != null">
+        cu_recordmanid,
+      </if>
+      <if test="cu_recordman != null">
+        cu_recordman,
+      </if>
+      <if test="cu_recorddate != null">
+        cu_recorddate,
+      </if>
+      <if test="companyid != null">
+        companyid,
+      </if>
+      <if test="updaterId != null">
+        updaterId,
+      </if>
+      <if test="updatetime != null">
+        updatetime,
+      </if>
+      <if test="cu_text1 != null">
+        cu_text1,
+      </if>
+      <if test="cu_text2 != null">
+        cu_text2,
+      </if>
+      <if test="cu_text3 != null">
+        cu_text3,
+      </if>
+      <if test="cu_text4 != null">
+        cu_text4,
+      </if>
+      <if test="cu_text5 != null">
+        cu_text5,
+      </if>
+      <if test="cu_leftamount != null">
+        cu_leftamount,
+      </if>
+      <if test="cu_recamount != null">
+        cu_recamount,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="cu_id != null">
+        #{cu_id,jdbcType=INTEGER},
+      </if>
+      <if test="cu_code != null">
+        #{cu_code,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_name != null">
+        #{cu_name,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_uu != null">
+        #{cu_uu,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_type != null">
+        #{cu_type,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_begindate != null">
+        #{cu_begindate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="cu_beginaramount != null">
+        #{cu_beginaramount,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_beginprerecamount != null">
+        #{cu_beginprerecamount,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_promisedays != null">
+        #{cu_promisedays,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_taxrate != null">
+        #{cu_taxrate,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_sellerid != null">
+        #{cu_sellerid,jdbcType=INTEGER},
+      </if>
+      <if test="cu_sellercode != null">
+        #{cu_sellercode,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_sellername != null">
+        #{cu_sellername,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_credit != null">
+        #{cu_credit,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_status != null">
+        #{cu_status,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_statuscode != null">
+        #{cu_statuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_recordmanid != null">
+        #{cu_recordmanid,jdbcType=INTEGER},
+      </if>
+      <if test="cu_recordman != null">
+        #{cu_recordman,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_recorddate != null">
+        #{cu_recorddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="companyid != null">
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null">
+        #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null">
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="cu_text1 != null">
+        #{cu_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text2 != null">
+        #{cu_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text3 != null">
+        #{cu_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text4 != null">
+        #{cu_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text5 != null">
+        #{cu_text5,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_leftamount != null">
+        #{cu_leftamount,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_recamount != null">
+        #{cu_recamount,jdbcType=DOUBLE},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.document.entities.Customer">
+    update customer
+    <set>
+      <if test="cu_code != null">
+        cu_code = #{cu_code,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_name != null">
+        cu_name = #{cu_name,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_uu != null">
+        cu_uu = #{cu_uu,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_type != null">
+        cu_type = #{cu_type,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_begindate != null">
+        cu_begindate = #{cu_begindate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="cu_beginaramount != null">
+        cu_beginaramount = #{cu_beginaramount,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_beginprerecamount != null">
+        cu_beginprerecamount = #{cu_beginprerecamount,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_promisedays != null">
+        cu_promisedays = #{cu_promisedays,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_taxrate != null">
+        cu_taxrate = #{cu_taxrate,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_sellerid != null">
+        cu_sellerid = #{cu_sellerid,jdbcType=INTEGER},
+      </if>
+      <if test="cu_sellercode != null">
+        cu_sellercode = #{cu_sellercode,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_sellername != null">
+        cu_sellername = #{cu_sellername,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_credit != null">
+        cu_credit = #{cu_credit,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_status != null">
+        cu_status = #{cu_status,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_statuscode != null">
+        cu_statuscode = #{cu_statuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_recordmanid != null">
+        cu_recordmanid = #{cu_recordmanid,jdbcType=INTEGER},
+      </if>
+      <if test="cu_recordman != null">
+        cu_recordman = #{cu_recordman,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_recorddate != null">
+        cu_recorddate = #{cu_recorddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="companyid != null">
+        companyid = #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null">
+        updaterId = #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null">
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="cu_text1 != null">
+        cu_text1 = #{cu_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text2 != null">
+        cu_text2 = #{cu_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text3 != null">
+        cu_text3 = #{cu_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text4 != null">
+        cu_text4 = #{cu_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_text5 != null">
+        cu_text5 = #{cu_text5,jdbcType=VARCHAR},
+      </if>
+      <if test="cu_leftamount != null">
+        cu_leftamount = #{cu_leftamount,jdbcType=DOUBLE},
+      </if>
+      <if test="cu_recamount != null">
+        cu_recamount = #{cu_recamount,jdbcType=DOUBLE},
+      </if>
+    </set>
+    where cu_id = #{cu_id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.document.entities.Customer">
+    update customer
+    set cu_code = #{cu_code,jdbcType=VARCHAR},
+      cu_name = #{cu_name,jdbcType=VARCHAR},
+      cu_uu = #{cu_uu,jdbcType=VARCHAR},
+      cu_type = #{cu_type,jdbcType=VARCHAR},
+      cu_begindate = #{cu_begindate,jdbcType=TIMESTAMP},
+      cu_beginaramount = #{cu_beginaramount,jdbcType=DOUBLE},
+      cu_beginprerecamount = #{cu_beginprerecamount,jdbcType=DOUBLE},
+      cu_promisedays = #{cu_promisedays,jdbcType=DOUBLE},
+      cu_taxrate = #{cu_taxrate,jdbcType=DOUBLE},
+      cu_sellerid = #{cu_sellerid,jdbcType=INTEGER},
+      cu_sellercode = #{cu_sellercode,jdbcType=VARCHAR},
+      cu_sellername = #{cu_sellername,jdbcType=VARCHAR},
+      cu_credit = #{cu_credit,jdbcType=DOUBLE},
+      cu_status = #{cu_status,jdbcType=VARCHAR},
+      cu_statuscode = #{cu_statuscode,jdbcType=VARCHAR},
+      cu_recordmanid = #{cu_recordmanid,jdbcType=INTEGER},
+      cu_recordman = #{cu_recordman,jdbcType=VARCHAR},
+      cu_recorddate = #{cu_recorddate,jdbcType=TIMESTAMP},
+      companyid = #{companyid,jdbcType=INTEGER},
+      updaterId = #{updaterId,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      cu_text1 = #{cu_text1,jdbcType=VARCHAR},
+      cu_text2 = #{cu_text2,jdbcType=VARCHAR},
+      cu_text3 = #{cu_text3,jdbcType=VARCHAR},
+      cu_text4 = #{cu_text4,jdbcType=VARCHAR},
+      cu_text5 = #{cu_text5,jdbcType=VARCHAR},
+      cu_leftamount = #{cu_leftamount,jdbcType=DOUBLE},
+      cu_recamount = #{cu_recamount,jdbcType=DOUBLE}
+    where cu_id = #{cu_id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 236 - 0
applications/document/document-server/src/main/resources/mapper/CustomeraddressMapper.xml

@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usoftchina.saas.document.mapper.CustomeraddressMapper">
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.document.entities.Customeraddress">
+    <id column="ca_id" jdbcType="INTEGER" property="id" />
+    <result column="ca_cuid" jdbcType="INTEGER" property="ca_cuid" />
+    <result column="ca_detno" jdbcType="INTEGER" property="ca_detno" />
+    <result column="ca_person" jdbcType="VARCHAR" property="ca_person" />
+    <result column="ca_phone" jdbcType="INTEGER" property="ca_phone" />
+    <result column="ca_default" jdbcType="INTEGER" property="ca_default" />
+    <result column="companyid" jdbcType="INTEGER" property="companyId" />
+    <result column="updaterid" jdbcType="INTEGER" property="updaterId" />
+    <result column="updatetime" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="ca_text1" jdbcType="VARCHAR" property="ca_text1" />
+    <result column="ca_text2" jdbcType="VARCHAR" property="ca_text2" />
+    <result column="ca_text3" jdbcType="VARCHAR" property="ca_text3" />
+    <result column="ca_text4" jdbcType="VARCHAR" property="ca_text4" />
+    <result column="ca_text5" jdbcType="VARCHAR" property="ca_text5" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.usoftchina.saas.document.entities.Customeraddress">
+    <result column="ca_address" jdbcType="LONGVARCHAR" property="ca_address" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    ca_id, ca_cuid, ca_detno, ca_person, ca_phone, ca_default, companyid, updaterid, 
+    updatetime, ca_text1, ca_text2, ca_text3, ca_text4, ca_text5
+  </sql>
+  <sql id="Blob_Column_List">
+    ca_address
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="ResultMapWithBLOBs">
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from customeraddress
+    where ca_id = #{ca_id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from customeraddress
+    where ca_id = #{ca_id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="com.usoftchina.saas.document.entities.Customeraddress">
+    insert into customeraddress (ca_id, ca_cuid, ca_detno, 
+      ca_person, ca_phone, ca_default, 
+      companyid, updaterid, updatetime, 
+      ca_text1, ca_text2, ca_text3, 
+      ca_text4, ca_text5, ca_address
+      )
+    values (#{ca_id,jdbcType=INTEGER}, #{ca_cuid,jdbcType=INTEGER}, #{ca_detno,jdbcType=INTEGER}, 
+      #{ca_person,jdbcType=VARCHAR}, #{ca_phone,jdbcType=INTEGER}, #{ca_default,jdbcType=INTEGER}, 
+      #{companyid,jdbcType=INTEGER}, #{updaterid,jdbcType=INTEGER}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{ca_text1,jdbcType=VARCHAR}, #{ca_text2,jdbcType=VARCHAR}, #{ca_text3,jdbcType=VARCHAR}, 
+      #{ca_text4,jdbcType=VARCHAR}, #{ca_text5,jdbcType=VARCHAR}, #{ca_address,jdbcType=LONGVARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.Customeraddress">
+    insert into customeraddress
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="ca_id != null">
+        ca_id,
+      </if>
+      <if test="ca_cuid != null">
+        ca_cuid,
+      </if>
+      <if test="ca_detno != null">
+        ca_detno,
+      </if>
+      <if test="ca_person != null">
+        ca_person,
+      </if>
+      <if test="ca_phone != null">
+        ca_phone,
+      </if>
+      <if test="ca_default != null">
+        ca_default,
+      </if>
+      <if test="companyid != null">
+        companyid,
+      </if>
+      <if test="updaterid != null">
+        updaterid,
+      </if>
+      <if test="updatetime != null">
+        updatetime,
+      </if>
+      <if test="ca_text1 != null">
+        ca_text1,
+      </if>
+      <if test="ca_text2 != null">
+        ca_text2,
+      </if>
+      <if test="ca_text3 != null">
+        ca_text3,
+      </if>
+      <if test="ca_text4 != null">
+        ca_text4,
+      </if>
+      <if test="ca_text5 != null">
+        ca_text5,
+      </if>
+      <if test="ca_address != null">
+        ca_address,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="ca_id != null">
+        #{ca_id,jdbcType=INTEGER},
+      </if>
+      <if test="ca_cuid != null">
+        #{ca_cuid,jdbcType=INTEGER},
+      </if>
+      <if test="ca_detno != null">
+        #{ca_detno,jdbcType=INTEGER},
+      </if>
+      <if test="ca_person != null">
+        #{ca_person,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_phone != null">
+        #{ca_phone,jdbcType=INTEGER},
+      </if>
+      <if test="ca_default != null">
+        #{ca_default,jdbcType=INTEGER},
+      </if>
+      <if test="companyid != null">
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterid != null">
+        #{updaterid,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null">
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="ca_text1 != null">
+        #{ca_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text2 != null">
+        #{ca_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text3 != null">
+        #{ca_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text4 != null">
+        #{ca_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text5 != null">
+        #{ca_text5,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_address != null">
+        #{ca_address,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.document.entities.Customeraddress">
+    update customeraddress
+    <set>
+      <if test="ca_cuid != null">
+        ca_cuid = #{ca_cuid,jdbcType=INTEGER},
+      </if>
+      <if test="ca_detno != null">
+        ca_detno = #{ca_detno,jdbcType=INTEGER},
+      </if>
+      <if test="ca_person != null">
+        ca_person = #{ca_person,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_phone != null">
+        ca_phone = #{ca_phone,jdbcType=INTEGER},
+      </if>
+      <if test="ca_default != null">
+        ca_default = #{ca_default,jdbcType=INTEGER},
+      </if>
+      <if test="companyid != null">
+        companyid = #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterid != null">
+        updaterid = #{updaterid,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null">
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="ca_text1 != null">
+        ca_text1 = #{ca_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text2 != null">
+        ca_text2 = #{ca_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text3 != null">
+        ca_text3 = #{ca_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text4 != null">
+        ca_text4 = #{ca_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_text5 != null">
+        ca_text5 = #{ca_text5,jdbcType=VARCHAR},
+      </if>
+      <if test="ca_address != null">
+        ca_address = #{ca_address,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where ca_id = #{ca_id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.usoftchina.saas.document.entities.Customeraddress">
+    update customeraddress
+    set ca_cuid = #{ca_cuid,jdbcType=INTEGER},
+      ca_detno = #{ca_detno,jdbcType=INTEGER},
+      ca_person = #{ca_person,jdbcType=VARCHAR},
+      ca_phone = #{ca_phone,jdbcType=INTEGER},
+      ca_default = #{ca_default,jdbcType=INTEGER},
+      companyid = #{companyid,jdbcType=INTEGER},
+      updaterid = #{updaterid,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      ca_text1 = #{ca_text1,jdbcType=VARCHAR},
+      ca_text2 = #{ca_text2,jdbcType=VARCHAR},
+      ca_text3 = #{ca_text3,jdbcType=VARCHAR},
+      ca_text4 = #{ca_text4,jdbcType=VARCHAR},
+      ca_text5 = #{ca_text5,jdbcType=VARCHAR},
+      ca_address = #{ca_address,jdbcType=LONGVARCHAR}
+    where ca_id = #{ca_id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.document.entities.Customeraddress">
+    update customeraddress
+    set ca_cuid = #{ca_cuid,jdbcType=INTEGER},
+      ca_detno = #{ca_detno,jdbcType=INTEGER},
+      ca_person = #{ca_person,jdbcType=VARCHAR},
+      ca_phone = #{ca_phone,jdbcType=INTEGER},
+      ca_default = #{ca_default,jdbcType=INTEGER},
+      companyid = #{companyid,jdbcType=INTEGER},
+      updaterid = #{updaterid,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      ca_text1 = #{ca_text1,jdbcType=VARCHAR},
+      ca_text2 = #{ca_text2,jdbcType=VARCHAR},
+      ca_text3 = #{ca_text3,jdbcType=VARCHAR},
+      ca_text4 = #{ca_text4,jdbcType=VARCHAR},
+      ca_text5 = #{ca_text5,jdbcType=VARCHAR}
+    where ca_id = #{ca_id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 212 - 0
applications/document/document-server/src/main/resources/mapper/CustomercontactMapper.xml

@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usoftchina.saas.document.mapper.CustomercontactMapper">
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.document.entities.Customercontact">
+    <id column="cc_id" jdbcType="INTEGER" property="id" />
+    <result column="cc_cuid" jdbcType="INTEGER" property="cc_cuid" />
+    <result column="cc_detno" jdbcType="INTEGER" property="cc_detno" />
+    <result column="cc_name" jdbcType="VARCHAR" property="cc_name" />
+    <result column="cc_tel" jdbcType="INTEGER" property="cc_tel" />
+    <result column="cc_qq" jdbcType="VARCHAR" property="cc_qq" />
+    <result column="cc_email" jdbcType="VARCHAR" property="cc_email" />
+    <result column="companyid" jdbcType="INTEGER" property="companyId" />
+    <result column="updaterid" jdbcType="INTEGER" property="updaterId" />
+    <result column="updatetime" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="cc_text1" jdbcType="VARCHAR" property="cc_text1" />
+    <result column="cc_text2" jdbcType="VARCHAR" property="cc_text2" />
+    <result column="cc_text3" jdbcType="VARCHAR" property="cc_text3" />
+    <result column="cc_text4" jdbcType="VARCHAR" property="cc_text4" />
+    <result column="cc_text5" jdbcType="VARCHAR" property="cc_text5" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    cc_id, cc_cuid, cc_detno, cc_name, cc_tel, cc_qq, cc_email, companyid, updaterid, 
+    updatetime, cc_text1, cc_text2, cc_text3, cc_text4, cc_text5
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from customercontact
+    where cc_id = #{cc_id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from customercontact
+    where cc_id = #{cc_id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" parameterType="com.usoftchina.saas.document.entities.Customercontact">
+    insert into customercontact (cc_id, cc_cuid, cc_detno, 
+      cc_name, cc_tel, cc_qq, 
+      cc_email, companyid, updaterid, 
+      updatetime, cc_text1, cc_text2, 
+      cc_text3, cc_text4, cc_text5
+      )
+    values (#{cc_id,jdbcType=INTEGER}, #{cc_cuid,jdbcType=INTEGER}, #{cc_detno,jdbcType=INTEGER}, 
+      #{cc_name,jdbcType=VARCHAR}, #{cc_tel,jdbcType=INTEGER}, #{cc_qq,jdbcType=VARCHAR}, 
+      #{cc_email,jdbcType=VARCHAR}, #{companyid,jdbcType=INTEGER}, #{updaterid,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=TIMESTAMP}, #{cc_text1,jdbcType=VARCHAR}, #{cc_text2,jdbcType=VARCHAR}, 
+      #{cc_text3,jdbcType=VARCHAR}, #{cc_text4,jdbcType=VARCHAR}, #{cc_text5,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.Customercontact">
+    insert into customercontact
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="cc_id != null">
+        cc_id,
+      </if>
+      <if test="cc_cuid != null">
+        cc_cuid,
+      </if>
+      <if test="cc_detno != null">
+        cc_detno,
+      </if>
+      <if test="cc_name != null">
+        cc_name,
+      </if>
+      <if test="cc_tel != null">
+        cc_tel,
+      </if>
+      <if test="cc_qq != null">
+        cc_qq,
+      </if>
+      <if test="cc_email != null">
+        cc_email,
+      </if>
+      <if test="companyid != null">
+        companyid,
+      </if>
+      <if test="updaterid != null">
+        updaterid,
+      </if>
+      <if test="updatetime != null">
+        updatetime,
+      </if>
+      <if test="cc_text1 != null">
+        cc_text1,
+      </if>
+      <if test="cc_text2 != null">
+        cc_text2,
+      </if>
+      <if test="cc_text3 != null">
+        cc_text3,
+      </if>
+      <if test="cc_text4 != null">
+        cc_text4,
+      </if>
+      <if test="cc_text5 != null">
+        cc_text5,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="cc_id != null">
+        #{cc_id,jdbcType=INTEGER},
+      </if>
+      <if test="cc_cuid != null">
+        #{cc_cuid,jdbcType=INTEGER},
+      </if>
+      <if test="cc_detno != null">
+        #{cc_detno,jdbcType=INTEGER},
+      </if>
+      <if test="cc_name != null">
+        #{cc_name,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_tel != null">
+        #{cc_tel,jdbcType=INTEGER},
+      </if>
+      <if test="cc_qq != null">
+        #{cc_qq,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_email != null">
+        #{cc_email,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null">
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterid != null">
+        #{updaterid,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null">
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="cc_text1 != null">
+        #{cc_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text2 != null">
+        #{cc_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text3 != null">
+        #{cc_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text4 != null">
+        #{cc_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text5 != null">
+        #{cc_text5,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.document.entities.Customercontact">
+    update customercontact
+    <set>
+      <if test="cc_cuid != null">
+        cc_cuid = #{cc_cuid,jdbcType=INTEGER},
+      </if>
+      <if test="cc_detno != null">
+        cc_detno = #{cc_detno,jdbcType=INTEGER},
+      </if>
+      <if test="cc_name != null">
+        cc_name = #{cc_name,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_tel != null">
+        cc_tel = #{cc_tel,jdbcType=INTEGER},
+      </if>
+      <if test="cc_qq != null">
+        cc_qq = #{cc_qq,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_email != null">
+        cc_email = #{cc_email,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null">
+        companyid = #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterid != null">
+        updaterid = #{updaterid,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null">
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="cc_text1 != null">
+        cc_text1 = #{cc_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text2 != null">
+        cc_text2 = #{cc_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text3 != null">
+        cc_text3 = #{cc_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text4 != null">
+        cc_text4 = #{cc_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="cc_text5 != null">
+        cc_text5 = #{cc_text5,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where cc_id = #{cc_id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.document.entities.Customercontact">
+    update customercontact
+    set cc_cuid = #{cc_cuid,jdbcType=INTEGER},
+      cc_detno = #{cc_detno,jdbcType=INTEGER},
+      cc_name = #{cc_name,jdbcType=VARCHAR},
+      cc_tel = #{cc_tel,jdbcType=INTEGER},
+      cc_qq = #{cc_qq,jdbcType=VARCHAR},
+      cc_email = #{cc_email,jdbcType=VARCHAR},
+      companyid = #{companyid,jdbcType=INTEGER},
+      updaterid = #{updaterid,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      cc_text1 = #{cc_text1,jdbcType=VARCHAR},
+      cc_text2 = #{cc_text2,jdbcType=VARCHAR},
+      cc_text3 = #{cc_text3,jdbcType=VARCHAR},
+      cc_text4 = #{cc_text4,jdbcType=VARCHAR},
+      cc_text5 = #{cc_text5,jdbcType=VARCHAR}
+    where cc_id = #{cc_id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 0 - 22
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/Status.java

@@ -1,22 +0,0 @@
-package com.usoftchina.saas.purchase.po;
-
-public enum Status {
-    /**
-     * 在录入
-     */
-    UNAUDITED("未审核"),
-
-    /**
-     * 已审核
-     */
-    AUDITED("已审核");
-
-    private String display;
-    private Status(String display){
-        this.display = display;
-    }
-
-    public String getDisplay(){
-        return display;
-    }
-}

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

@@ -237,7 +237,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         map.put("commitid",prodInOutDTO.getPi_recordmanid());
         map.put("companyid",prodInOutDTO.getCompanyId());
         map.put("result","");
-        warehouseApi.callProcedure(map);
+        warehouseApi.post(map);
         Object result =  map.get("result");
         System.out.println("result");
         //记录日志

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
 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.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
@@ -17,7 +18,6 @@ import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.purchase.dto.PurchaseDTO;
 import com.usoftchina.saas.purchase.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
-import com.usoftchina.saas.purchase.dto.PurchaseReqDTO;
 import com.usoftchina.saas.purchase.mapper.*;
 import com.usoftchina.saas.purchase.po.*;
 import com.usoftchina.saas.purchase.service.PurchaseService;
@@ -73,6 +73,9 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
 
     @Override
     public PurchaseFormDTO getFormData(Long id) {
+        if (null == id || "0".equals(id)) {
+            return null;
+        }
         PurchaseFormDTO purchaseFormDTO = new PurchaseFormDTO();
         //查询主表信息
         Purchase purchase = getMapper().selectByPrimaryKey(id);
@@ -113,6 +116,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
 
         //编号校验
         pu_code = pushMaxnubmer(pu_code, pu_id);
+        //单号赋值
         purchase.setPu_code(pu_code);
         //判断更新与保存动作
         if (StringUtils.isEmpty(pu_id) || "0".equals(pu_id.toString())) {
@@ -161,7 +165,6 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         //日志
         messageLogService.save(baseDTO);
         return baseDTO;
-
     }
 
     @Override
@@ -251,10 +254,14 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
 
     @Override
     public void closePurchase(long id) {
-        Purchase purchase = new Purchase();
+        Purchase purchase = purchaseMapper.selectByPrimaryKey(id);
+        if(Status.CLOSE.name().equals(purchase.getPu_statuscode())){
+            throw new BizException(BizExceptionCode.BIZ_CLOSE);
+        }
+        purchase = new Purchase();
         purchase.setId(id);
-        purchase.setPu_acceptstatuscode("CLOSED");
-        purchase.setPu_acceptstatus("已关闭");
+        purchase.setPu_acceptstatuscode(Status.CLOSE.name());
+        purchase.setPu_acceptstatus(Status.CLOSE.getDisplay());
         purchaseMapper.updateByPrimaryKeySelective(purchase);
         DocBaseDTO docBaseDTO = getBaseDTOById(id);
         //日志
@@ -263,6 +270,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
 
     @Override
     public void openPurchase(long id) {
+        Purchase purchase = purchaseMapper.selectByPrimaryKey(id);
+        if(!Status.CLOSE.name().equals(purchase.getPu_acceptstatuscode())){
+            throw new BizException(BizExceptionCode.BIZ_OPEN);
+        }
         List<PurchaseDetail> purchaseDetailList = purchasedetailMapper.selectByFK(id);
         //部分入库、全部入库
         int partTurnCount = 0,turnCount = 0;
@@ -277,7 +288,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
                 }
             }
             //构造更新对象
-            Purchase purchase = new Purchase();
+            purchase = new Purchase();
             purchase.setId(id);
             purchase.setPu_acceptstatuscode("UNTURNIN");
             purchase.setPu_acceptstatus("未入库");
@@ -454,7 +465,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         }
         Integer count = "0".equals(String.valueOf(id)) ? purchaseMapper.validateCodeWhenInsert(code) :
                 purchaseMapper.validateCodeWhenUpdate(code, id);
-        return maxnumberService.pushMaxnubmer(count, code, "Purchase");
+        return maxnumberService.pushMaxnubmer(count, code, "Purchase").getData();
     }
     
     /** 

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

@@ -47,7 +47,7 @@ eureka:
   client:
     registryFetchIntervalSeconds: 5
     serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8500/eureka/
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8510/eureka/
 server:
   port: 8800
   tomcat:

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

@@ -55,7 +55,7 @@
         <result column="pd_yqty" property="pd_yqty" jdbcType="DOUBLE" />
     </resultMap>
 
-    <select id="selectPurchaseListByCondition" parameterType="string" resultMap="BaseResultMap">
+    <select id="selectPurchaseListByCondition"  resultMap="BaseResultMap">
         select  *  from purchase left join purchasedetail on pu_id=pd_puid
         <where>
             <if test="con != null">
@@ -67,7 +67,7 @@
         </where>  order by pu_id,pd_detno
     </select>
 
-    <select id="selectPurchaseBycondition" parameterType="com.usoftchina.saas.purchase.dto.PurchaseReqDTO" resultMap="BaseResultMap">
+    <select id="selectPurchaseBycondition"  resultMap="BaseResultMap">
         select  *  from purchase
         <where>
             <if test="con != null">

+ 5 - 1
applications/sale/pom.xml

@@ -10,7 +10,11 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>sale</artifactId>
+    <packaging>pom</packaging>
     <description>sale server</description>
-
+    <modules>
+        <module>sale-server</module>
+        <module>sale-dto</module>
+    </modules>
 
 </project>

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

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sale</artifactId>
+        <groupId>com.usoftchina.saas</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sale-dto</artifactId>
+
+
+</project>

+ 54 - 0
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleDTO.java

@@ -0,0 +1,54 @@
+package com.usoftchina.saas.sale.dto;
+
+import com.usoftchina.saas.base.dto.CommonBaseDTO;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 14:15
+ **/
+@Data
+public class SaleDTO extends CommonBaseDTO{
+
+    private String sa_code;
+
+    private Integer sa_custid;
+
+    private String sa_custcode;
+
+    private String sa_custname;
+
+    private Double sa_total;
+
+    private String sa_totalupper;
+
+    private String sa_status;
+
+    private String sa_statuscode;
+
+    private String sa_sendstatuscode;
+
+    private String sa_sendstatus;
+
+    private String sa_printstatus;
+
+    private String sa_printstatuscode;
+
+    private Integer sa_recorderid;
+
+    private String sa_recorder;
+
+    private Date sa_recorddate;
+
+    private String sa_text1;
+
+    private String sa_text2;
+
+    private String sa_text3;
+
+    private String sa_text4;
+
+    private String sa_text5;
+}

+ 56 - 0
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleDetailDTO.java

@@ -0,0 +1,56 @@
+package com.usoftchina.saas.sale.dto;
+
+import com.usoftchina.saas.base.dto.CommonBaseDTO;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author: guq
+ * @create: 2018-10-23 11:05
+ **/
+@Data
+public class SaleDetailDTO extends CommonBaseDTO implements Serializable {
+    private  Long pd_puid;
+
+    private String pd_code;
+
+    private Integer pd_detno;
+
+    private Integer pd_prodid;
+
+    private String pd_prodcode;
+
+    private String pd_unit;
+
+    private Double pd_qty;
+
+    private Double pd_price;
+
+    private Double pd_total;
+
+    private Double pd_taxtotal;
+
+    private Double pd_acceptqty;
+
+    private Double pd_delivery;
+
+    private String pd_salecode;
+
+    private Integer pd_saledetno;
+
+    private Integer pd_sdid;
+
+    private String pd_text1;
+
+    private String pd_text2;
+
+    private String pd_text3;
+
+    private String pd_text4;
+
+    private String pd_text5;
+
+    private Double pd_yqty;
+}

+ 36 - 0
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java

@@ -0,0 +1,36 @@
+package com.usoftchina.saas.sale.dto;
+
+import java.util.List;
+
+/**
+ * @author: guq
+ * @create: 2018-10-23 11:03
+ **/
+public class SaleFormDTO {
+    private SaleDTO main;
+    private List<SaleDetailDTO> items;
+
+    public SaleDTO getMain() {
+        return main;
+    }
+
+    public void setMain(SaleDTO main) {
+        this.main = main;
+    }
+
+    public List<SaleDetailDTO> getItems() {
+        return items;
+    }
+
+    public void setItems(List<SaleDetailDTO> items) {
+        this.items = items;
+    }
+
+    @Override
+    public String toString() {
+        return "PurchaseFormDTO{" +
+                "main=" + main +
+                ", items=" + items +
+                '}';
+    }
+}

+ 21 - 0
applications/sale/sale-server/pom.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>sale</artifactId>
+        <groupId>com.usoftchina.saas</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>sale-server</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>sale-dto</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>

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

@@ -0,0 +1,19 @@
+package com.usoftchina.saas.sale;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 13:58
+ **/
+@SpringBootApplication
+@MapperScan("com.usoftchina.saas.sale.mapper")
+@EnableEurekaClient
+public class SaleApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(SaleApplication.class, args);
+    }
+}

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

@@ -0,0 +1,166 @@
+package com.usoftchina.saas.sale.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
+import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.sale.dto.SaleFormDTO;
+import com.usoftchina.saas.sale.po.SaleList;
+import com.usoftchina.saas.sale.service.SaleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 11:28
+ **/
+@CrossOrigin
+@RestController
+@RequestMapping("/sale")
+public class SaleController {
+
+    @Autowired
+    private SaleService saleService;
+
+    /**
+     * 销售订单列表
+     *
+     * @param page
+     * @param req
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<PageInfo<SaleList>> getListData(PageRequest page, ListReqDTO req) {
+        PageInfo<SaleList> listData = saleService.getListData(page, req);
+        return Result.success(listData);
+    }
+
+    /**
+     * 销售订单表单
+     *
+     * @return
+     */
+    @GetMapping("/read/{id}")
+    public Result<SaleFormDTO> getFormData(@PathVariable("id") Long id) {
+        SaleFormDTO data = saleService.getFormData(id);
+        return Result.success(data);
+    }
+
+    /**
+     * 销售订单表单保存
+     *
+     * @param
+     * @return
+     */
+    @PostMapping("/save")
+    public Result<DocBaseDTO> saveFormData(@RequestBody SaleFormDTO data) {
+        DocBaseDTO save = saleService.saveFormData(data);
+        return Result.success(save);
+
+    }
+
+    /**
+     * 采购订单删除
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id) {
+        saleService.delete(id);
+        return Result.success();
+    }
+
+    /**
+     * 采购订单明细删除
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/deleteDetail/{id}")
+    public Result deleteDetail(@PathVariable("id") Long id) {
+        saleService.deleteDetail(id);
+        return Result.success();
+    }
+
+    /**
+     * 采购订单审批
+     *
+     * @param formData
+     * @return
+     */
+    @PostMapping("/audit")
+    public Result audit(@RequestBody SaleFormDTO formData) {
+        DocBaseDTO audit = saleService.audit(formData);
+        return Result.success(audit);
+    }
+
+    /**
+     * 采购订单反审批
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("/unAudit/{id}")
+    public Result unAudit(@PathVariable("id") Long id) {
+        saleService.unAudit(id);
+        return Result.success();
+    }
+
+    /**
+     * 采购订单批量审核
+     *
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchAudit")
+    public Result batchAudit(@RequestBody BatchDealBaseDTO baseDTOs) {
+        saleService.batchAudit(baseDTOs);
+        return Result.success();
+    }
+
+    /**
+     * 采购订单批量删除
+     *
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs) {
+        saleService.batchDelete(baseDTOs);
+        return Result.success();
+    }
+
+    /**
+     * 采购订单批量反审核
+     *
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchUnAudit")
+    public Result batchUnAudit(@RequestBody BatchDealBaseDTO baseDTOs) {
+        saleService.batchUnAudit(baseDTOs);
+        return Result.success();
+    }
+
+    @PostMapping("/close/{id}")
+    public Result close(@PathVariable(value = "id") long id) {
+        saleService.close(id);
+        return Result.success();
+    }
+
+    @PostMapping("/open/{id}")
+    public Result open(@PathVariable(value = "id") long id) {
+        saleService.open(id);
+        return Result.success();
+    }
+
+    @PostMapping("/turnOut/{id}")
+    public Result turnOut(@PathVariable("id") Long id) {
+        saleService.turnOut(id);
+        return Result.success();
+    }
+
+}

+ 11 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleListMapper.java

@@ -0,0 +1,11 @@
+package com.usoftchina.saas.sale.mapper;
+
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.sale.po.SaleList;
+
+import java.util.List;
+
+public interface SaleListMapper {
+    List<SaleList> selectSaleBycondition(ListReqDTO list);
+    List<SaleList> selectPurchaseListByCondition(ListReqDTO list);
+}

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

@@ -0,0 +1,43 @@
+package com.usoftchina.saas.sale.mapper;
+
+import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.sale.po.Sale;
+import com.usoftchina.saas.sale.po.SaleExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface SaleMapper {
+    int countByExample(SaleExample example);
+
+    int deleteByExample(SaleExample example);
+
+    int deleteByPrimaryKey(Long sa_id);
+
+    int insert(Sale record);
+
+    int insertSelective(Sale record);
+
+    List<Sale> selectByExample(SaleExample example);
+
+    Sale selectByPrimaryKey(Long sa_id);
+
+    int updateByExampleSelective(@Param("record") Sale record, @Param("example") SaleExample example);
+
+    int updateByExample(@Param("record") Sale record, @Param("example") SaleExample example);
+
+    int updateByPrimaryKeySelective(Sale record);
+
+    int updateByPrimaryKey(Sale record);
+
+    Integer validateCodeWhenInsert(String code);
+
+    Integer validateCodeWhenUpdate(String code, Long id);
+
+    String selectCodeById(Long id);
+
+    String validateBatchUnAudit(List<DocBaseDTO> baseDTOs);
+
+    String validateUnAudit(Long id);
+
+    String validateAudit(List<DocBaseDTO> baseDTOs);
+}

+ 40 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaledetailMapper.java

@@ -0,0 +1,40 @@
+package com.usoftchina.saas.sale.mapper;
+
+import com.usoftchina.saas.sale.po.SaleDetail;
+import com.usoftchina.saas.sale.po.SaledetailExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface SaledetailMapper {
+
+    List<SaleDetail> selectByFK(Long id);
+
+    void batchInsert(List<SaleDetail> insertDetails);
+
+    void batchUpdate(List<SaleDetail> updateDetails);
+
+    void deleteByForeignKey(Long id);
+
+    Integer deleteByPrimaryKey(Long id);
+   /* int countByExample(SaledetailExample example);
+
+    int deleteByExample(SaledetailExample example);
+
+    int deleteByPrimaryKey(Integer sd_id);
+
+    int insert(Saledetail record);
+
+    int insertSelective(Saledetail record);
+
+    List<Saledetail> selectByExample(SaledetailExample example);
+
+    Saledetail selectByPrimaryKey(Integer sd_id);
+
+    int updateByExampleSelective(@Param("record") Saledetail record, @Param("example") SaledetailExample example);
+
+    int updateByExample(@Param("record") Saledetail record, @Param("example") SaledetailExample example);
+
+    int updateByPrimaryKeySelective(Saledetail record);
+
+    int updateByPrimaryKey(Saledetail record);*/
+}

+ 53 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/Sale.java

@@ -0,0 +1,53 @@
+package com.usoftchina.saas.sale.po;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 14:17
+ **/
+@Data
+public class Sale extends CommonBaseEntity{
+    private String sa_code;
+
+    private Integer sa_custid;
+
+    private String sa_custcode;
+
+    private String sa_custname;
+
+    private Double sa_total;
+
+    private String sa_totalupper;
+
+    private String sa_status;
+
+    private String sa_statuscode;
+
+    private String sa_sendstatuscode;
+
+    private String sa_sendstatus;
+
+    private String sa_printstatus;
+
+    private String sa_printstatuscode;
+
+    private Integer sa_recorderid;
+
+    private String sa_recorder;
+
+    private Date sa_recorddate;
+
+    private String sa_text1;
+
+    private String sa_text2;
+
+    private String sa_text3;
+
+    private String sa_text4;
+
+    private String sa_text5;
+}

+ 53 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleDetail.java

@@ -0,0 +1,53 @@
+package com.usoftchina.saas.sale.po;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 14:33
+ **/
+@Data
+public class SaleDetail extends CommonBaseEntity{
+    private Long sd_said;
+
+    private Integer sd_detno;
+
+    private String sd_code;
+
+    private Integer sd_prodid;
+
+    private String sd_prodcode;
+
+    private Double sd_qty;
+
+    private Double sd_price;
+
+    private Double sd_total;
+
+    private Double sd_taxrate;
+
+    private Double sd_netprice;
+
+    private Double sd_nettotal;
+
+    private Date sd_delivery;
+
+    private Double sd_sendqty;
+
+    private Double sd_pdqty;
+
+    private String sd_remark;
+
+    private String sd_text1;
+
+    private String sd_text2;
+
+    private String sd_text3;
+
+    private String sd_text4;
+
+    private String sd_text5;
+}

+ 1941 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleExample.java

@@ -0,0 +1,1941 @@
+package com.usoftchina.saas.sale.po;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class SaleExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public SaleExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andSa_idIsNull() {
+            addCriterion("sa_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idIsNotNull() {
+            addCriterion("sa_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idEqualTo(Integer value) {
+            addCriterion("sa_id =", value, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idNotEqualTo(Integer value) {
+            addCriterion("sa_id <>", value, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idGreaterThan(Integer value) {
+            addCriterion("sa_id >", value, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sa_id >=", value, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idLessThan(Integer value) {
+            addCriterion("sa_id <", value, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idLessThanOrEqualTo(Integer value) {
+            addCriterion("sa_id <=", value, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idIn(List<Integer> values) {
+            addCriterion("sa_id in", values, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idNotIn(List<Integer> values) {
+            addCriterion("sa_id not in", values, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idBetween(Integer value1, Integer value2) {
+            addCriterion("sa_id between", value1, value2, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_idNotBetween(Integer value1, Integer value2) {
+            addCriterion("sa_id not between", value1, value2, "sa_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeIsNull() {
+            addCriterion("sa_code is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeIsNotNull() {
+            addCriterion("sa_code is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeEqualTo(String value) {
+            addCriterion("sa_code =", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeNotEqualTo(String value) {
+            addCriterion("sa_code <>", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeGreaterThan(String value) {
+            addCriterion("sa_code >", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_code >=", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeLessThan(String value) {
+            addCriterion("sa_code <", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeLessThanOrEqualTo(String value) {
+            addCriterion("sa_code <=", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeLike(String value) {
+            addCriterion("sa_code like", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeNotLike(String value) {
+            addCriterion("sa_code not like", value, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeIn(List<String> values) {
+            addCriterion("sa_code in", values, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeNotIn(List<String> values) {
+            addCriterion("sa_code not in", values, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeBetween(String value1, String value2) {
+            addCriterion("sa_code between", value1, value2, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_codeNotBetween(String value1, String value2) {
+            addCriterion("sa_code not between", value1, value2, "sa_code");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidIsNull() {
+            addCriterion("sa_custid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidIsNotNull() {
+            addCriterion("sa_custid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidEqualTo(Integer value) {
+            addCriterion("sa_custid =", value, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidNotEqualTo(Integer value) {
+            addCriterion("sa_custid <>", value, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidGreaterThan(Integer value) {
+            addCriterion("sa_custid >", value, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sa_custid >=", value, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidLessThan(Integer value) {
+            addCriterion("sa_custid <", value, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidLessThanOrEqualTo(Integer value) {
+            addCriterion("sa_custid <=", value, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidIn(List<Integer> values) {
+            addCriterion("sa_custid in", values, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidNotIn(List<Integer> values) {
+            addCriterion("sa_custid not in", values, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidBetween(Integer value1, Integer value2) {
+            addCriterion("sa_custid between", value1, value2, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custidNotBetween(Integer value1, Integer value2) {
+            addCriterion("sa_custid not between", value1, value2, "sa_custid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeIsNull() {
+            addCriterion("sa_custcode is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeIsNotNull() {
+            addCriterion("sa_custcode is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeEqualTo(String value) {
+            addCriterion("sa_custcode =", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeNotEqualTo(String value) {
+            addCriterion("sa_custcode <>", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeGreaterThan(String value) {
+            addCriterion("sa_custcode >", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_custcode >=", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeLessThan(String value) {
+            addCriterion("sa_custcode <", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeLessThanOrEqualTo(String value) {
+            addCriterion("sa_custcode <=", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeLike(String value) {
+            addCriterion("sa_custcode like", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeNotLike(String value) {
+            addCriterion("sa_custcode not like", value, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeIn(List<String> values) {
+            addCriterion("sa_custcode in", values, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeNotIn(List<String> values) {
+            addCriterion("sa_custcode not in", values, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeBetween(String value1, String value2) {
+            addCriterion("sa_custcode between", value1, value2, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custcodeNotBetween(String value1, String value2) {
+            addCriterion("sa_custcode not between", value1, value2, "sa_custcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameIsNull() {
+            addCriterion("sa_custname is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameIsNotNull() {
+            addCriterion("sa_custname is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameEqualTo(String value) {
+            addCriterion("sa_custname =", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameNotEqualTo(String value) {
+            addCriterion("sa_custname <>", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameGreaterThan(String value) {
+            addCriterion("sa_custname >", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_custname >=", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameLessThan(String value) {
+            addCriterion("sa_custname <", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameLessThanOrEqualTo(String value) {
+            addCriterion("sa_custname <=", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameLike(String value) {
+            addCriterion("sa_custname like", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameNotLike(String value) {
+            addCriterion("sa_custname not like", value, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameIn(List<String> values) {
+            addCriterion("sa_custname in", values, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameNotIn(List<String> values) {
+            addCriterion("sa_custname not in", values, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameBetween(String value1, String value2) {
+            addCriterion("sa_custname between", value1, value2, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_custnameNotBetween(String value1, String value2) {
+            addCriterion("sa_custname not between", value1, value2, "sa_custname");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceIsNull() {
+            addCriterion("sa_toplace is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceIsNotNull() {
+            addCriterion("sa_toplace is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceEqualTo(String value) {
+            addCriterion("sa_toplace =", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceNotEqualTo(String value) {
+            addCriterion("sa_toplace <>", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceGreaterThan(String value) {
+            addCriterion("sa_toplace >", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_toplace >=", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceLessThan(String value) {
+            addCriterion("sa_toplace <", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceLessThanOrEqualTo(String value) {
+            addCriterion("sa_toplace <=", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceLike(String value) {
+            addCriterion("sa_toplace like", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceNotLike(String value) {
+            addCriterion("sa_toplace not like", value, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceIn(List<String> values) {
+            addCriterion("sa_toplace in", values, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceNotIn(List<String> values) {
+            addCriterion("sa_toplace not in", values, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceBetween(String value1, String value2) {
+            addCriterion("sa_toplace between", value1, value2, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_toplaceNotBetween(String value1, String value2) {
+            addCriterion("sa_toplace not between", value1, value2, "sa_toplace");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalIsNull() {
+            addCriterion("sa_total is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalIsNotNull() {
+            addCriterion("sa_total is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalEqualTo(Double value) {
+            addCriterion("sa_total =", value, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalNotEqualTo(Double value) {
+            addCriterion("sa_total <>", value, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalGreaterThan(Double value) {
+            addCriterion("sa_total >", value, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalGreaterThanOrEqualTo(Double value) {
+            addCriterion("sa_total >=", value, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalLessThan(Double value) {
+            addCriterion("sa_total <", value, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalLessThanOrEqualTo(Double value) {
+            addCriterion("sa_total <=", value, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalIn(List<Double> values) {
+            addCriterion("sa_total in", values, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalNotIn(List<Double> values) {
+            addCriterion("sa_total not in", values, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalBetween(Double value1, Double value2) {
+            addCriterion("sa_total between", value1, value2, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalNotBetween(Double value1, Double value2) {
+            addCriterion("sa_total not between", value1, value2, "sa_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperIsNull() {
+            addCriterion("sa_totalupper is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperIsNotNull() {
+            addCriterion("sa_totalupper is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperEqualTo(String value) {
+            addCriterion("sa_totalupper =", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperNotEqualTo(String value) {
+            addCriterion("sa_totalupper <>", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperGreaterThan(String value) {
+            addCriterion("sa_totalupper >", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_totalupper >=", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperLessThan(String value) {
+            addCriterion("sa_totalupper <", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperLessThanOrEqualTo(String value) {
+            addCriterion("sa_totalupper <=", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperLike(String value) {
+            addCriterion("sa_totalupper like", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperNotLike(String value) {
+            addCriterion("sa_totalupper not like", value, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperIn(List<String> values) {
+            addCriterion("sa_totalupper in", values, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperNotIn(List<String> values) {
+            addCriterion("sa_totalupper not in", values, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperBetween(String value1, String value2) {
+            addCriterion("sa_totalupper between", value1, value2, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_totalupperNotBetween(String value1, String value2) {
+            addCriterion("sa_totalupper not between", value1, value2, "sa_totalupper");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkIsNull() {
+            addCriterion("sa_remark is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkIsNotNull() {
+            addCriterion("sa_remark is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkEqualTo(String value) {
+            addCriterion("sa_remark =", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkNotEqualTo(String value) {
+            addCriterion("sa_remark <>", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkGreaterThan(String value) {
+            addCriterion("sa_remark >", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_remark >=", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkLessThan(String value) {
+            addCriterion("sa_remark <", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkLessThanOrEqualTo(String value) {
+            addCriterion("sa_remark <=", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkLike(String value) {
+            addCriterion("sa_remark like", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkNotLike(String value) {
+            addCriterion("sa_remark not like", value, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkIn(List<String> values) {
+            addCriterion("sa_remark in", values, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkNotIn(List<String> values) {
+            addCriterion("sa_remark not in", values, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkBetween(String value1, String value2) {
+            addCriterion("sa_remark between", value1, value2, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_remarkNotBetween(String value1, String value2) {
+            addCriterion("sa_remark not between", value1, value2, "sa_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusIsNull() {
+            addCriterion("sa_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusIsNotNull() {
+            addCriterion("sa_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusEqualTo(String value) {
+            addCriterion("sa_status =", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusNotEqualTo(String value) {
+            addCriterion("sa_status <>", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusGreaterThan(String value) {
+            addCriterion("sa_status >", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_status >=", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusLessThan(String value) {
+            addCriterion("sa_status <", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusLessThanOrEqualTo(String value) {
+            addCriterion("sa_status <=", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusLike(String value) {
+            addCriterion("sa_status like", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusNotLike(String value) {
+            addCriterion("sa_status not like", value, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusIn(List<String> values) {
+            addCriterion("sa_status in", values, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusNotIn(List<String> values) {
+            addCriterion("sa_status not in", values, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusBetween(String value1, String value2) {
+            addCriterion("sa_status between", value1, value2, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statusNotBetween(String value1, String value2) {
+            addCriterion("sa_status not between", value1, value2, "sa_status");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeIsNull() {
+            addCriterion("sa_statuscode is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeIsNotNull() {
+            addCriterion("sa_statuscode is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeEqualTo(String value) {
+            addCriterion("sa_statuscode =", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeNotEqualTo(String value) {
+            addCriterion("sa_statuscode <>", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeGreaterThan(String value) {
+            addCriterion("sa_statuscode >", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_statuscode >=", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeLessThan(String value) {
+            addCriterion("sa_statuscode <", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeLessThanOrEqualTo(String value) {
+            addCriterion("sa_statuscode <=", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeLike(String value) {
+            addCriterion("sa_statuscode like", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeNotLike(String value) {
+            addCriterion("sa_statuscode not like", value, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeIn(List<String> values) {
+            addCriterion("sa_statuscode in", values, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeNotIn(List<String> values) {
+            addCriterion("sa_statuscode not in", values, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeBetween(String value1, String value2) {
+            addCriterion("sa_statuscode between", value1, value2, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_statuscodeNotBetween(String value1, String value2) {
+            addCriterion("sa_statuscode not between", value1, value2, "sa_statuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeIsNull() {
+            addCriterion("sa_sendstatuscode is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeIsNotNull() {
+            addCriterion("sa_sendstatuscode is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeEqualTo(String value) {
+            addCriterion("sa_sendstatuscode =", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeNotEqualTo(String value) {
+            addCriterion("sa_sendstatuscode <>", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeGreaterThan(String value) {
+            addCriterion("sa_sendstatuscode >", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_sendstatuscode >=", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeLessThan(String value) {
+            addCriterion("sa_sendstatuscode <", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeLessThanOrEqualTo(String value) {
+            addCriterion("sa_sendstatuscode <=", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeLike(String value) {
+            addCriterion("sa_sendstatuscode like", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeNotLike(String value) {
+            addCriterion("sa_sendstatuscode not like", value, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeIn(List<String> values) {
+            addCriterion("sa_sendstatuscode in", values, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeNotIn(List<String> values) {
+            addCriterion("sa_sendstatuscode not in", values, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeBetween(String value1, String value2) {
+            addCriterion("sa_sendstatuscode between", value1, value2, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatuscodeNotBetween(String value1, String value2) {
+            addCriterion("sa_sendstatuscode not between", value1, value2, "sa_sendstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusIsNull() {
+            addCriterion("sa_sendstatus is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusIsNotNull() {
+            addCriterion("sa_sendstatus is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusEqualTo(String value) {
+            addCriterion("sa_sendstatus =", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusNotEqualTo(String value) {
+            addCriterion("sa_sendstatus <>", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusGreaterThan(String value) {
+            addCriterion("sa_sendstatus >", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_sendstatus >=", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusLessThan(String value) {
+            addCriterion("sa_sendstatus <", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusLessThanOrEqualTo(String value) {
+            addCriterion("sa_sendstatus <=", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusLike(String value) {
+            addCriterion("sa_sendstatus like", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusNotLike(String value) {
+            addCriterion("sa_sendstatus not like", value, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusIn(List<String> values) {
+            addCriterion("sa_sendstatus in", values, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusNotIn(List<String> values) {
+            addCriterion("sa_sendstatus not in", values, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusBetween(String value1, String value2) {
+            addCriterion("sa_sendstatus between", value1, value2, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_sendstatusNotBetween(String value1, String value2) {
+            addCriterion("sa_sendstatus not between", value1, value2, "sa_sendstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusIsNull() {
+            addCriterion("sa_printstatus is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusIsNotNull() {
+            addCriterion("sa_printstatus is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusEqualTo(String value) {
+            addCriterion("sa_printstatus =", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusNotEqualTo(String value) {
+            addCriterion("sa_printstatus <>", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusGreaterThan(String value) {
+            addCriterion("sa_printstatus >", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_printstatus >=", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusLessThan(String value) {
+            addCriterion("sa_printstatus <", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusLessThanOrEqualTo(String value) {
+            addCriterion("sa_printstatus <=", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusLike(String value) {
+            addCriterion("sa_printstatus like", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusNotLike(String value) {
+            addCriterion("sa_printstatus not like", value, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusIn(List<String> values) {
+            addCriterion("sa_printstatus in", values, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusNotIn(List<String> values) {
+            addCriterion("sa_printstatus not in", values, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusBetween(String value1, String value2) {
+            addCriterion("sa_printstatus between", value1, value2, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatusNotBetween(String value1, String value2) {
+            addCriterion("sa_printstatus not between", value1, value2, "sa_printstatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeIsNull() {
+            addCriterion("sa_printstatuscode is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeIsNotNull() {
+            addCriterion("sa_printstatuscode is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeEqualTo(String value) {
+            addCriterion("sa_printstatuscode =", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeNotEqualTo(String value) {
+            addCriterion("sa_printstatuscode <>", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeGreaterThan(String value) {
+            addCriterion("sa_printstatuscode >", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_printstatuscode >=", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeLessThan(String value) {
+            addCriterion("sa_printstatuscode <", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeLessThanOrEqualTo(String value) {
+            addCriterion("sa_printstatuscode <=", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeLike(String value) {
+            addCriterion("sa_printstatuscode like", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeNotLike(String value) {
+            addCriterion("sa_printstatuscode not like", value, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeIn(List<String> values) {
+            addCriterion("sa_printstatuscode in", values, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeNotIn(List<String> values) {
+            addCriterion("sa_printstatuscode not in", values, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeBetween(String value1, String value2) {
+            addCriterion("sa_printstatuscode between", value1, value2, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_printstatuscodeNotBetween(String value1, String value2) {
+            addCriterion("sa_printstatuscode not between", value1, value2, "sa_printstatuscode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidIsNull() {
+            addCriterion("sa_recorderid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidIsNotNull() {
+            addCriterion("sa_recorderid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidEqualTo(Integer value) {
+            addCriterion("sa_recorderid =", value, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidNotEqualTo(Integer value) {
+            addCriterion("sa_recorderid <>", value, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidGreaterThan(Integer value) {
+            addCriterion("sa_recorderid >", value, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sa_recorderid >=", value, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidLessThan(Integer value) {
+            addCriterion("sa_recorderid <", value, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidLessThanOrEqualTo(Integer value) {
+            addCriterion("sa_recorderid <=", value, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidIn(List<Integer> values) {
+            addCriterion("sa_recorderid in", values, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidNotIn(List<Integer> values) {
+            addCriterion("sa_recorderid not in", values, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidBetween(Integer value1, Integer value2) {
+            addCriterion("sa_recorderid between", value1, value2, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderidNotBetween(Integer value1, Integer value2) {
+            addCriterion("sa_recorderid not between", value1, value2, "sa_recorderid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderIsNull() {
+            addCriterion("sa_recorder is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderIsNotNull() {
+            addCriterion("sa_recorder is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderEqualTo(String value) {
+            addCriterion("sa_recorder =", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderNotEqualTo(String value) {
+            addCriterion("sa_recorder <>", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderGreaterThan(String value) {
+            addCriterion("sa_recorder >", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderGreaterThanOrEqualTo(String value) {
+            addCriterion("sa_recorder >=", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderLessThan(String value) {
+            addCriterion("sa_recorder <", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderLessThanOrEqualTo(String value) {
+            addCriterion("sa_recorder <=", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderLike(String value) {
+            addCriterion("sa_recorder like", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderNotLike(String value) {
+            addCriterion("sa_recorder not like", value, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderIn(List<String> values) {
+            addCriterion("sa_recorder in", values, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderNotIn(List<String> values) {
+            addCriterion("sa_recorder not in", values, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderBetween(String value1, String value2) {
+            addCriterion("sa_recorder between", value1, value2, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorderNotBetween(String value1, String value2) {
+            addCriterion("sa_recorder not between", value1, value2, "sa_recorder");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateIsNull() {
+            addCriterion("sa_recorddate is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateIsNotNull() {
+            addCriterion("sa_recorddate is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateEqualTo(Date value) {
+            addCriterion("sa_recorddate =", value, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateNotEqualTo(Date value) {
+            addCriterion("sa_recorddate <>", value, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateGreaterThan(Date value) {
+            addCriterion("sa_recorddate >", value, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateGreaterThanOrEqualTo(Date value) {
+            addCriterion("sa_recorddate >=", value, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateLessThan(Date value) {
+            addCriterion("sa_recorddate <", value, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateLessThanOrEqualTo(Date value) {
+            addCriterion("sa_recorddate <=", value, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateIn(List<Date> values) {
+            addCriterion("sa_recorddate in", values, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateNotIn(List<Date> values) {
+            addCriterion("sa_recorddate not in", values, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateBetween(Date value1, Date value2) {
+            addCriterion("sa_recorddate between", value1, value2, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_recorddateNotBetween(Date value1, Date value2) {
+            addCriterion("sa_recorddate not between", value1, value2, "sa_recorddate");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidIsNull() {
+            addCriterion("companyid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidIsNotNull() {
+            addCriterion("companyid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidEqualTo(Integer value) {
+            addCriterion("companyid =", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidNotEqualTo(Integer value) {
+            addCriterion("companyid <>", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidGreaterThan(Integer value) {
+            addCriterion("companyid >", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("companyid >=", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidLessThan(Integer value) {
+            addCriterion("companyid <", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidLessThanOrEqualTo(Integer value) {
+            addCriterion("companyid <=", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidIn(List<Integer> values) {
+            addCriterion("companyid in", values, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidNotIn(List<Integer> values) {
+            addCriterion("companyid not in", values, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidBetween(Integer value1, Integer value2) {
+            addCriterion("companyid between", value1, value2, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidNotBetween(Integer value1, Integer value2) {
+            addCriterion("companyid not between", value1, value2, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdIsNull() {
+            addCriterion("updaterId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdIsNotNull() {
+            addCriterion("updaterId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdEqualTo(Integer value) {
+            addCriterion("updaterId =", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdNotEqualTo(Integer value) {
+            addCriterion("updaterId <>", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdGreaterThan(Integer value) {
+            addCriterion("updaterId >", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("updaterId >=", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdLessThan(Integer value) {
+            addCriterion("updaterId <", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdLessThanOrEqualTo(Integer value) {
+            addCriterion("updaterId <=", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdIn(List<Integer> values) {
+            addCriterion("updaterId in", values, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdNotIn(List<Integer> values) {
+            addCriterion("updaterId not in", values, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdBetween(Integer value1, Integer value2) {
+            addCriterion("updaterId between", value1, value2, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("updaterId not between", value1, value2, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNull() {
+            addCriterion("updatetime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNotNull() {
+            addCriterion("updatetime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualTo(Date value) {
+            addCriterion("updatetime =", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualTo(Date value) {
+            addCriterion("updatetime <>", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThan(Date value) {
+            addCriterion("updatetime >", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("updatetime >=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThan(Date value) {
+            addCriterion("updatetime <", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualTo(Date value) {
+            addCriterion("updatetime <=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIn(List<Date> values) {
+            addCriterion("updatetime in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotIn(List<Date> values) {
+            addCriterion("updatetime not in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeBetween(Date value1, Date value2) {
+            addCriterion("updatetime between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotBetween(Date value1, Date value2) {
+            addCriterion("updatetime not between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1IsNull() {
+            addCriterion("sa_text1 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1IsNotNull() {
+            addCriterion("sa_text1 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1EqualTo(String value) {
+            addCriterion("sa_text1 =", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1NotEqualTo(String value) {
+            addCriterion("sa_text1 <>", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1GreaterThan(String value) {
+            addCriterion("sa_text1 >", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1GreaterThanOrEqualTo(String value) {
+            addCriterion("sa_text1 >=", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1LessThan(String value) {
+            addCriterion("sa_text1 <", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1LessThanOrEqualTo(String value) {
+            addCriterion("sa_text1 <=", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1Like(String value) {
+            addCriterion("sa_text1 like", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1NotLike(String value) {
+            addCriterion("sa_text1 not like", value, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1In(List<String> values) {
+            addCriterion("sa_text1 in", values, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1NotIn(List<String> values) {
+            addCriterion("sa_text1 not in", values, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1Between(String value1, String value2) {
+            addCriterion("sa_text1 between", value1, value2, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text1NotBetween(String value1, String value2) {
+            addCriterion("sa_text1 not between", value1, value2, "sa_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2IsNull() {
+            addCriterion("sa_text2 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2IsNotNull() {
+            addCriterion("sa_text2 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2EqualTo(String value) {
+            addCriterion("sa_text2 =", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2NotEqualTo(String value) {
+            addCriterion("sa_text2 <>", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2GreaterThan(String value) {
+            addCriterion("sa_text2 >", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2GreaterThanOrEqualTo(String value) {
+            addCriterion("sa_text2 >=", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2LessThan(String value) {
+            addCriterion("sa_text2 <", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2LessThanOrEqualTo(String value) {
+            addCriterion("sa_text2 <=", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2Like(String value) {
+            addCriterion("sa_text2 like", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2NotLike(String value) {
+            addCriterion("sa_text2 not like", value, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2In(List<String> values) {
+            addCriterion("sa_text2 in", values, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2NotIn(List<String> values) {
+            addCriterion("sa_text2 not in", values, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2Between(String value1, String value2) {
+            addCriterion("sa_text2 between", value1, value2, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text2NotBetween(String value1, String value2) {
+            addCriterion("sa_text2 not between", value1, value2, "sa_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3IsNull() {
+            addCriterion("sa_text3 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3IsNotNull() {
+            addCriterion("sa_text3 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3EqualTo(String value) {
+            addCriterion("sa_text3 =", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3NotEqualTo(String value) {
+            addCriterion("sa_text3 <>", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3GreaterThan(String value) {
+            addCriterion("sa_text3 >", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3GreaterThanOrEqualTo(String value) {
+            addCriterion("sa_text3 >=", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3LessThan(String value) {
+            addCriterion("sa_text3 <", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3LessThanOrEqualTo(String value) {
+            addCriterion("sa_text3 <=", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3Like(String value) {
+            addCriterion("sa_text3 like", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3NotLike(String value) {
+            addCriterion("sa_text3 not like", value, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3In(List<String> values) {
+            addCriterion("sa_text3 in", values, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3NotIn(List<String> values) {
+            addCriterion("sa_text3 not in", values, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3Between(String value1, String value2) {
+            addCriterion("sa_text3 between", value1, value2, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text3NotBetween(String value1, String value2) {
+            addCriterion("sa_text3 not between", value1, value2, "sa_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4IsNull() {
+            addCriterion("sa_text4 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4IsNotNull() {
+            addCriterion("sa_text4 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4EqualTo(String value) {
+            addCriterion("sa_text4 =", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4NotEqualTo(String value) {
+            addCriterion("sa_text4 <>", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4GreaterThan(String value) {
+            addCriterion("sa_text4 >", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4GreaterThanOrEqualTo(String value) {
+            addCriterion("sa_text4 >=", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4LessThan(String value) {
+            addCriterion("sa_text4 <", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4LessThanOrEqualTo(String value) {
+            addCriterion("sa_text4 <=", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4Like(String value) {
+            addCriterion("sa_text4 like", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4NotLike(String value) {
+            addCriterion("sa_text4 not like", value, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4In(List<String> values) {
+            addCriterion("sa_text4 in", values, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4NotIn(List<String> values) {
+            addCriterion("sa_text4 not in", values, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4Between(String value1, String value2) {
+            addCriterion("sa_text4 between", value1, value2, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text4NotBetween(String value1, String value2) {
+            addCriterion("sa_text4 not between", value1, value2, "sa_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5IsNull() {
+            addCriterion("sa_text5 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5IsNotNull() {
+            addCriterion("sa_text5 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5EqualTo(String value) {
+            addCriterion("sa_text5 =", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5NotEqualTo(String value) {
+            addCriterion("sa_text5 <>", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5GreaterThan(String value) {
+            addCriterion("sa_text5 >", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5GreaterThanOrEqualTo(String value) {
+            addCriterion("sa_text5 >=", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5LessThan(String value) {
+            addCriterion("sa_text5 <", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5LessThanOrEqualTo(String value) {
+            addCriterion("sa_text5 <=", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5Like(String value) {
+            addCriterion("sa_text5 like", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5NotLike(String value) {
+            addCriterion("sa_text5 not like", value, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5In(List<String> values) {
+            addCriterion("sa_text5 in", values, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5NotIn(List<String> values) {
+            addCriterion("sa_text5 not in", values, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5Between(String value1, String value2) {
+            addCriterion("sa_text5 between", value1, value2, "sa_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSa_text5NotBetween(String value1, String value2) {
+            addCriterion("sa_text5 not between", value1, value2, "sa_text5");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

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

@@ -0,0 +1,105 @@
+package com.usoftchina.saas.sale.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 14:38
+ **/
+@Data
+public class SaleList implements Serializable{
+    private Integer sa_id;
+
+    private String sa_code;
+
+    private Integer sa_custid;
+
+    private String sa_custcode;
+
+    private String sa_custname;
+
+    private String sa_toplace;
+
+    private Double sa_total;
+
+    private String sa_totalupper;
+
+    private String sa_remark;
+
+    private String sa_status;
+
+    private String sa_statuscode;
+
+    private String sa_sendstatuscode;
+
+    private String sa_sendstatus;
+
+    private String sa_printstatus;
+
+    private String sa_printstatuscode;
+
+    private Integer sa_recorderid;
+
+    private String sa_recorder;
+
+    private Date sa_recorddate;
+
+    private Integer companyid;
+
+    private Integer updaterId;
+
+    private Date updatetime;
+
+    private String sa_text1;
+
+    private String sa_text2;
+
+    private String sa_text3;
+
+    private String sa_text4;
+
+    private String sa_text5;
+
+    private Integer sd_id;
+
+    private Integer sd_said;
+
+    private Integer sd_detno;
+
+    private Integer sd_prodid;
+
+    private String sd_prodcode;
+
+    private Double sd_qty;
+
+    private Double sd_price;
+
+    private Double sd_total;
+
+    private Double sd_taxrate;
+
+    private Double sd_netprice;
+
+    private Double sd_nettotal;
+
+    private Date sd_delivery;
+
+    private Double sd_sendqty;
+
+    private Double sd_pdqty;
+
+    private String sd_remark;
+
+    private String sd_text1;
+
+    private String sd_text2;
+
+    private String sd_text3;
+
+    private String sd_text4;
+
+    private String sd_text5;
+}

+ 1651 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaledetailExample.java

@@ -0,0 +1,1651 @@
+package com.usoftchina.saas.sale.po;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class SaledetailExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public SaledetailExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andSd_idIsNull() {
+            addCriterion("sd_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idIsNotNull() {
+            addCriterion("sd_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idEqualTo(Integer value) {
+            addCriterion("sd_id =", value, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idNotEqualTo(Integer value) {
+            addCriterion("sd_id <>", value, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idGreaterThan(Integer value) {
+            addCriterion("sd_id >", value, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sd_id >=", value, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idLessThan(Integer value) {
+            addCriterion("sd_id <", value, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idLessThanOrEqualTo(Integer value) {
+            addCriterion("sd_id <=", value, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idIn(List<Integer> values) {
+            addCriterion("sd_id in", values, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idNotIn(List<Integer> values) {
+            addCriterion("sd_id not in", values, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idBetween(Integer value1, Integer value2) {
+            addCriterion("sd_id between", value1, value2, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_idNotBetween(Integer value1, Integer value2) {
+            addCriterion("sd_id not between", value1, value2, "sd_id");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidIsNull() {
+            addCriterion("sd_said is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidIsNotNull() {
+            addCriterion("sd_said is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidEqualTo(Integer value) {
+            addCriterion("sd_said =", value, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidNotEqualTo(Integer value) {
+            addCriterion("sd_said <>", value, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidGreaterThan(Integer value) {
+            addCriterion("sd_said >", value, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sd_said >=", value, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidLessThan(Integer value) {
+            addCriterion("sd_said <", value, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidLessThanOrEqualTo(Integer value) {
+            addCriterion("sd_said <=", value, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidIn(List<Integer> values) {
+            addCriterion("sd_said in", values, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidNotIn(List<Integer> values) {
+            addCriterion("sd_said not in", values, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidBetween(Integer value1, Integer value2) {
+            addCriterion("sd_said between", value1, value2, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_saidNotBetween(Integer value1, Integer value2) {
+            addCriterion("sd_said not between", value1, value2, "sd_said");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoIsNull() {
+            addCriterion("sd_detno is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoIsNotNull() {
+            addCriterion("sd_detno is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoEqualTo(Integer value) {
+            addCriterion("sd_detno =", value, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoNotEqualTo(Integer value) {
+            addCriterion("sd_detno <>", value, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoGreaterThan(Integer value) {
+            addCriterion("sd_detno >", value, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sd_detno >=", value, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoLessThan(Integer value) {
+            addCriterion("sd_detno <", value, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoLessThanOrEqualTo(Integer value) {
+            addCriterion("sd_detno <=", value, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoIn(List<Integer> values) {
+            addCriterion("sd_detno in", values, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoNotIn(List<Integer> values) {
+            addCriterion("sd_detno not in", values, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoBetween(Integer value1, Integer value2) {
+            addCriterion("sd_detno between", value1, value2, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_detnoNotBetween(Integer value1, Integer value2) {
+            addCriterion("sd_detno not between", value1, value2, "sd_detno");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidIsNull() {
+            addCriterion("sd_prodid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidIsNotNull() {
+            addCriterion("sd_prodid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidEqualTo(Integer value) {
+            addCriterion("sd_prodid =", value, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidNotEqualTo(Integer value) {
+            addCriterion("sd_prodid <>", value, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidGreaterThan(Integer value) {
+            addCriterion("sd_prodid >", value, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sd_prodid >=", value, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidLessThan(Integer value) {
+            addCriterion("sd_prodid <", value, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidLessThanOrEqualTo(Integer value) {
+            addCriterion("sd_prodid <=", value, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidIn(List<Integer> values) {
+            addCriterion("sd_prodid in", values, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidNotIn(List<Integer> values) {
+            addCriterion("sd_prodid not in", values, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidBetween(Integer value1, Integer value2) {
+            addCriterion("sd_prodid between", value1, value2, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodidNotBetween(Integer value1, Integer value2) {
+            addCriterion("sd_prodid not between", value1, value2, "sd_prodid");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeIsNull() {
+            addCriterion("sd_prodcode is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeIsNotNull() {
+            addCriterion("sd_prodcode is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeEqualTo(String value) {
+            addCriterion("sd_prodcode =", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeNotEqualTo(String value) {
+            addCriterion("sd_prodcode <>", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeGreaterThan(String value) {
+            addCriterion("sd_prodcode >", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeGreaterThanOrEqualTo(String value) {
+            addCriterion("sd_prodcode >=", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeLessThan(String value) {
+            addCriterion("sd_prodcode <", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeLessThanOrEqualTo(String value) {
+            addCriterion("sd_prodcode <=", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeLike(String value) {
+            addCriterion("sd_prodcode like", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeNotLike(String value) {
+            addCriterion("sd_prodcode not like", value, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeIn(List<String> values) {
+            addCriterion("sd_prodcode in", values, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeNotIn(List<String> values) {
+            addCriterion("sd_prodcode not in", values, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeBetween(String value1, String value2) {
+            addCriterion("sd_prodcode between", value1, value2, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_prodcodeNotBetween(String value1, String value2) {
+            addCriterion("sd_prodcode not between", value1, value2, "sd_prodcode");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyIsNull() {
+            addCriterion("sd_qty is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyIsNotNull() {
+            addCriterion("sd_qty is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyEqualTo(Double value) {
+            addCriterion("sd_qty =", value, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyNotEqualTo(Double value) {
+            addCriterion("sd_qty <>", value, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyGreaterThan(Double value) {
+            addCriterion("sd_qty >", value, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_qty >=", value, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyLessThan(Double value) {
+            addCriterion("sd_qty <", value, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyLessThanOrEqualTo(Double value) {
+            addCriterion("sd_qty <=", value, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyIn(List<Double> values) {
+            addCriterion("sd_qty in", values, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyNotIn(List<Double> values) {
+            addCriterion("sd_qty not in", values, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyBetween(Double value1, Double value2) {
+            addCriterion("sd_qty between", value1, value2, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_qtyNotBetween(Double value1, Double value2) {
+            addCriterion("sd_qty not between", value1, value2, "sd_qty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceIsNull() {
+            addCriterion("sd_price is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceIsNotNull() {
+            addCriterion("sd_price is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceEqualTo(Double value) {
+            addCriterion("sd_price =", value, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceNotEqualTo(Double value) {
+            addCriterion("sd_price <>", value, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceGreaterThan(Double value) {
+            addCriterion("sd_price >", value, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_price >=", value, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceLessThan(Double value) {
+            addCriterion("sd_price <", value, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceLessThanOrEqualTo(Double value) {
+            addCriterion("sd_price <=", value, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceIn(List<Double> values) {
+            addCriterion("sd_price in", values, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceNotIn(List<Double> values) {
+            addCriterion("sd_price not in", values, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceBetween(Double value1, Double value2) {
+            addCriterion("sd_price between", value1, value2, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_priceNotBetween(Double value1, Double value2) {
+            addCriterion("sd_price not between", value1, value2, "sd_price");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalIsNull() {
+            addCriterion("sd_total is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalIsNotNull() {
+            addCriterion("sd_total is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalEqualTo(Double value) {
+            addCriterion("sd_total =", value, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalNotEqualTo(Double value) {
+            addCriterion("sd_total <>", value, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalGreaterThan(Double value) {
+            addCriterion("sd_total >", value, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_total >=", value, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalLessThan(Double value) {
+            addCriterion("sd_total <", value, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalLessThanOrEqualTo(Double value) {
+            addCriterion("sd_total <=", value, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalIn(List<Double> values) {
+            addCriterion("sd_total in", values, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalNotIn(List<Double> values) {
+            addCriterion("sd_total not in", values, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalBetween(Double value1, Double value2) {
+            addCriterion("sd_total between", value1, value2, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_totalNotBetween(Double value1, Double value2) {
+            addCriterion("sd_total not between", value1, value2, "sd_total");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateIsNull() {
+            addCriterion("sd_taxrate is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateIsNotNull() {
+            addCriterion("sd_taxrate is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateEqualTo(Double value) {
+            addCriterion("sd_taxrate =", value, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateNotEqualTo(Double value) {
+            addCriterion("sd_taxrate <>", value, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateGreaterThan(Double value) {
+            addCriterion("sd_taxrate >", value, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_taxrate >=", value, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateLessThan(Double value) {
+            addCriterion("sd_taxrate <", value, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateLessThanOrEqualTo(Double value) {
+            addCriterion("sd_taxrate <=", value, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateIn(List<Double> values) {
+            addCriterion("sd_taxrate in", values, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateNotIn(List<Double> values) {
+            addCriterion("sd_taxrate not in", values, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateBetween(Double value1, Double value2) {
+            addCriterion("sd_taxrate between", value1, value2, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_taxrateNotBetween(Double value1, Double value2) {
+            addCriterion("sd_taxrate not between", value1, value2, "sd_taxrate");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceIsNull() {
+            addCriterion("sd_netprice is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceIsNotNull() {
+            addCriterion("sd_netprice is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceEqualTo(Double value) {
+            addCriterion("sd_netprice =", value, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceNotEqualTo(Double value) {
+            addCriterion("sd_netprice <>", value, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceGreaterThan(Double value) {
+            addCriterion("sd_netprice >", value, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_netprice >=", value, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceLessThan(Double value) {
+            addCriterion("sd_netprice <", value, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceLessThanOrEqualTo(Double value) {
+            addCriterion("sd_netprice <=", value, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceIn(List<Double> values) {
+            addCriterion("sd_netprice in", values, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceNotIn(List<Double> values) {
+            addCriterion("sd_netprice not in", values, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceBetween(Double value1, Double value2) {
+            addCriterion("sd_netprice between", value1, value2, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_netpriceNotBetween(Double value1, Double value2) {
+            addCriterion("sd_netprice not between", value1, value2, "sd_netprice");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalIsNull() {
+            addCriterion("sd_nettotal is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalIsNotNull() {
+            addCriterion("sd_nettotal is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalEqualTo(Double value) {
+            addCriterion("sd_nettotal =", value, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalNotEqualTo(Double value) {
+            addCriterion("sd_nettotal <>", value, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalGreaterThan(Double value) {
+            addCriterion("sd_nettotal >", value, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_nettotal >=", value, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalLessThan(Double value) {
+            addCriterion("sd_nettotal <", value, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalLessThanOrEqualTo(Double value) {
+            addCriterion("sd_nettotal <=", value, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalIn(List<Double> values) {
+            addCriterion("sd_nettotal in", values, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalNotIn(List<Double> values) {
+            addCriterion("sd_nettotal not in", values, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalBetween(Double value1, Double value2) {
+            addCriterion("sd_nettotal between", value1, value2, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_nettotalNotBetween(Double value1, Double value2) {
+            addCriterion("sd_nettotal not between", value1, value2, "sd_nettotal");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryIsNull() {
+            addCriterion("sd_delivery is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryIsNotNull() {
+            addCriterion("sd_delivery is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryEqualTo(Date value) {
+            addCriterion("sd_delivery =", value, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryNotEqualTo(Date value) {
+            addCriterion("sd_delivery <>", value, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryGreaterThan(Date value) {
+            addCriterion("sd_delivery >", value, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryGreaterThanOrEqualTo(Date value) {
+            addCriterion("sd_delivery >=", value, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryLessThan(Date value) {
+            addCriterion("sd_delivery <", value, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryLessThanOrEqualTo(Date value) {
+            addCriterion("sd_delivery <=", value, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryIn(List<Date> values) {
+            addCriterion("sd_delivery in", values, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryNotIn(List<Date> values) {
+            addCriterion("sd_delivery not in", values, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryBetween(Date value1, Date value2) {
+            addCriterion("sd_delivery between", value1, value2, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_deliveryNotBetween(Date value1, Date value2) {
+            addCriterion("sd_delivery not between", value1, value2, "sd_delivery");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyIsNull() {
+            addCriterion("sd_sendqty is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyIsNotNull() {
+            addCriterion("sd_sendqty is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyEqualTo(Double value) {
+            addCriterion("sd_sendqty =", value, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyNotEqualTo(Double value) {
+            addCriterion("sd_sendqty <>", value, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyGreaterThan(Double value) {
+            addCriterion("sd_sendqty >", value, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_sendqty >=", value, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyLessThan(Double value) {
+            addCriterion("sd_sendqty <", value, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyLessThanOrEqualTo(Double value) {
+            addCriterion("sd_sendqty <=", value, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyIn(List<Double> values) {
+            addCriterion("sd_sendqty in", values, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyNotIn(List<Double> values) {
+            addCriterion("sd_sendqty not in", values, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyBetween(Double value1, Double value2) {
+            addCriterion("sd_sendqty between", value1, value2, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_sendqtyNotBetween(Double value1, Double value2) {
+            addCriterion("sd_sendqty not between", value1, value2, "sd_sendqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyIsNull() {
+            addCriterion("sd_pdqty is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyIsNotNull() {
+            addCriterion("sd_pdqty is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyEqualTo(Double value) {
+            addCriterion("sd_pdqty =", value, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyNotEqualTo(Double value) {
+            addCriterion("sd_pdqty <>", value, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyGreaterThan(Double value) {
+            addCriterion("sd_pdqty >", value, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyGreaterThanOrEqualTo(Double value) {
+            addCriterion("sd_pdqty >=", value, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyLessThan(Double value) {
+            addCriterion("sd_pdqty <", value, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyLessThanOrEqualTo(Double value) {
+            addCriterion("sd_pdqty <=", value, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyIn(List<Double> values) {
+            addCriterion("sd_pdqty in", values, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyNotIn(List<Double> values) {
+            addCriterion("sd_pdqty not in", values, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyBetween(Double value1, Double value2) {
+            addCriterion("sd_pdqty between", value1, value2, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_pdqtyNotBetween(Double value1, Double value2) {
+            addCriterion("sd_pdqty not between", value1, value2, "sd_pdqty");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkIsNull() {
+            addCriterion("sd_remark is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkIsNotNull() {
+            addCriterion("sd_remark is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkEqualTo(String value) {
+            addCriterion("sd_remark =", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkNotEqualTo(String value) {
+            addCriterion("sd_remark <>", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkGreaterThan(String value) {
+            addCriterion("sd_remark >", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkGreaterThanOrEqualTo(String value) {
+            addCriterion("sd_remark >=", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkLessThan(String value) {
+            addCriterion("sd_remark <", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkLessThanOrEqualTo(String value) {
+            addCriterion("sd_remark <=", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkLike(String value) {
+            addCriterion("sd_remark like", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkNotLike(String value) {
+            addCriterion("sd_remark not like", value, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkIn(List<String> values) {
+            addCriterion("sd_remark in", values, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkNotIn(List<String> values) {
+            addCriterion("sd_remark not in", values, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkBetween(String value1, String value2) {
+            addCriterion("sd_remark between", value1, value2, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_remarkNotBetween(String value1, String value2) {
+            addCriterion("sd_remark not between", value1, value2, "sd_remark");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidIsNull() {
+            addCriterion("companyid is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidIsNotNull() {
+            addCriterion("companyid is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidEqualTo(Integer value) {
+            addCriterion("companyid =", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidNotEqualTo(Integer value) {
+            addCriterion("companyid <>", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidGreaterThan(Integer value) {
+            addCriterion("companyid >", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidGreaterThanOrEqualTo(Integer value) {
+            addCriterion("companyid >=", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidLessThan(Integer value) {
+            addCriterion("companyid <", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidLessThanOrEqualTo(Integer value) {
+            addCriterion("companyid <=", value, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidIn(List<Integer> values) {
+            addCriterion("companyid in", values, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidNotIn(List<Integer> values) {
+            addCriterion("companyid not in", values, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidBetween(Integer value1, Integer value2) {
+            addCriterion("companyid between", value1, value2, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andCompanyidNotBetween(Integer value1, Integer value2) {
+            addCriterion("companyid not between", value1, value2, "companyid");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdIsNull() {
+            addCriterion("updaterId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdIsNotNull() {
+            addCriterion("updaterId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdEqualTo(Integer value) {
+            addCriterion("updaterId =", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdNotEqualTo(Integer value) {
+            addCriterion("updaterId <>", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdGreaterThan(Integer value) {
+            addCriterion("updaterId >", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("updaterId >=", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdLessThan(Integer value) {
+            addCriterion("updaterId <", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdLessThanOrEqualTo(Integer value) {
+            addCriterion("updaterId <=", value, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdIn(List<Integer> values) {
+            addCriterion("updaterId in", values, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdNotIn(List<Integer> values) {
+            addCriterion("updaterId not in", values, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdBetween(Integer value1, Integer value2) {
+            addCriterion("updaterId between", value1, value2, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdaterIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("updaterId not between", value1, value2, "updaterId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNull() {
+            addCriterion("updatetime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNotNull() {
+            addCriterion("updatetime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualTo(Date value) {
+            addCriterion("updatetime =", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualTo(Date value) {
+            addCriterion("updatetime <>", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThan(Date value) {
+            addCriterion("updatetime >", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("updatetime >=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThan(Date value) {
+            addCriterion("updatetime <", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualTo(Date value) {
+            addCriterion("updatetime <=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIn(List<Date> values) {
+            addCriterion("updatetime in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotIn(List<Date> values) {
+            addCriterion("updatetime not in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeBetween(Date value1, Date value2) {
+            addCriterion("updatetime between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotBetween(Date value1, Date value2) {
+            addCriterion("updatetime not between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1IsNull() {
+            addCriterion("sd_text1 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1IsNotNull() {
+            addCriterion("sd_text1 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1EqualTo(String value) {
+            addCriterion("sd_text1 =", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1NotEqualTo(String value) {
+            addCriterion("sd_text1 <>", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1GreaterThan(String value) {
+            addCriterion("sd_text1 >", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1GreaterThanOrEqualTo(String value) {
+            addCriterion("sd_text1 >=", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1LessThan(String value) {
+            addCriterion("sd_text1 <", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1LessThanOrEqualTo(String value) {
+            addCriterion("sd_text1 <=", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1Like(String value) {
+            addCriterion("sd_text1 like", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1NotLike(String value) {
+            addCriterion("sd_text1 not like", value, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1In(List<String> values) {
+            addCriterion("sd_text1 in", values, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1NotIn(List<String> values) {
+            addCriterion("sd_text1 not in", values, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1Between(String value1, String value2) {
+            addCriterion("sd_text1 between", value1, value2, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text1NotBetween(String value1, String value2) {
+            addCriterion("sd_text1 not between", value1, value2, "sd_text1");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2IsNull() {
+            addCriterion("sd_text2 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2IsNotNull() {
+            addCriterion("sd_text2 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2EqualTo(String value) {
+            addCriterion("sd_text2 =", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2NotEqualTo(String value) {
+            addCriterion("sd_text2 <>", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2GreaterThan(String value) {
+            addCriterion("sd_text2 >", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2GreaterThanOrEqualTo(String value) {
+            addCriterion("sd_text2 >=", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2LessThan(String value) {
+            addCriterion("sd_text2 <", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2LessThanOrEqualTo(String value) {
+            addCriterion("sd_text2 <=", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2Like(String value) {
+            addCriterion("sd_text2 like", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2NotLike(String value) {
+            addCriterion("sd_text2 not like", value, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2In(List<String> values) {
+            addCriterion("sd_text2 in", values, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2NotIn(List<String> values) {
+            addCriterion("sd_text2 not in", values, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2Between(String value1, String value2) {
+            addCriterion("sd_text2 between", value1, value2, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text2NotBetween(String value1, String value2) {
+            addCriterion("sd_text2 not between", value1, value2, "sd_text2");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3IsNull() {
+            addCriterion("sd_text3 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3IsNotNull() {
+            addCriterion("sd_text3 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3EqualTo(String value) {
+            addCriterion("sd_text3 =", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3NotEqualTo(String value) {
+            addCriterion("sd_text3 <>", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3GreaterThan(String value) {
+            addCriterion("sd_text3 >", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3GreaterThanOrEqualTo(String value) {
+            addCriterion("sd_text3 >=", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3LessThan(String value) {
+            addCriterion("sd_text3 <", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3LessThanOrEqualTo(String value) {
+            addCriterion("sd_text3 <=", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3Like(String value) {
+            addCriterion("sd_text3 like", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3NotLike(String value) {
+            addCriterion("sd_text3 not like", value, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3In(List<String> values) {
+            addCriterion("sd_text3 in", values, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3NotIn(List<String> values) {
+            addCriterion("sd_text3 not in", values, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3Between(String value1, String value2) {
+            addCriterion("sd_text3 between", value1, value2, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text3NotBetween(String value1, String value2) {
+            addCriterion("sd_text3 not between", value1, value2, "sd_text3");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4IsNull() {
+            addCriterion("sd_text4 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4IsNotNull() {
+            addCriterion("sd_text4 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4EqualTo(String value) {
+            addCriterion("sd_text4 =", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4NotEqualTo(String value) {
+            addCriterion("sd_text4 <>", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4GreaterThan(String value) {
+            addCriterion("sd_text4 >", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4GreaterThanOrEqualTo(String value) {
+            addCriterion("sd_text4 >=", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4LessThan(String value) {
+            addCriterion("sd_text4 <", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4LessThanOrEqualTo(String value) {
+            addCriterion("sd_text4 <=", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4Like(String value) {
+            addCriterion("sd_text4 like", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4NotLike(String value) {
+            addCriterion("sd_text4 not like", value, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4In(List<String> values) {
+            addCriterion("sd_text4 in", values, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4NotIn(List<String> values) {
+            addCriterion("sd_text4 not in", values, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4Between(String value1, String value2) {
+            addCriterion("sd_text4 between", value1, value2, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text4NotBetween(String value1, String value2) {
+            addCriterion("sd_text4 not between", value1, value2, "sd_text4");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5IsNull() {
+            addCriterion("sd_text5 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5IsNotNull() {
+            addCriterion("sd_text5 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5EqualTo(String value) {
+            addCriterion("sd_text5 =", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5NotEqualTo(String value) {
+            addCriterion("sd_text5 <>", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5GreaterThan(String value) {
+            addCriterion("sd_text5 >", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5GreaterThanOrEqualTo(String value) {
+            addCriterion("sd_text5 >=", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5LessThan(String value) {
+            addCriterion("sd_text5 <", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5LessThanOrEqualTo(String value) {
+            addCriterion("sd_text5 <=", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5Like(String value) {
+            addCriterion("sd_text5 like", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5NotLike(String value) {
+            addCriterion("sd_text5 not like", value, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5In(List<String> values) {
+            addCriterion("sd_text5 in", values, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5NotIn(List<String> values) {
+            addCriterion("sd_text5 not in", values, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5Between(String value1, String value2) {
+            addCriterion("sd_text5 between", value1, value2, "sd_text5");
+            return (Criteria) this;
+        }
+
+        public Criteria andSd_text5NotBetween(String value1, String value2) {
+            addCriterion("sd_text5 not between", value1, value2, "sd_text5");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

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

@@ -0,0 +1,43 @@
+package com.usoftchina.saas.sale.service;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.service.CommonBaseService;
+import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
+import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.sale.dto.SaleFormDTO;
+import com.usoftchina.saas.sale.po.SaleList;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 11:28
+ **/
+public interface SaleService {
+
+    PageInfo<SaleList> getListData(PageRequest page, ListReqDTO req);
+
+    SaleFormDTO getFormData(Long id);
+
+    DocBaseDTO saveFormData(SaleFormDTO data);
+
+    void delete(Long id);
+
+    int deleteDetail(Long id);
+
+    DocBaseDTO audit(SaleFormDTO formData);
+
+    void unAudit(Long id);
+
+    void batchAudit(BatchDealBaseDTO baseDTOs);
+
+    void batchDelete(BatchDealBaseDTO baseDTOs);
+
+    void batchUnAudit(BatchDealBaseDTO baseDTOs);
+
+    void close(long id);
+
+    void open(long id);
+
+    void turnOut(Long id);
+}

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

@@ -0,0 +1,478 @@
+package com.usoftchina.saas.sale.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.netflix.discovery.converters.Auto;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.commons.api.MaxnumberService;
+import com.usoftchina.saas.commons.api.MessageLogService;
+import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
+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.Status;
+import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.exception.ExceptionCode;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.sale.dto.SaleDTO;
+import com.usoftchina.saas.sale.dto.SaleDetailDTO;
+import com.usoftchina.saas.sale.dto.SaleFormDTO;
+import com.usoftchina.saas.sale.mapper.SaleListMapper;
+import com.usoftchina.saas.sale.mapper.SaleMapper;
+import com.usoftchina.saas.sale.mapper.SaledetailMapper;
+import com.usoftchina.saas.sale.po.Sale;
+import com.usoftchina.saas.sale.po.SaleDetail;
+import com.usoftchina.saas.sale.po.SaleList;
+import com.usoftchina.saas.sale.service.SaleService;
+import com.usoftchina.saas.utils.BeanMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: guq
+ * @create: 2018-10-22 11:29
+ **/
+@Service
+public class SaleServiceImpl implements SaleService{
+
+    @Autowired
+    private SaleListMapper saleListMapper;
+    @Autowired
+    private SaleMapper saleMapper;
+    @Autowired
+    private SaledetailMapper saledetailMapper;
+    @Autowired
+    private MessageLogService messageLogService;
+    @Autowired
+    private MaxnumberService maxnumberService;
+
+    @Override
+    public PageInfo<SaleList> 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<SaleList> lists = getListByMode(req);
+        //取分页信息
+        PageInfo<SaleList> pageInfo = new PageInfo<SaleList>(lists);
+        return pageInfo;
+    }
+
+    @Override
+    public SaleFormDTO getFormData(Long id) {
+        if (null == id || "0".equals(id)) {
+            return null;
+        }
+        SaleFormDTO saleFormDTO = new SaleFormDTO();
+        //查询主表信息
+        Sale sale = saleMapper.selectByPrimaryKey(id);
+        //将purchase实体对象转化成传输对象
+        SaleDTO main = BeanMapper.map(sale, SaleDTO.class);
+        //查询从表
+        List<SaleDetail> saleDetails = saledetailMapper.selectByFK(id);
+        List<SaleDetailDTO> items = BeanMapper.mapList(saleDetails, SaleDetailDTO.class);
+        saleFormDTO.setMain(main);
+        saleFormDTO.setItems(items);
+        return  saleFormDTO;
+    }
+
+    @Override
+    public DocBaseDTO saveFormData(SaleFormDTO formdata) {
+        if (null == formdata || null == formdata.getMain()){
+            throw new BizException(500, "数据为空,请填写后再保存");
+        }
+        //公司ID
+        Long companyId = BaseContextHolder.getCompanyId();
+        //人员Id
+        Long userId = BaseContextHolder.getUserId();
+        //获取主表信息
+         SaleDTO main = formdata.getMain();
+        List<SaleDetailDTO> items = formdata.getItems();
+        //插入从表数据
+        List<SaleDetail> insertDetails = new ArrayList<>();
+        //更新从表数据
+        List<SaleDetail> updateDetails = new ArrayList<>();
+        //返回对象
+        DocBaseDTO baseDTO = null;
+        Long sa_id = main.getId();
+        String sa_code = main.getSa_code();
+        Sale sale = BeanMapper.map(main, Sale.class);
+        sale.setCompanyId(companyId);
+        sale.setCreatorId(userId);
+        sale.setCreateTime(new Date());
+
+        //编号校验
+        sa_code = pushMaxnubmer(sa_code, sa_id);
+        //单号赋值
+        sale.setSa_code(sa_code);
+        //判断更新与保存动作
+        if (StringUtils.isEmpty(sa_id) || "0".equals(sa_id.toString())) {
+            //插入操作
+            saleMapper.insertSelective(sale);
+            sa_id = sale.getId();
+            //添加从表传输对象
+            for (SaleDetailDTO item : items) {
+                SaleDetail detail = BeanMapper.map(item, SaleDetail.class);
+                detail.setSd_said(sa_id);
+                detail.setSd_code(sa_code);
+                insertDetails.add(detail);
+            }
+            //插入从表
+            if (insertDetails.size() > 0) {
+                saledetailMapper.batchInsert(insertDetails);
+            }
+            baseDTO = getBaseDTOById(sa_id);
+            //日志记录
+            messageLogService.save(baseDTO);
+            return baseDTO;
+        }
+        //更新操作
+        saleMapper.updateByPrimaryKeySelective(sale);
+        //添加从表传输对象
+        for (SaleDetailDTO item : items) {
+            SaleDetail detail = BeanMapper.map(item, SaleDetail.class);
+            detail.setSd_said(sa_id);
+            detail.setSd_code(sa_code);
+            if (StringUtils.isEmpty(detail.getId()) || "0".equals(detail.getId().toString())) {
+                insertDetails.add(detail);
+            } else {
+                updateDetails.add(detail);
+            }
+        }
+        //插入从表
+        if (insertDetails.size() > 0) {
+            saledetailMapper.batchInsert(insertDetails);
+        }
+        //更新从表
+        if (updateDetails.size() > 0) {
+            saledetailMapper.batchUpdate(updateDetails);
+        }
+        baseDTO = getBaseDTOById(sa_id);
+        //日志
+        messageLogService.save(baseDTO);
+        return baseDTO;
+    }
+
+    @Override
+    public void delete(Long id) {
+        singleDelete(id);
+    }
+
+    @Override
+    public int deleteDetail(Long id) {
+        Integer num = saledetailMapper.deleteByPrimaryKey(id);
+        DocBaseDTO docBaseDTO = getBaseDTOById(id);
+        //日志
+        messageLogService.deleteDetail(docBaseDTO);
+        return num;
+    }
+
+    @Override
+    public DocBaseDTO audit(SaleFormDTO formData) {
+        Long id = null;
+        DocBaseDTO baseDTO = null;
+        if (null != formData) {
+            id = formData.getMain().getId();
+            if (StringUtils.isEmpty(id) || "0".equals(String.valueOf(id))) {
+                baseDTO = saveFormData(formData);
+                id = baseDTO.getId();
+            }
+            singleAudit(id);
+        }
+        return baseDTO;
+    }
+
+    @Override
+    public void unAudit(Long id) {
+        if (null == id) {
+            return;
+        }
+        String code = saleMapper.validateUnAudit(id);
+        if (null != code) {
+            throw new BizException(500, "单据:" + code + " 未审核,无法反审核");
+        }
+        singleUnAudit(id);
+    }
+
+    @Override
+    public void batchAudit(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        String validate = saleMapper.validateAudit(baseDTOs.getBaseDTOs());
+        if (!StringUtils.isEmpty(validate)) {
+            throw new BizException(500, "存在已审核单据,单据编号:" + validate);
+        }
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            singleAudit(base.getId());
+        }
+    }
+
+    @Override
+    public void batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            singleDelete(base.getId());
+        }
+    }
+
+    private void singleAudit(Long id) {
+        Sale sale = new Sale();
+        //生成更新对象
+        sale.setId(id);
+        sale.setSa_status(Status.AUDITED.getDisplay());
+        sale.setSa_statuscode(Status.AUDITED.name());
+        sale.setUpdateTime(new Date());
+        sale.setUpdaterId(BaseContextHolder.getUserId());
+        //更新存在字段
+        saleMapper.updateByPrimaryKeySelective(sale);
+
+        DocBaseDTO docBaseDTO = getBaseDTOById(id);
+        //日志
+        messageLogService.audit(docBaseDTO);
+    }
+
+    private void singleDelete(Long id) {
+        if (null != id) {
+            //从表删除
+            saledetailMapper.deleteByForeignKey(id);
+            //主表删除
+            saleMapper.deleteByPrimaryKey(id);
+            DocBaseDTO docBaseDTO = getBaseDTOById(id);
+            //日志
+            messageLogService.delete(docBaseDTO);
+        }
+    }
+
+
+    private List<SaleList> getListByMode(ListReqDTO req) {
+        List<SaleList> list = null;
+        if (null == req || StringUtils.isEmpty(req.getMode()) || "MAIN".equals(req.getMode())) {
+            list = saleListMapper.selectSaleBycondition(req);
+        } else {
+            list = saleListMapper.selectPurchaseListByCondition(req);
+        }
+        return list;
+    }
+
+    /**
+     * @Description: 检验获取并更新单号
+     * @Param: [code, id]
+     * @return: java.lang.String
+     * @Author: guq
+     * @Date: 2018/10/19
+     */
+    private String pushMaxnubmer(String code, Long id) {
+        if (null == code) {
+            throw new BizException(BizExceptionCode.NULL_CODE);
+        }
+        Integer count = "0".equals(String.valueOf(id)) ? saleMapper.validateCodeWhenInsert(code) :
+                saleMapper.validateCodeWhenUpdate(code, id);
+        return maxnumberService.pushMaxnubmer(count, code, "Purchase");
+    }
+
+    /**
+     * @Description
+     * @Param: [id]
+     * @return: com.usoftchina.saas.commons.dto.DocBaseDTO
+     * @Author: guq
+     * @Date: 2018/10/22
+     */
+    private DocBaseDTO getBaseDTOById(Long id) {
+        if (null == id) {
+            return null;
+        }
+        String code = saleMapper.selectCodeById(id);
+        DocBaseDTO baseDTO = new DocBaseDTO();
+        baseDTO.setId(id);
+        baseDTO.setCode(code);
+        baseDTO.setName("Purchase");
+        return baseDTO;
+    }
+
+    @Override
+    public void batchUnAudit(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return;
+        }
+
+        String msg = saleMapper.validateBatchUnAudit(baseDTOs.getBaseDTOs());
+        if (null != msg) {
+            throw new BizException(500, "存在未审核单据,单据编号:" + msg);
+        }
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            singleUnAudit(base.getId());
+        }
+    }
+
+    @Override
+    public void close(long id) {
+        Sale sale = new Sale();
+        sale.setId(id);
+        sale.setSa_sendstatus(Status.CLOSE.getDisplay());
+        sale.setSa_sendstatuscode(Status.CLOSE.name());
+        saleMapper.updateByPrimaryKeySelective(sale);
+        DocBaseDTO docBaseDTO = getBaseDTOById(id);
+        //日志
+        messageLogService.close(docBaseDTO);
+    }
+
+    @Override
+    public void open(long id) {
+        List<SaleDetail> saleDetailList = saledetailMapper.selectByFK(id);
+       /* //部分入库、全部入库
+        int partTurnCount = 0,turnCount = 0;
+        if(saleDetailList != null && saleDetailList.size() > 0){
+            for(SaleDetail saleDetail : saleDetailList){
+                //入库数大于等于采购数
+                if(purchaseDetail.getPd_acceptqty() >= purchaseDetail.getPd_qty()){
+                    turnCount++;
+                    //     0 < 入库数 < 采购数
+                    partTurnCount++;
+                }else if(purchaseDetail.getPd_acceptqty() > 0 && purchaseDetail.getPd_acceptqty() < purchaseDetail.getPd_qty()){
+                }
+            }
+            //构造更新对象
+            Purchase purchase = new Purchase();
+            purchase.setId(id);
+            purchase.setPu_acceptstatuscode("UNTURNIN");
+            purchase.setPu_acceptstatus("未入库");
+            if(partTurnCount > 0){
+                purchase.setPu_acceptstatuscode("PART2IN");
+                purchase.setPu_acceptstatus("部分入库");
+            }
+            if(turnCount == purchaseDetailList.size()){
+                purchase.setPu_acceptstatus("已入库");
+                purchase.setPu_acceptstatuscode("TURNIN");
+            }
+            purchaseMapper.updateByPrimaryKeySelective(purchase);
+            DocBaseDTO docBaseDTO = getBaseDTOById(id);
+            //日志
+            messageLogService.open(docBaseDTO);
+        }*/
+    }
+
+    @Override
+    public void turnOut(Long id) {
+
+    }/*{
+        if (null == id) {
+            return;
+        }
+        Sale sale = saleMapper.selectByPrimaryKey(id);
+        Integer count=0;
+        double pdQty=0, pdYqty=0;
+        //检查转单状态
+       // String acceptstatus = sale.getPu_acceptstatuscode();
+
+        if ("TURNIN".equals(acceptstatus)){
+            return Result.error(ExceptionCode.TURNIN_EXIST);
+        }
+        if ("CLOSED".equals(acceptstatus)){
+            return Result.error(ExceptionCode.CLOSED_EXIST);
+        }
+
+        List<PurchaseDetail> purchaseDetails = purchasedetailMapper.selectByFK(id);
+
+        //检查从表
+        for (PurchaseDetail purchaseDetail : purchaseDetails) {
+            pdQty = purchaseDetail.getPd_qty();
+            pdYqty = purchaseDetail.getPd_yqty();
+            if (pdQty-pdYqty>0){
+                count++;
+            }
+        }
+        //判断可转数
+        if (count==0){
+            return Result.error(ExceptionCode.TURNINNUM_NOT_EXIST);
+        }
+        //插入验收单主表
+        ProdInOut prodInOut = new ProdInOut();
+        //生成单号
+        String piInoutno ="YS0001";
+
+        prodInOut.setPi_inoutno(piInoutno);
+        prodInOut.setPi_class("采购验收单");
+        prodInOut.setPi_date(new Date());
+        prodInOut.setPi_status("未审核");
+        prodInOut.setPi_statuscode("UNAUDITED");
+        prodInOut.setPi_recorddate(new Date());
+        prodInOut.setPi_vendid(purchase.getPu_vendid());
+        prodInOut.setPi_vendcode(purchase.getPu_vendcode());
+        prodInOut.setPi_vendname(purchase.getPu_vendname());
+        prodInOut.setPi_puid(purchase.getId().intValue());
+        prodInOut.setPi_pucode(purchase.getPu_code());
+        //设置公司id
+        prodInOut.setCompanyId(purchase.getCompanyId());
+
+        prodInOutMapper.insertSelective(prodInOut);
+
+        //插入验收单从表
+        long pi_id = prodInOut.getId();
+
+        for (int i=0;i<purchaseDetails.size();i++){
+            PurchaseDetail purchaseDetail =purchaseDetails.get(i);
+            ProdIODetail prodIODetail = new ProdIODetail();
+            if ((int) (purchaseDetail.getPd_qty()-purchaseDetail.getPd_yqty())>0){
+                prodIODetail.setPd_piid(pi_id);
+                prodIODetail.setPd_inoutno(piInoutno);
+                prodIODetail.setPd_piclass("采购验收单");
+                prodIODetail.setPd_pdno(i);
+                prodIODetail.setPd_orderid(purchaseDetail.getId().intValue());
+                prodIODetail.setPd_ordercode(purchase.getPu_code());
+                prodIODetail.setPd_orderdetno(purchaseDetail.getPd_detno());
+                prodIODetail.setPd_orderprice(purchaseDetail.getPd_price());
+                prodIODetail.setPd_prodid(purchaseDetail.getPd_prodid());
+                prodIODetail.setPd_prodcode(purchaseDetail.getPd_prodcode());
+                //公司id
+                prodIODetail.setCompanyId(purchaseDetail.getCompanyId());
+                //本次转单数
+                prodIODetail.setPd_inqty((int) (purchaseDetail.getPd_qty()-purchaseDetail.getPd_yqty()));
+                prodIODetailMapper.insertSelective(prodIODetail);
+                //更新已转数
+                purchaseDetail.setPd_yqty(purchaseDetail.getPd_qty());
+                purchasedetailMapper.updateByPrimaryKeySelective(purchaseDetail);
+            }
+        }
+        //更新主表入库状态
+        purchase.setPu_acceptstatus("已入库");
+        purchase.setPu_acceptstatuscode("TURNIN");
+        //更新存在字段
+        int affect = getMapper().updateByPrimaryKeySelective(purchase);
+    }*/
+
+    private void singleUnAudit(Long id) {
+        Sale sale = new Sale();
+        //生成更新对象
+        sale.setId(id);
+        sale.setSa_status(Status.UNAUDITED.getDisplay());
+        sale.setSa_statuscode(Status.UNAUDITED.name());
+        sale.setUpdateTime(new Date());
+        sale.setUpdaterId(BaseContextHolder.getUserId());
+        //更新存在字段
+        saleMapper.updateByPrimaryKeySelective(sale);
+        DocBaseDTO docBaseDTO = getBaseDTOById(id);
+        //日志
+        messageLogService.unAudit(docBaseDTO);
+    }
+
+
+}

+ 63 - 0
applications/sale/sale-server/src/main/resources/application.yml

@@ -0,0 +1,63 @@
+spring:
+  application:
+    name: sale-server
+  security:
+    user:
+      name: admin
+      password: select111***
+  datasource:
+    driver-class-name: com.mysql.jdbc.Driver
+    url: jdbc:mysql://192.168.253.12:3306/saas_biz?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
+    username: root
+    password: select111***
+    hikari:
+      minimum-idle: 5
+      maximum-pool-size: 50
+      idle-timeout: 30000
+      max-lifetime: 1800000
+      connection-timeout: 30000
+  messages:
+    basename: i18n/messages
+    encoding: UTF-8
+  rabbitmq:
+    host: 192.168.0.176
+    port: 5672
+    virtual-host: dev
+    username: saas
+    password: select123***
+  zipkin:
+    sender:
+      type: rabbit
+    locator:
+      discovery:
+        enabled: true
+  sleuth:
+    sampler:
+      probability: 1.0
+eureka:
+  instance:
+    leaseRenewalIntervalInSeconds: 10
+    health-check-url-path: /actuator/health
+    status-page-url-path: /actuator/info
+    metadata-map:
+      user.name: ${spring.security.user.name}
+      user.password: ${spring.security.user.password}
+  client:
+    registryFetchIntervalSeconds: 5
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8510/eureka/
+server:
+  port: 8900
+  tomcat:
+    uri-encoding: UTF-8
+info:
+  name: '@project.artifactId@'
+  description: '@project.description@'
+  version: '@project.version@'
+  spring-boot-version: '@spring.boot.version@'
+  spring-cloud-version: '@spring.cloud.version@'
+mybatis:
+  type-aliases-package: com.usoftchina.saas.commons.po
+  mapper-locations: classpath:mapper/*.xml
+auth:
+  public-key: auth/pub.key

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

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.saas.sale.mapper.SaleListMapper">
+    <resultMap id="BaseResultMap" type="com.usoftchina.saas.sale.po.SaleList" >
+        <id column="sa_id" property="sa_id" jdbcType="INTEGER" />
+        <result column="sa_code" property="sa_code" jdbcType="VARCHAR" />
+        <result column="sa_custid" property="sa_custid" jdbcType="INTEGER" />
+        <result column="sa_custcode" property="sa_custcode" jdbcType="VARCHAR" />
+        <result column="sa_custname" property="sa_custname" jdbcType="VARCHAR" />
+        <result column="sa_toplace" property="sa_toplace" jdbcType="VARCHAR" />
+        <result column="sa_total" property="sa_total" jdbcType="DOUBLE" />
+        <result column="sa_totalupper" property="sa_totalupper" jdbcType="VARCHAR" />
+        <result column="sa_remark" property="sa_remark" jdbcType="VARCHAR" />
+        <result column="sa_status" property="sa_status" jdbcType="VARCHAR" />
+        <result column="sa_statuscode" property="sa_statuscode" jdbcType="VARCHAR" />
+        <result column="sa_sendstatuscode" property="sa_sendstatuscode" jdbcType="VARCHAR" />
+        <result column="sa_sendstatus" property="sa_sendstatus" jdbcType="VARCHAR" />
+        <result column="sa_printstatus" property="sa_printstatus" jdbcType="VARCHAR" />
+        <result column="sa_printstatuscode" property="sa_printstatuscode" jdbcType="VARCHAR" />
+        <result column="sa_recorderid" property="sa_recorderid" jdbcType="INTEGER" />
+        <result column="sa_recorder" property="sa_recorder" jdbcType="VARCHAR" />
+        <result column="sa_recorddate" property="sa_recorddate" jdbcType="TIMESTAMP" />
+        <result column="companyid" property="companyid" jdbcType="INTEGER" />
+        <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
+        <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+        <result column="sa_text1" property="sa_text1" jdbcType="VARCHAR" />
+        <result column="sa_text2" property="sa_text2" jdbcType="VARCHAR" />
+        <result column="sa_text3" property="sa_text3" jdbcType="VARCHAR" />
+        <result column="sa_text4" property="sa_text4" jdbcType="VARCHAR" />
+        <result column="sa_text5" property="sa_text5" jdbcType="VARCHAR" />
+        <result column="sd_id" property="sd_id" jdbcType="INTEGER" />
+        <result column="sd_said" property="sd_said" jdbcType="INTEGER" />
+        <result column="sd_detno" property="sd_detno" jdbcType="INTEGER" />
+        <result column="sd_prodid" property="sd_prodid" jdbcType="INTEGER" />
+        <result column="sd_prodcode" property="sd_prodcode" jdbcType="VARCHAR" />
+        <result column="sd_qty" property="sd_qty" jdbcType="DOUBLE" />
+        <result column="sd_price" property="sd_price" jdbcType="DOUBLE" />
+        <result column="sd_total" property="sd_total" jdbcType="DOUBLE" />
+        <result column="sd_taxrate" property="sd_taxrate" jdbcType="DOUBLE" />
+        <result column="sd_netprice" property="sd_netprice" jdbcType="DOUBLE" />
+        <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_pdqty" property="sd_pdqty" jdbcType="DOUBLE" />
+        <result column="sd_remark" property="sd_remark" jdbcType="VARCHAR" />
+        <result column="sd_text1" property="sd_text1" jdbcType="VARCHAR" />
+        <result column="sd_text2" property="sd_text2" jdbcType="VARCHAR" />
+        <result column="sd_text3" property="sd_text3" jdbcType="VARCHAR" />
+        <result column="sd_text4" property="sd_text4" jdbcType="VARCHAR" />
+        <result column="sd_text5" property="sd_text5" jdbcType="VARCHAR" />
+    </resultMap>
+
+    <select id="selectPurchaseListByCondition" parameterType="com.usoftchina.saas.commons.dto.ListReqDTO" resultMap="BaseResultMap">
+        select  *  from sale left join sale on pu_id=pd_puid
+        <where>
+            <if test="finalCon != null">
+                 ${finalCon}
+            </if>
+            order by sa_id,
+        </where>
+    </select>
+
+    <select id="selectPurchaseBycondition" parameterType="com.usoftchina.saas.commons.dto.ListReqDTO" resultMap="BaseResultMap">
+        select  *  from purchase
+        <where>
+            <if test="finalCon != null">
+                 ${finalCon}
+            </if>
+        </where>
+        order by sd_detno
+    </select>
+    <insert id="batchInsert" parameterType="java.util.List" >
+        insert into purchasedetail ( PD_PUID, PD_CODE,
+        PD_DETNO, PD_PRODID, PD_PRODCODE,
+        PD_UNIT, PD_QTY, PD_PRICE,
+        PD_TOTAL, PD_TAXTOTAL, PD_ACCEPTQTY,
+        PD_DELIVERY, PD_SALECODE, PD_SALEDETNO,
+        PD_SDID, companyId, updaterId,
+        updateTime, pd_text1, pd_text2,
+        pd_text3, pd_text4, pd_text5,
+        pd_yqty)
+        values
+        <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+            (
+            #{item.pdPuid,jdbcType=INTEGER}, #{item.pdCode,jdbcType=VARCHAR},
+            #{item.pdDetno,jdbcType=INTEGER}, #{item.pdProdid,jdbcType=INTEGER}, #{item.pdProdcode,jdbcType=VARCHAR},
+            #{item.pdUnit,jdbcType=VARCHAR}, #{item.pdQty,jdbcType=DOUBLE}, #{item.pdPrice,jdbcType=DOUBLE},
+            #{item.pdTotal,jdbcType=DOUBLE}, #{item.pdTaxtotal,jdbcType=DOUBLE}, #{item.pdAcceptqty,jdbcType=DOUBLE},
+            #{item.pdDelivery,jdbcType=DOUBLE}, #{item.pdSalecode,jdbcType=VARCHAR}, #{item.pdSaledetno,jdbcType=INTEGER},
+            #{item.pdSdid,jdbcType=INTEGER}, #{item.companyId,jdbcType=INTEGER}, #{item.updaterId,jdbcType=INTEGER},
+            #{item.updateTime,jdbcType=TIMESTAMP}, #{item.pdText1,jdbcType=VARCHAR}, #{item.pdText2,jdbcType=VARCHAR},
+            #{item.pdText3,jdbcType=VARCHAR}, #{item.pdText4,jdbcType=VARCHAR}, #{item.pdText5,jdbcType=VARCHAR},
+            #{item.pdYqty,jdbcType=DOUBLE}
+            )
+        </foreach>
+    </insert>
+    <update id="batchUpdate" parameterType="com.usoftchina.saas.purchase.po.PurchaseDetail" >
+        <foreach collection="list" item="item" index="index" open="" close="" separator=";">
+            update purchasedetail <set>
+            PD_PUID = #{item.pdPuid},
+            PD_CODE = #{item.pdCode},
+            PD_DETNO = #{item.pdDetno},
+            PD_PRODID = #{item.pdProdid},
+            PD_PRODCODE = #{item.pdProdcode},
+            PD_UNIT = #{item.pdUnit},
+            PD_QTY = #{item.pdQty},
+            PD_PRICE = #{item.pdPrice},
+            PD_TOTAL = #{item.pdTotal},
+            PD_TAXTOTAL = #{item.pdTaxtotal},
+            PD_ACCEPTQTY = #{item.pdAcceptqty},
+            PD_DELIVERY = #{item.pdDelivery},
+            PD_SALECODE = #{item.pdSalecode},
+            PD_SALEDETNO = #{item.pdSaledetno},
+            PD_SDID = #{item.pdSdid},
+            companyId = #{item.companyId},
+            updaterId = #{item.updaterId},
+            updateTime = #{item.updateTime},
+            pd_text1 = #{item.pdText1},
+            pd_text2 = #{item.pdText2},
+            pd_text3 = #{item.pdText3},
+            pd_text4 = #{item.pdText4},
+            pd_text5 = #{item.pdText5},
+            pd_yqty = #{item.pdYqty}
+        </set>
+            where PD_ID = #{item.id,jdbcType=INTEGER}
+        </foreach>
+    </update>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+        delete from purchasedetail
+        where PD_ID = #{id}
+    </delete>
+</mapper>

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

@@ -0,0 +1,543 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.saas.sale.mapper.SaleMapper" >
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.sale.po.Sale" >
+    <id column="sa_id" property="id" jdbcType="INTEGER" />
+    <result column="sa_code" property="sa_code" jdbcType="VARCHAR" />
+    <result column="sa_custid" property="sa_custid" jdbcType="INTEGER" />
+    <result column="sa_custcode" property="sa_custcode" jdbcType="VARCHAR" />
+    <result column="sa_custname" property="sa_custname" jdbcType="VARCHAR" />
+    <result column="sa_toplace" property="sa_toplace" jdbcType="VARCHAR" />
+    <result column="sa_total" property="sa_total" jdbcType="DOUBLE" />
+    <result column="sa_totalupper" property="sa_totalupper" jdbcType="VARCHAR" />
+    <result column="sa_remark" property="sa_remark" jdbcType="VARCHAR" />
+    <result column="sa_status" property="sa_status" jdbcType="VARCHAR" />
+    <result column="sa_statuscode" property="sa_statuscode" jdbcType="VARCHAR" />
+    <result column="sa_sendstatuscode" property="sa_sendstatuscode" jdbcType="VARCHAR" />
+    <result column="sa_sendstatus" property="sa_sendstatus" jdbcType="VARCHAR" />
+    <result column="sa_printstatus" property="sa_printstatus" jdbcType="VARCHAR" />
+    <result column="sa_printstatuscode" property="sa_printstatuscode" jdbcType="VARCHAR" />
+    <result column="sa_recorderid" property="sa_recorderid" jdbcType="INTEGER" />
+    <result column="sa_recorder" property="sa_recorder" jdbcType="VARCHAR" />
+    <result column="sa_recorddate" property="sa_recorddate" jdbcType="TIMESTAMP" />
+    <result column="companyid" property="companyid" jdbcType="INTEGER" />
+    <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="sa_text1" property="sa_text1" jdbcType="VARCHAR" />
+    <result column="sa_text2" property="sa_text2" jdbcType="VARCHAR" />
+    <result column="sa_text3" property="sa_text3" jdbcType="VARCHAR" />
+    <result column="sa_text4" property="sa_text4" jdbcType="VARCHAR" />
+    <result column="sa_text5" property="sa_text5" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Example_Where_Clause" >
+    <where >
+      <foreach collection="oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause" >
+    <where >
+      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List" >
+    sa_id, sa_code, sa_custid, sa_custcode, sa_custname, sa_toplace, sa_total, sa_totalupper, 
+    sa_remark, sa_status, sa_statuscode, sa_sendstatuscode, sa_sendstatus, sa_printstatus, 
+    sa_printstatuscode, sa_recorderid, sa_recorder, sa_recorddate, companyid, updaterId, 
+    updatetime, sa_text1, sa_text2, sa_text3, sa_text4, sa_text5
+  </sql>
+  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.usoftchina.saas.sale.po.SaleExample" >
+    select
+    <if test="distinct" >
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from sale
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null" >
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    select 
+    <include refid="Base_Column_List" />
+    from sale
+    where sa_id = #{id}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from sale
+    where sa_id = #{sa_id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.usoftchina.saas.sale.po.SaleExample" >
+    delete from sale
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.usoftchina.saas.sale.po.Sale" >
+    insert into sale (sa_id, sa_code, sa_custid, 
+      sa_custcode, sa_custname, sa_toplace, 
+      sa_total, sa_totalupper, sa_remark, 
+      sa_status, sa_statuscode, sa_sendstatuscode, 
+      sa_sendstatus, sa_printstatus, sa_printstatuscode, 
+      sa_recorderid, sa_recorder, sa_recorddate, 
+      companyid, updaterId, updatetime, 
+      sa_text1, sa_text2, sa_text3, 
+      sa_text4, sa_text5)
+    values (#{sa_id,jdbcType=INTEGER}, #{sa_code,jdbcType=VARCHAR}, #{sa_custid,jdbcType=INTEGER}, 
+      #{sa_custcode,jdbcType=VARCHAR}, #{sa_custname,jdbcType=VARCHAR}, #{sa_toplace,jdbcType=VARCHAR}, 
+      #{sa_total,jdbcType=DOUBLE}, #{sa_totalupper,jdbcType=VARCHAR}, #{sa_remark,jdbcType=VARCHAR}, 
+      #{sa_status,jdbcType=VARCHAR}, #{sa_statuscode,jdbcType=VARCHAR}, #{sa_sendstatuscode,jdbcType=VARCHAR}, 
+      #{sa_sendstatus,jdbcType=VARCHAR}, #{sa_printstatus,jdbcType=VARCHAR}, #{sa_printstatuscode,jdbcType=VARCHAR}, 
+      #{sa_recorderid,jdbcType=INTEGER}, #{sa_recorder,jdbcType=VARCHAR}, #{sa_recorddate,jdbcType=TIMESTAMP}, 
+      #{companyid,jdbcType=INTEGER}, #{updaterId,jdbcType=INTEGER}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{sa_text1,jdbcType=VARCHAR}, #{sa_text2,jdbcType=VARCHAR}, #{sa_text3,jdbcType=VARCHAR}, 
+      #{sa_text4,jdbcType=VARCHAR}, #{sa_text5,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.sale.po.Sale" >
+    insert into sale
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="sa_id != null" >
+        sa_id,
+      </if>
+      <if test="sa_code != null" >
+        sa_code,
+      </if>
+      <if test="sa_custid != null" >
+        sa_custid,
+      </if>
+      <if test="sa_custcode != null" >
+        sa_custcode,
+      </if>
+      <if test="sa_custname != null" >
+        sa_custname,
+      </if>
+      <if test="sa_toplace != null" >
+        sa_toplace,
+      </if>
+      <if test="sa_total != null" >
+        sa_total,
+      </if>
+      <if test="sa_totalupper != null" >
+        sa_totalupper,
+      </if>
+      <if test="sa_remark != null" >
+        sa_remark,
+      </if>
+      <if test="sa_status != null" >
+        sa_status,
+      </if>
+      <if test="sa_statuscode != null" >
+        sa_statuscode,
+      </if>
+      <if test="sa_sendstatuscode != null" >
+        sa_sendstatuscode,
+      </if>
+      <if test="sa_sendstatus != null" >
+        sa_sendstatus,
+      </if>
+      <if test="sa_printstatus != null" >
+        sa_printstatus,
+      </if>
+      <if test="sa_printstatuscode != null" >
+        sa_printstatuscode,
+      </if>
+      <if test="sa_recorderid != null" >
+        sa_recorderid,
+      </if>
+      <if test="sa_recorder != null" >
+        sa_recorder,
+      </if>
+      <if test="sa_recorddate != null" >
+        sa_recorddate,
+      </if>
+      <if test="companyid != null" >
+        companyid,
+      </if>
+      <if test="updaterId != null" >
+        updaterId,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="sa_text1 != null" >
+        sa_text1,
+      </if>
+      <if test="sa_text2 != null" >
+        sa_text2,
+      </if>
+      <if test="sa_text3 != null" >
+        sa_text3,
+      </if>
+      <if test="sa_text4 != null" >
+        sa_text4,
+      </if>
+      <if test="sa_text5 != null" >
+        sa_text5,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="sa_id != null" >
+        #{sa_id,jdbcType=INTEGER},
+      </if>
+      <if test="sa_code != null" >
+        #{sa_code,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_custid != null" >
+        #{sa_custid,jdbcType=INTEGER},
+      </if>
+      <if test="sa_custcode != null" >
+        #{sa_custcode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_custname != null" >
+        #{sa_custname,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_toplace != null" >
+        #{sa_toplace,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_total != null" >
+        #{sa_total,jdbcType=DOUBLE},
+      </if>
+      <if test="sa_totalupper != null" >
+        #{sa_totalupper,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_remark != null" >
+        #{sa_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_status != null" >
+        #{sa_status,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_statuscode != null" >
+        #{sa_statuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_sendstatuscode != null" >
+        #{sa_sendstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_sendstatus != null" >
+        #{sa_sendstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_printstatus != null" >
+        #{sa_printstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_printstatuscode != null" >
+        #{sa_printstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_recorderid != null" >
+        #{sa_recorderid,jdbcType=INTEGER},
+      </if>
+      <if test="sa_recorder != null" >
+        #{sa_recorder,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_recorddate != null" >
+        #{sa_recorddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="companyid != null" >
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null" >
+        #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="sa_text1 != null" >
+        #{sa_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text2 != null" >
+        #{sa_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text3 != null" >
+        #{sa_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text4 != null" >
+        #{sa_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text5 != null" >
+        #{sa_text5,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.usoftchina.saas.sale.po.SaleExample" resultType="java.lang.Integer" >
+    select count(*) from sale
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map" >
+    update sale
+    <set >
+      <if test="record.sa_id != null" >
+        sa_id = #{record.sa_id,jdbcType=INTEGER},
+      </if>
+      <if test="record.sa_code != null" >
+        sa_code = #{record.sa_code,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_custid != null" >
+        sa_custid = #{record.sa_custid,jdbcType=INTEGER},
+      </if>
+      <if test="record.sa_custcode != null" >
+        sa_custcode = #{record.sa_custcode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_custname != null" >
+        sa_custname = #{record.sa_custname,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_toplace != null" >
+        sa_toplace = #{record.sa_toplace,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_total != null" >
+        sa_total = #{record.sa_total,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sa_totalupper != null" >
+        sa_totalupper = #{record.sa_totalupper,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_remark != null" >
+        sa_remark = #{record.sa_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_status != null" >
+        sa_status = #{record.sa_status,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_statuscode != null" >
+        sa_statuscode = #{record.sa_statuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_sendstatuscode != null" >
+        sa_sendstatuscode = #{record.sa_sendstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_sendstatus != null" >
+        sa_sendstatus = #{record.sa_sendstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_printstatus != null" >
+        sa_printstatus = #{record.sa_printstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_printstatuscode != null" >
+        sa_printstatuscode = #{record.sa_printstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_recorderid != null" >
+        sa_recorderid = #{record.sa_recorderid,jdbcType=INTEGER},
+      </if>
+      <if test="record.sa_recorder != null" >
+        sa_recorder = #{record.sa_recorder,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_recorddate != null" >
+        sa_recorddate = #{record.sa_recorddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.companyid != null" >
+        companyid = #{record.companyid,jdbcType=INTEGER},
+      </if>
+      <if test="record.updaterId != null" >
+        updaterId = #{record.updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="record.updatetime != null" >
+        updatetime = #{record.updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.sa_text1 != null" >
+        sa_text1 = #{record.sa_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_text2 != null" >
+        sa_text2 = #{record.sa_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_text3 != null" >
+        sa_text3 = #{record.sa_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_text4 != null" >
+        sa_text4 = #{record.sa_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sa_text5 != null" >
+        sa_text5 = #{record.sa_text5,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map" >
+    update sale
+    set sa_id = #{record.sa_id,jdbcType=INTEGER},
+      sa_code = #{record.sa_code,jdbcType=VARCHAR},
+      sa_custid = #{record.sa_custid,jdbcType=INTEGER},
+      sa_custcode = #{record.sa_custcode,jdbcType=VARCHAR},
+      sa_custname = #{record.sa_custname,jdbcType=VARCHAR},
+      sa_toplace = #{record.sa_toplace,jdbcType=VARCHAR},
+      sa_total = #{record.sa_total,jdbcType=DOUBLE},
+      sa_totalupper = #{record.sa_totalupper,jdbcType=VARCHAR},
+      sa_remark = #{record.sa_remark,jdbcType=VARCHAR},
+      sa_status = #{record.sa_status,jdbcType=VARCHAR},
+      sa_statuscode = #{record.sa_statuscode,jdbcType=VARCHAR},
+      sa_sendstatuscode = #{record.sa_sendstatuscode,jdbcType=VARCHAR},
+      sa_sendstatus = #{record.sa_sendstatus,jdbcType=VARCHAR},
+      sa_printstatus = #{record.sa_printstatus,jdbcType=VARCHAR},
+      sa_printstatuscode = #{record.sa_printstatuscode,jdbcType=VARCHAR},
+      sa_recorderid = #{record.sa_recorderid,jdbcType=INTEGER},
+      sa_recorder = #{record.sa_recorder,jdbcType=VARCHAR},
+      sa_recorddate = #{record.sa_recorddate,jdbcType=TIMESTAMP},
+      companyid = #{record.companyid,jdbcType=INTEGER},
+      updaterId = #{record.updaterId,jdbcType=INTEGER},
+      updatetime = #{record.updatetime,jdbcType=TIMESTAMP},
+      sa_text1 = #{record.sa_text1,jdbcType=VARCHAR},
+      sa_text2 = #{record.sa_text2,jdbcType=VARCHAR},
+      sa_text3 = #{record.sa_text3,jdbcType=VARCHAR},
+      sa_text4 = #{record.sa_text4,jdbcType=VARCHAR},
+      sa_text5 = #{record.sa_text5,jdbcType=VARCHAR}
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.sale.po.Sale" >
+    update sale
+    <set >
+      <if test="sa_code != null" >
+        sa_code = #{sa_code,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_custid != null" >
+        sa_custid = #{sa_custid,jdbcType=INTEGER},
+      </if>
+      <if test="sa_custcode != null" >
+        sa_custcode = #{sa_custcode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_custname != null" >
+        sa_custname = #{sa_custname,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_toplace != null" >
+        sa_toplace = #{sa_toplace,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_total != null" >
+        sa_total = #{sa_total,jdbcType=DOUBLE},
+      </if>
+      <if test="sa_totalupper != null" >
+        sa_totalupper = #{sa_totalupper,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_remark != null" >
+        sa_remark = #{sa_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_status != null" >
+        sa_status = #{sa_status,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_statuscode != null" >
+        sa_statuscode = #{sa_statuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_sendstatuscode != null" >
+        sa_sendstatuscode = #{sa_sendstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_sendstatus != null" >
+        sa_sendstatus = #{sa_sendstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_printstatus != null" >
+        sa_printstatus = #{sa_printstatus,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_printstatuscode != null" >
+        sa_printstatuscode = #{sa_printstatuscode,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_recorderid != null" >
+        sa_recorderid = #{sa_recorderid,jdbcType=INTEGER},
+      </if>
+      <if test="sa_recorder != null" >
+        sa_recorder = #{sa_recorder,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_recorddate != null" >
+        sa_recorddate = #{sa_recorddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="companyid != null" >
+        companyid = #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null" >
+        updaterId = #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="sa_text1 != null" >
+        sa_text1 = #{sa_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text2 != null" >
+        sa_text2 = #{sa_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text3 != null" >
+        sa_text3 = #{sa_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text4 != null" >
+        sa_text4 = #{sa_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="sa_text5 != null" >
+        sa_text5 = #{sa_text5,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where sa_id = #{sa_id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.sale.po.Sale" >
+    update sale
+    set sa_code = #{sa_code,jdbcType=VARCHAR},
+      sa_custid = #{sa_custid,jdbcType=INTEGER},
+      sa_custcode = #{sa_custcode,jdbcType=VARCHAR},
+      sa_custname = #{sa_custname,jdbcType=VARCHAR},
+      sa_toplace = #{sa_toplace,jdbcType=VARCHAR},
+      sa_total = #{sa_total,jdbcType=DOUBLE},
+      sa_totalupper = #{sa_totalupper,jdbcType=VARCHAR},
+      sa_remark = #{sa_remark,jdbcType=VARCHAR},
+      sa_status = #{sa_status,jdbcType=VARCHAR},
+      sa_statuscode = #{sa_statuscode,jdbcType=VARCHAR},
+      sa_sendstatuscode = #{sa_sendstatuscode,jdbcType=VARCHAR},
+      sa_sendstatus = #{sa_sendstatus,jdbcType=VARCHAR},
+      sa_printstatus = #{sa_printstatus,jdbcType=VARCHAR},
+      sa_printstatuscode = #{sa_printstatuscode,jdbcType=VARCHAR},
+      sa_recorderid = #{sa_recorderid,jdbcType=INTEGER},
+      sa_recorder = #{sa_recorder,jdbcType=VARCHAR},
+      sa_recorddate = #{sa_recorddate,jdbcType=TIMESTAMP},
+      companyid = #{companyid,jdbcType=INTEGER},
+      updaterId = #{updaterId,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      sa_text1 = #{sa_text1,jdbcType=VARCHAR},
+      sa_text2 = #{sa_text2,jdbcType=VARCHAR},
+      sa_text3 = #{sa_text3,jdbcType=VARCHAR},
+      sa_text4 = #{sa_text4,jdbcType=VARCHAR},
+      sa_text5 = #{sa_text5,jdbcType=VARCHAR}
+    where sa_id = #{sa_id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 495 - 0
applications/sale/sale-server/src/main/resources/mapper/SaledetailMapper.xml

@@ -0,0 +1,495 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.saas.sale.mapper.SaledetailMapper" >
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.sale.po.Saledetail" >
+    <id column="sd_id" property="sd_id" jdbcType="INTEGER" />
+    <result column="sd_said" property="sd_said" jdbcType="INTEGER" />
+    <result column="sd_detno" property="sd_detno" jdbcType="INTEGER" />
+    <result column="sd_prodid" property="sd_prodid" jdbcType="INTEGER" />
+    <result column="sd_prodcode" property="sd_prodcode" jdbcType="VARCHAR" />
+    <result column="sd_qty" property="sd_qty" jdbcType="DOUBLE" />
+    <result column="sd_price" property="sd_price" jdbcType="DOUBLE" />
+    <result column="sd_total" property="sd_total" jdbcType="DOUBLE" />
+    <result column="sd_taxrate" property="sd_taxrate" jdbcType="DOUBLE" />
+    <result column="sd_netprice" property="sd_netprice" jdbcType="DOUBLE" />
+    <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_pdqty" property="sd_pdqty" jdbcType="DOUBLE" />
+    <result column="sd_remark" property="sd_remark" jdbcType="VARCHAR" />
+    <result column="companyid" property="companyid" jdbcType="INTEGER" />
+    <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="sd_text1" property="sd_text1" jdbcType="VARCHAR" />
+    <result column="sd_text2" property="sd_text2" jdbcType="VARCHAR" />
+    <result column="sd_text3" property="sd_text3" jdbcType="VARCHAR" />
+    <result column="sd_text4" property="sd_text4" jdbcType="VARCHAR" />
+    <result column="sd_text5" property="sd_text5" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Example_Where_Clause" >
+    <where >
+      <foreach collection="oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause" >
+    <where >
+      <foreach collection="example.oredCriteria" item="criteria" separator="or" >
+        <if test="criteria.valid" >
+          <trim prefix="(" suffix=")" prefixOverrides="and" >
+            <foreach collection="criteria.criteria" item="criterion" >
+              <choose >
+                <when test="criterion.noValue" >
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue" >
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue" >
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue" >
+                  and ${criterion.condition}
+                  <foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List" >
+    sd_id, sd_said, sd_detno, sd_prodid, sd_prodcode, sd_qty, sd_price, sd_total, sd_taxrate, 
+    sd_netprice, sd_nettotal, sd_delivery, sd_sendqty, sd_pdqty, sd_remark, companyid, 
+    updaterId, updatetime, sd_text1, sd_text2, sd_text3, sd_text4, sd_text5
+  </sql>
+  <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.usoftchina.saas.sale.po.SaledetailExample" >
+    select
+    <if test="distinct" >
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from saledetail
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null" >
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
+    select 
+    <include refid="Base_Column_List" />
+    from saledetail
+    where sd_id = #{sd_id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
+    delete from saledetail
+    where sd_id = #{sd_id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.usoftchina.saas.sale.po.SaledetailExample" >
+    delete from saledetail
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.usoftchina.saas.sale.po.Saledetail" >
+    insert into saledetail (sd_id, sd_said, sd_detno, 
+      sd_prodid, sd_prodcode, sd_qty, 
+      sd_price, sd_total, sd_taxrate, 
+      sd_netprice, sd_nettotal, sd_delivery, 
+      sd_sendqty, sd_pdqty, sd_remark, 
+      companyid, updaterId, updatetime, 
+      sd_text1, sd_text2, sd_text3, 
+      sd_text4, sd_text5)
+    values (#{sd_id,jdbcType=INTEGER}, #{sd_said,jdbcType=INTEGER}, #{sd_detno,jdbcType=INTEGER}, 
+      #{sd_prodid,jdbcType=INTEGER}, #{sd_prodcode,jdbcType=VARCHAR}, #{sd_qty,jdbcType=DOUBLE}, 
+      #{sd_price,jdbcType=DOUBLE}, #{sd_total,jdbcType=DOUBLE}, #{sd_taxrate,jdbcType=DOUBLE}, 
+      #{sd_netprice,jdbcType=DOUBLE}, #{sd_nettotal,jdbcType=DOUBLE}, #{sd_delivery,jdbcType=TIMESTAMP}, 
+      #{sd_sendqty,jdbcType=DOUBLE}, #{sd_pdqty,jdbcType=DOUBLE}, #{sd_remark,jdbcType=VARCHAR}, 
+      #{companyid,jdbcType=INTEGER}, #{updaterId,jdbcType=INTEGER}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{sd_text1,jdbcType=VARCHAR}, #{sd_text2,jdbcType=VARCHAR}, #{sd_text3,jdbcType=VARCHAR}, 
+      #{sd_text4,jdbcType=VARCHAR}, #{sd_text5,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.sale.po.Saledetail" >
+    insert into saledetail
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="sd_id != null" >
+        sd_id,
+      </if>
+      <if test="sd_said != null" >
+        sd_said,
+      </if>
+      <if test="sd_detno != null" >
+        sd_detno,
+      </if>
+      <if test="sd_prodid != null" >
+        sd_prodid,
+      </if>
+      <if test="sd_prodcode != null" >
+        sd_prodcode,
+      </if>
+      <if test="sd_qty != null" >
+        sd_qty,
+      </if>
+      <if test="sd_price != null" >
+        sd_price,
+      </if>
+      <if test="sd_total != null" >
+        sd_total,
+      </if>
+      <if test="sd_taxrate != null" >
+        sd_taxrate,
+      </if>
+      <if test="sd_netprice != null" >
+        sd_netprice,
+      </if>
+      <if test="sd_nettotal != null" >
+        sd_nettotal,
+      </if>
+      <if test="sd_delivery != null" >
+        sd_delivery,
+      </if>
+      <if test="sd_sendqty != null" >
+        sd_sendqty,
+      </if>
+      <if test="sd_pdqty != null" >
+        sd_pdqty,
+      </if>
+      <if test="sd_remark != null" >
+        sd_remark,
+      </if>
+      <if test="companyid != null" >
+        companyid,
+      </if>
+      <if test="updaterId != null" >
+        updaterId,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="sd_text1 != null" >
+        sd_text1,
+      </if>
+      <if test="sd_text2 != null" >
+        sd_text2,
+      </if>
+      <if test="sd_text3 != null" >
+        sd_text3,
+      </if>
+      <if test="sd_text4 != null" >
+        sd_text4,
+      </if>
+      <if test="sd_text5 != null" >
+        sd_text5,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="sd_id != null" >
+        #{sd_id,jdbcType=INTEGER},
+      </if>
+      <if test="sd_said != null" >
+        #{sd_said,jdbcType=INTEGER},
+      </if>
+      <if test="sd_detno != null" >
+        #{sd_detno,jdbcType=INTEGER},
+      </if>
+      <if test="sd_prodid != null" >
+        #{sd_prodid,jdbcType=INTEGER},
+      </if>
+      <if test="sd_prodcode != null" >
+        #{sd_prodcode,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_qty != null" >
+        #{sd_qty,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_price != null" >
+        #{sd_price,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_total != null" >
+        #{sd_total,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_taxrate != null" >
+        #{sd_taxrate,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_netprice != null" >
+        #{sd_netprice,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_nettotal != null" >
+        #{sd_nettotal,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_delivery != null" >
+        #{sd_delivery,jdbcType=TIMESTAMP},
+      </if>
+      <if test="sd_sendqty != null" >
+        #{sd_sendqty,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_pdqty != null" >
+        #{sd_pdqty,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_remark != null" >
+        #{sd_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null" >
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null" >
+        #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="sd_text1 != null" >
+        #{sd_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text2 != null" >
+        #{sd_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text3 != null" >
+        #{sd_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text4 != null" >
+        #{sd_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text5 != null" >
+        #{sd_text5,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.usoftchina.saas.sale.po.SaledetailExample" resultType="java.lang.Integer" >
+    select count(*) from saledetail
+    <if test="_parameter != null" >
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map" >
+    update saledetail
+    <set >
+      <if test="record.sd_id != null" >
+        sd_id = #{record.sd_id,jdbcType=INTEGER},
+      </if>
+      <if test="record.sd_said != null" >
+        sd_said = #{record.sd_said,jdbcType=INTEGER},
+      </if>
+      <if test="record.sd_detno != null" >
+        sd_detno = #{record.sd_detno,jdbcType=INTEGER},
+      </if>
+      <if test="record.sd_prodid != null" >
+        sd_prodid = #{record.sd_prodid,jdbcType=INTEGER},
+      </if>
+      <if test="record.sd_prodcode != null" >
+        sd_prodcode = #{record.sd_prodcode,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sd_qty != null" >
+        sd_qty = #{record.sd_qty,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_price != null" >
+        sd_price = #{record.sd_price,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_total != null" >
+        sd_total = #{record.sd_total,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_taxrate != null" >
+        sd_taxrate = #{record.sd_taxrate,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_netprice != null" >
+        sd_netprice = #{record.sd_netprice,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_nettotal != null" >
+        sd_nettotal = #{record.sd_nettotal,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_delivery != null" >
+        sd_delivery = #{record.sd_delivery,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.sd_sendqty != null" >
+        sd_sendqty = #{record.sd_sendqty,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_pdqty != null" >
+        sd_pdqty = #{record.sd_pdqty,jdbcType=DOUBLE},
+      </if>
+      <if test="record.sd_remark != null" >
+        sd_remark = #{record.sd_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="record.companyid != null" >
+        companyid = #{record.companyid,jdbcType=INTEGER},
+      </if>
+      <if test="record.updaterId != null" >
+        updaterId = #{record.updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="record.updatetime != null" >
+        updatetime = #{record.updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.sd_text1 != null" >
+        sd_text1 = #{record.sd_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sd_text2 != null" >
+        sd_text2 = #{record.sd_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sd_text3 != null" >
+        sd_text3 = #{record.sd_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sd_text4 != null" >
+        sd_text4 = #{record.sd_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sd_text5 != null" >
+        sd_text5 = #{record.sd_text5,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map" >
+    update saledetail
+    set sd_id = #{record.sd_id,jdbcType=INTEGER},
+      sd_said = #{record.sd_said,jdbcType=INTEGER},
+      sd_detno = #{record.sd_detno,jdbcType=INTEGER},
+      sd_prodid = #{record.sd_prodid,jdbcType=INTEGER},
+      sd_prodcode = #{record.sd_prodcode,jdbcType=VARCHAR},
+      sd_qty = #{record.sd_qty,jdbcType=DOUBLE},
+      sd_price = #{record.sd_price,jdbcType=DOUBLE},
+      sd_total = #{record.sd_total,jdbcType=DOUBLE},
+      sd_taxrate = #{record.sd_taxrate,jdbcType=DOUBLE},
+      sd_netprice = #{record.sd_netprice,jdbcType=DOUBLE},
+      sd_nettotal = #{record.sd_nettotal,jdbcType=DOUBLE},
+      sd_delivery = #{record.sd_delivery,jdbcType=TIMESTAMP},
+      sd_sendqty = #{record.sd_sendqty,jdbcType=DOUBLE},
+      sd_pdqty = #{record.sd_pdqty,jdbcType=DOUBLE},
+      sd_remark = #{record.sd_remark,jdbcType=VARCHAR},
+      companyid = #{record.companyid,jdbcType=INTEGER},
+      updaterId = #{record.updaterId,jdbcType=INTEGER},
+      updatetime = #{record.updatetime,jdbcType=TIMESTAMP},
+      sd_text1 = #{record.sd_text1,jdbcType=VARCHAR},
+      sd_text2 = #{record.sd_text2,jdbcType=VARCHAR},
+      sd_text3 = #{record.sd_text3,jdbcType=VARCHAR},
+      sd_text4 = #{record.sd_text4,jdbcType=VARCHAR},
+      sd_text5 = #{record.sd_text5,jdbcType=VARCHAR}
+    <if test="_parameter != null" >
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.sale.po.Saledetail" >
+    update saledetail
+    <set >
+      <if test="sd_said != null" >
+        sd_said = #{sd_said,jdbcType=INTEGER},
+      </if>
+      <if test="sd_detno != null" >
+        sd_detno = #{sd_detno,jdbcType=INTEGER},
+      </if>
+      <if test="sd_prodid != null" >
+        sd_prodid = #{sd_prodid,jdbcType=INTEGER},
+      </if>
+      <if test="sd_prodcode != null" >
+        sd_prodcode = #{sd_prodcode,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_qty != null" >
+        sd_qty = #{sd_qty,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_price != null" >
+        sd_price = #{sd_price,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_total != null" >
+        sd_total = #{sd_total,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_taxrate != null" >
+        sd_taxrate = #{sd_taxrate,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_netprice != null" >
+        sd_netprice = #{sd_netprice,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_nettotal != null" >
+        sd_nettotal = #{sd_nettotal,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_delivery != null" >
+        sd_delivery = #{sd_delivery,jdbcType=TIMESTAMP},
+      </if>
+      <if test="sd_sendqty != null" >
+        sd_sendqty = #{sd_sendqty,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_pdqty != null" >
+        sd_pdqty = #{sd_pdqty,jdbcType=DOUBLE},
+      </if>
+      <if test="sd_remark != null" >
+        sd_remark = #{sd_remark,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null" >
+        companyid = #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="updaterId != null" >
+        updaterId = #{updaterId,jdbcType=INTEGER},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="sd_text1 != null" >
+        sd_text1 = #{sd_text1,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text2 != null" >
+        sd_text2 = #{sd_text2,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text3 != null" >
+        sd_text3 = #{sd_text3,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text4 != null" >
+        sd_text4 = #{sd_text4,jdbcType=VARCHAR},
+      </if>
+      <if test="sd_text5 != null" >
+        sd_text5 = #{sd_text5,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where sd_id = #{sd_id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.sale.po.Saledetail" >
+    update saledetail
+    set sd_said = #{sd_said,jdbcType=INTEGER},
+      sd_detno = #{sd_detno,jdbcType=INTEGER},
+      sd_prodid = #{sd_prodid,jdbcType=INTEGER},
+      sd_prodcode = #{sd_prodcode,jdbcType=VARCHAR},
+      sd_qty = #{sd_qty,jdbcType=DOUBLE},
+      sd_price = #{sd_price,jdbcType=DOUBLE},
+      sd_total = #{sd_total,jdbcType=DOUBLE},
+      sd_taxrate = #{sd_taxrate,jdbcType=DOUBLE},
+      sd_netprice = #{sd_netprice,jdbcType=DOUBLE},
+      sd_nettotal = #{sd_nettotal,jdbcType=DOUBLE},
+      sd_delivery = #{sd_delivery,jdbcType=TIMESTAMP},
+      sd_sendqty = #{sd_sendqty,jdbcType=DOUBLE},
+      sd_pdqty = #{sd_pdqty,jdbcType=DOUBLE},
+      sd_remark = #{sd_remark,jdbcType=VARCHAR},
+      companyid = #{companyid,jdbcType=INTEGER},
+      updaterId = #{updaterId,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      sd_text1 = #{sd_text1,jdbcType=VARCHAR},
+      sd_text2 = #{sd_text2,jdbcType=VARCHAR},
+      sd_text3 = #{sd_text3,jdbcType=VARCHAR},
+      sd_text4 = #{sd_text4,jdbcType=VARCHAR},
+      sd_text5 = #{sd_text5,jdbcType=VARCHAR}
+    where sd_id = #{sd_id,jdbcType=INTEGER}
+  </update>
+</mapper>

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

@@ -60,6 +60,10 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>commons-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>document-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>storage-dto</artifactId>

+ 33 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/ProdIODetailMapper.java

@@ -0,0 +1,33 @@
+package com.usoftchina.saas.storage.mapper;
+
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import com.usoftchina.saas.storage.entities.ProdIODetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface ProdIODetailMapper extends CommonBaseMapper<ProdIODetail> {
+
+    int deleteByPrimaryKey(Long pd_id);
+
+    int insert(ProdIODetail record);
+
+    int insertSelective(ProdIODetail record);
+
+    ProdIODetail selectByPrimaryKey(Long pd_id);
+
+    int updateByPrimaryKeySelective(ProdIODetail record);
+
+    int updateByPrimaryKeyWithBLOBs(ProdIODetail record);
+
+    int updateByPrimaryKey(ProdIODetail record);
+
+    void batchInsert(List<ProdIODetail> list);
+
+    void batchUpdate(List<ProdIODetail> list);
+
+    void updatePurchaseYqty(Integer id);
+
+    List<ProdIODetail> selectByFK(Long id);
+}

+ 20 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/ProdInOutListMapper.java

@@ -0,0 +1,20 @@
+package com.usoftchina.saas.storage.mapper;
+
+
+import com.usoftchina.saas.storage.dto.ProdInOutReqDTO;
+import com.usoftchina.saas.storage.entities.ProdInOutList;
+
+import java.util.List;
+
+/**
+ * Created by zdw
+ * 2018-10-18 16:57.
+ */
+public interface ProdInOutListMapper {
+
+    List<ProdInOutList> selectProdInOutListByCondition(ProdInOutReqDTO reqDTO);
+
+    List<ProdInOutList> selectProdInOutBycondition(ProdInOutReqDTO reqDTO);
+
+
+}

+ 53 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/ProdInOutService.java

@@ -1,9 +1,62 @@
 package com.usoftchina.saas.storage.service;
 
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.service.CommonBaseService;
+import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
+import com.usoftchina.saas.commons.dto.DocSavedDTO;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.storage.dto.ProdInOutFormDTO;
+import com.usoftchina.saas.storage.dto.ProdInOutReqDTO;
 import com.usoftchina.saas.storage.entities.ProdInOut;
+import com.usoftchina.saas.storage.entities.ProdInOutList;
 import com.usoftchina.saas.storage.mapper.ProdInOutMapper;
 
 public interface ProdInOutService extends CommonBaseService<ProdInOutMapper, ProdInOut> {
 
+    /**
+     * 获取出入单表单
+     *
+     * @param id
+     * @return
+     */
+    ProdInOutFormDTO getFormData(Long id);
+
+    /**
+     * 保存出入库单
+     *
+     * @param formdata
+     * @return
+     */
+    DocSavedDTO saveFormData(ProdInOutFormDTO formdata, Boolean isbfaudit);
+
+    /**
+     * 删除出入库单
+     * @param id
+     */
+    void delete(Long id);
+
+    /**
+     * 审核出入库单
+     * @param formData
+     * @return
+     */
+    DocSavedDTO audit(ProdInOutFormDTO formData);
+
+    /**
+     * 反审核出入库单
+     * @param id
+     */
+    void unAudit(Long id);
+
+    void batchAudit(BatchDealBaseDTO baseDTOs);
+
+    void deleteItem(Long id);
+
+    void batchDelete(BatchDealBaseDTO baseDTOs);
+
+    PageInfo<ProdInOutList> getListData(PageRequest page, ProdInOutReqDTO req);
+
+    Result turnProdOut(Long id);
+
 }

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

@@ -1,12 +1,335 @@
 package com.usoftchina.saas.storage.service.impl;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.api.MaxnumberService;
+import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
+import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.dto.DocSavedDTO;
+import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.api.WarehouseApi;
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.exception.ExceptionCode;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.storage.dto.ProdIODetailDTO;
+import com.usoftchina.saas.storage.dto.ProdInOutDTO;
+import com.usoftchina.saas.storage.dto.ProdInOutFormDTO;
+import com.usoftchina.saas.storage.dto.ProdInOutReqDTO;
+import com.usoftchina.saas.storage.entities.ProdIODetail;
 import com.usoftchina.saas.storage.entities.ProdInOut;
+import com.usoftchina.saas.storage.entities.ProdInOutList;
+import com.usoftchina.saas.storage.mapper.ProdIODetailMapper;
+import com.usoftchina.saas.storage.mapper.ProdInOutListMapper;
 import com.usoftchina.saas.storage.mapper.ProdInOutMapper;
 import com.usoftchina.saas.storage.service.ProdInOutService;
+import com.usoftchina.saas.utils.BeanMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
 
 public class ProdInoutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper, ProdInOut> implements ProdInOutService {
 
+    @Autowired
+    private ProdIODetailMapper prodIODetailMapper;
+    @Autowired
+    private ProdInOutListMapper prodInOutListMapper;
+    @Autowired
+    private WarehouseApi warehouseApi;
+
+    @Autowired
+    private MaxnumberService maxnumberService;
+
+
+
+    @Override
+    public PageInfo<ProdInOutList> getListData(PageRequest page, ProdInOutReqDTO 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<ProdInOutList> lists = getListByMode(req);
+        //取分页信息
+        PageInfo<ProdInOutList> pageInfo = new PageInfo<ProdInOutList>(lists);
+        return pageInfo;
+    }
+
+    private List<ProdInOutList> getListByMode(ProdInOutReqDTO req) {
+        List<ProdInOutList> list = null;
+        if (null == req || StringUtils.isEmpty(req.getMode()) || "Main".equals(req.getMode())) {
+            list = prodInOutListMapper.selectProdInOutListByCondition(req);
+        } else {
+            list = prodInOutListMapper.selectProdInOutBycondition(req);
+        }
+        return list;
+    }
+
+
+    @Override
+    public ProdInOutFormDTO getFormData(Long id) {
+        ProdInOutFormDTO prodInOutFormDTO = new ProdInOutFormDTO();
+        //查询主表
+        ProdInOut prodInOut = getMapper().selectByPrimaryKey(id);
+        //将prodInOut实体对象转化为传输对象
+        ProdInOutDTO main = BeanMapper.map(prodInOut,ProdInOutDTO.class);
+        //查询从表
+
+        List<ProdIODetail> prodIODetails =prodIODetailMapper.selectByFK(id);
+        List<ProdIODetailDTO> items = BeanMapper.mapList(prodIODetails,ProdIODetailDTO.class);
+        prodInOutFormDTO.setMain(main);
+        prodInOutFormDTO.setItems(items);
+        return prodInOutFormDTO;
+    }
+
+    @Override
+    public DocSavedDTO saveFormData(ProdInOutFormDTO formdata, Boolean isbfaudit) {
+        if (null == formdata || null == formdata.getMain()){
+            throw new BizException(500, "数据为空,请填写后再保存");
+        }
+        //公司ID
+        Long companyId = BaseContextHolder.getCompanyId();
+        //人员Id
+        Long userId = BaseContextHolder.getUserId();
+        //获取主表信息
+        ProdInOutDTO main = formdata.getMain();
+        List<ProdIODetailDTO> items = formdata.getItems();
+        //插入从表数据
+        List<ProdIODetail> insertDetails = new ArrayList<>();
+        //更新从表数据
+        List<ProdIODetail> updateDetails = new ArrayList<>();
+        DocSavedDTO saveDTO = new DocSavedDTO();
+        Long pi_id = main.getId();
+        String pi_inoutno = main.getPi_inoutno();
+        ProdInOut prodInOut = BeanMapper.map(main,ProdInOut.class);
+        prodInOut.setCompanyId(companyId);
+        prodInOut.setCreatorId(userId);
+        prodInOut.setCreateTime(new Date());
+        prodInOut.setPi_date(new Date());
+        prodInOut.setPi_puid(main.getPi_puid());
+        prodInOut.setPi_pucode(main.getPi_pucode());
+        //编号获取
+        //pi_inoutno = pushMaxnubmer(pi_inoutno, pi_id);
+        prodInOut.setPi_inoutno(pi_inoutno);
+        saveDTO.setCode(pi_inoutno);
+        //判断更新与保存动作
+        if (StringUtils.isEmpty(pi_id) || "0".equals(pi_id.toString())){
+            //插入操作
+            getMapper().insertSelective(prodInOut);
+            pi_id = prodInOut.getId();
+            //添加从表传输对象
+            for (ProdIODetailDTO item : items) {
+                ProdIODetail detail = BeanMapper.map(item,ProdIODetail.class);
+                detail.setPd_piid(pi_id);
+                detail.setPd_inoutno(pi_inoutno);
+                detail.setPd_piclass(prodInOut.getPi_class());
+                detail.setPd_yqty(0);
+                insertDetails.add(detail);
+            }
+            //插入从表
+            if (insertDetails.size()>0) {
+                prodIODetailMapper.batchInsert(insertDetails);
+            }
+            saveDTO.setId(pi_id);
+            return saveDTO;
+        }
+        //更新操作
+        getMapper().updateByPrimaryKeySelective(prodInOut);
+        //添加从表传输对象
+        for (ProdIODetailDTO item : items) {
+            ProdIODetail detail = BeanMapper.map(item, ProdIODetail.class);
+            detail.setPd_piid(pi_id);
+            detail.setPd_inoutno(pi_inoutno);
+            detail.setPd_piclass(prodInOut.getPi_class());
+            if (StringUtils.isEmpty(detail.getId()) || "0".equals(detail.getId().toString())) {
+                insertDetails.add(detail);
+            } else {
+                updateDetails.add(detail);
+            }
+        }
+        //插入从表
+        if (insertDetails.size()>0) {
+            prodIODetailMapper.batchInsert(insertDetails);
+        }
+        //更新从表
+        if (updateDetails.size()>0) {
+            prodIODetailMapper.batchUpdate(updateDetails);
+        }
+        saveDTO.setId(pi_id);
+        //更新已转数
+        if (!isbfaudit)
+            updateYqty(prodInOut);
+        return saveDTO;
+    }
+
+    @Override
+    public void delete(Long id) {
+        singleDelete(id);
+    }
+
+    private void singleDelete(Long id) {
+        if (null != id) {
+            ProdInOut prodInOut = getMapper().selectByPrimaryKey(id);
+            //删除主键
+            getMapper().deleteByPrimaryKey(prodInOut.getId());
+            //TODO 删除从表
+
+            //更新已转数
+//            updateYqty(prodInOut.getPi_puid(),prodInOut.getPi_class());
+            updateYqty(prodInOut);
+        }
+    }
+
+
+    @Override
+    public DocSavedDTO audit(ProdInOutFormDTO formData) {
+        Long id = null;
+        DocSavedDTO savedDTO = new DocSavedDTO();
+        if (null != formData) {
+            id = formData.getMain().getId();
+            if (StringUtils.isEmpty(id)) {
+                DocSavedDTO saveDTO = saveFormData(formData,true);
+                id = saveDTO.getId();
+            }
+            singleAudit(formData.getMain());
+        }
+        savedDTO.setId(id);
+        return savedDTO;
+    }
+
+    @Override
+    public void unAudit(Long id) {
+        ProdInOut prodInOut = getMapper().selectByPrimaryKey(id);
+        ProdInOutDTO prodInOutDTO = BeanMapper.map(prodInOut,ProdInOutDTO.class);
+        singleAudit(prodInOutDTO);
+    }
+
+    @Override
+    public void batchAudit(BatchDealBaseDTO baseDTOs) {
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            Long id =  base.getId();
+            ProdInOut prodInOut = getMapper().selectByPrimaryKey(id);
+            ProdInOutDTO prodInOutDTO = BeanMapper.map(prodInOut,ProdInOutDTO.class);
+            singleAudit(prodInOutDTO);
+        }
+    }
+
+    private void singleAudit(ProdInOutDTO prodInOutDTO) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("inoutNo",prodInOutDTO.getPi_inoutno() );
+        map.put("class",prodInOutDTO.getPi_class() );
+        map.put("commitid",prodInOutDTO.getPi_recordmanid());
+        map.put("companyid",prodInOutDTO.getCompanyId());
+        map.put("result","");
+        warehouseApi.post(map);
+        Object result =  map.get("result");
+        System.out.println("result");
+        //记录日志
+        if (!StringUtils.isEmpty(result))
+            throw new BizException(500, "存在已审核单据,单据编号:" + result);
+    }
+
+
+    @Override
+    public void deleteItem(Long id) {
+        ProdIODetail prodIODetail = prodIODetailMapper.selectByPrimaryKey(id);
+        prodIODetailMapper.deleteByPrimaryKey(id);
+        ProdInOut prodInOut = getMapper().selectByPrimaryKey(prodIODetail.getPd_piid());
+        //更新已转数
+        updateYqty(prodInOut);
+    }
+
+    @Override
+    public void batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0)
+            return;
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            singleDelete(base.getId());
+        }
+    }
+
+    private void updateYqty(ProdInOut prodInOut) {
+        //TODO 更新已转数
+
+    }
+
+    @Override
+    public Result turnProdOut(Long id) {
+        ProdInOut sourcePi = getMapper().selectByPrimaryKey(id);
+        Integer count=0;
+        double pdInqty=0, pdYqty=0;
+        List<ProdIODetail> sourcePids =prodIODetailMapper.selectByFK(id);
+        //检查从表
+        for (ProdIODetail prodIODetail : sourcePids) {
+            pdInqty = prodIODetail.getPd_inqty();
+            pdYqty = prodIODetail.getPd_yqty();
+            if (pdInqty-pdYqty>0){
+                count++;
+            }
+        }
+        //判断可转数
+        if (count==0) {
+            return Result.error(ExceptionCode.TURNINNUM_NOT_EXIST);
+        }
+        //插入验退单主表
+        ProdInOut targetPi = new ProdInOut();
+        //生成单号
+        String piInoutno = "YT0001";
+        targetPi.setPi_inoutno(piInoutno);
+        targetPi.setPi_class("采购验退单");
+        targetPi.setPi_date(new Date());
+        targetPi.setPi_recorddate(new Date());
+        targetPi.setPi_vendcode(sourcePi.getPi_vendcode());
+        targetPi.setPi_vendname(sourcePi.getPi_vendname());
+        targetPi.setPi_puid(sourcePi.getPi_puid());
+        targetPi.setPi_pucode(sourcePi.getPi_pucode());
+        //设置公司id
+        targetPi.setCompanyId(sourcePi.getCompanyId());
+        //保存数据
+        getMapper().insertSelective(targetPi);
+        //插入验退单从表
+        long pi_id = targetPi.getId();
+        for (int i = 0;i<sourcePids.size();i++){
+            ProdIODetail sourcePid = sourcePids.get(i);
+            ProdIODetail targetPid = new ProdIODetail();
+            if(sourcePid.getPd_inqty()-sourcePid.getPd_yqty()>0){
+                targetPid.setPd_piid(pi_id);
+                targetPid.setPd_inoutno(piInoutno);
+                targetPid.setPd_piclass("采购验退单");
+                targetPid.setPd_pdno(i);
+                targetPid.setPd_orderid(sourcePid.getPd_orderid());
+                targetPid.setPd_ordercode(sourcePid.getPd_ordercode());
+                targetPid.setPd_orderdetno(sourcePid.getPd_orderdetno());
+                targetPid.setPd_orderprice(sourcePid.getPd_orderprice());
+                targetPid.setPd_prodid(sourcePid.getPd_prodid());
+                targetPid.setPd_prodcode(sourcePid.getPd_prodcode());
+                targetPid.setPd_ioid(sourcePid.getId());
+                //公司id
+                targetPid.setCompanyId(sourcePid.getCompanyId());
+                //本次转单数
+                targetPid.setPd_outqty(sourcePid.getPd_inqty()-sourcePid.getPd_yqty());
+                prodIODetailMapper.insertSelective(targetPid);
+                //更新已转数
+                sourcePid.setPd_yqty(sourcePid.getPd_inqty());
+                prodIODetailMapper.updateByPrimaryKeySelective(sourcePid);
+            }
+        }
+        return Result.success();
+    }
+
+    /*private String pushMaxnubmer(String code, Long id) {
+        if (null == code) {
+            throw new BizException(BizExceptionCode.NULL_CODE);
+        }
 
+        return maxnumberService.pushMaxnubmer(count, code, "Purchase");
+    }*/
 
 }

+ 11 - 1
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyDTO.java

@@ -10,6 +10,7 @@ import java.io.Serializable;
  */
 @ApiModel(value = "Company", description = "公司信息")
 public class CompanyDTO implements Serializable{
+    private Long id;
     /**
      * 唯一名称
      */
@@ -21,6 +22,14 @@ public class CompanyDTO implements Serializable{
     private String address;
     private String logoUrl;
 
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
     public String getName() {
         return name;
     }
@@ -56,7 +65,8 @@ public class CompanyDTO implements Serializable{
     @Override
     public String toString() {
         return "CompanyDTO{" +
-                "name='" + name + '\'' +
+                "id=" + id +
+                ", name='" + name + '\'' +
                 ", businessCode='" + businessCode + '\'' +
                 ", address='" + address + '\'' +
                 ", logoUrl='" + logoUrl + '\'' +

+ 65 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyRegDTO.java

@@ -0,0 +1,65 @@
+package com.usoftchina.saas.account.dto;
+
+import io.swagger.annotations.ApiModel;
+
+import java.io.Serializable;
+
+/**
+ * @author yingp
+ * @date 2018/10/2
+ */
+@ApiModel(value = "CompanyReg", description = "公司注册信息")
+public class CompanyRegDTO implements Serializable{
+    /**
+     * 唯一名称
+     */
+    private String name;
+    /**
+     * 商业登记证号
+     */
+    private String businessCode;
+    private String address;
+    private String logoUrl;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getBusinessCode() {
+        return businessCode;
+    }
+
+    public void setBusinessCode(String businessCode) {
+        this.businessCode = businessCode;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getLogoUrl() {
+        return logoUrl;
+    }
+
+    public void setLogoUrl(String logoUrl) {
+        this.logoUrl = logoUrl;
+    }
+
+    @Override
+    public String toString() {
+        return "CompanyRegDTO{" +
+                "name='" + name + '\'' +
+                ", businessCode='" + businessCode + '\'' +
+                ", address='" + address + '\'' +
+                ", logoUrl='" + logoUrl + '\'' +
+                '}';
+    }
+}

+ 41 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java

@@ -53,6 +53,7 @@ public class AccountController {
         }
 
         account = BeanMapper.map(accountRegDTO, Account.class);
+        account.setEnabled(true);
         account.setSalt(account.getMobile());
         account.setPassword(accountService.getEncryptedPassword(account.getPassword(), account.getSalt()));
         accountService.save(account);
@@ -74,6 +75,10 @@ public class AccountController {
             return Result.error(ExceptionCode.USER_NOT_EXIST);
         }
 
+        if (!account.isEnabled()) {
+            return Result.error(ExceptionCode.USER_NOT_ENABLE);
+        }
+
         boolean checked = accountService.checkPwd(account, password);
         if (!checked) {
             return Result.error(ExceptionCode.USER_PWD_ERROR);
@@ -171,4 +176,40 @@ public class AccountController {
         accountService.unbindRole(accountId, roleId);
         return Result.success();
     }
+
+    /**
+     * 账户禁用
+     *
+     * @param accountId
+     * @return
+     */
+    @PostMapping("/disable")
+    public Result disableAccount(@RequestParam long accountId) {
+        accountService.disable(accountId);
+        return Result.success();
+    }
+
+    /**
+     * 账户启用
+     *
+     * @param accountId
+     * @return
+     */
+    @PostMapping("/enable")
+    public Result enableAccount(@RequestParam long accountId) {
+        accountService.enable(accountId);
+        return Result.success();
+    }
+
+    /**
+     * 账户删除
+     *
+     * @param accountId
+     * @return
+     */
+    @PostMapping("/delete")
+    public Result deleteAccount(@RequestParam long accountId) {
+        accountService.removeByPrimaryKey(accountId);
+        return Result.success();
+    }
 }

+ 18 - 5
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/CompanyController.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.controller;
 
 import com.usoftchina.saas.account.dto.CompanyDTO;
+import com.usoftchina.saas.account.dto.CompanyRegDTO;
 import com.usoftchina.saas.account.po.Company;
 import com.usoftchina.saas.account.service.CompanyService;
 import com.usoftchina.saas.base.Result;
@@ -23,22 +24,22 @@ public class CompanyController {
     /**
      * 注册
      *
-     * @param companyDTO
+     * @param companyRegDTO
      * @return
      */
     @PostMapping("/register")
-    public Result register(@RequestBody CompanyDTO companyDTO) {
+    public Result register(@RequestBody CompanyRegDTO companyRegDTO) {
         // 判断是否已注册
-        Company company = companyService.findByName(companyDTO.getName());
+        Company company = companyService.findByName(companyRegDTO.getName());
         if (null != company) {
             return Result.error(ExceptionCode.COMPANY_NAME_EXIST);
         }
-        company = companyService.findByBusinessCode(companyDTO.getBusinessCode());
+        company = companyService.findByBusinessCode(companyRegDTO.getBusinessCode());
         if (null != company) {
             return Result.error(ExceptionCode.COMPANY_CODE_EXIST);
         }
 
-        company = BeanMapper.map(companyDTO, Company.class);
+        company = BeanMapper.map(companyRegDTO, Company.class);
         companyService.save(company);
 
         return Result.success();
@@ -75,4 +76,16 @@ public class CompanyController {
         }
         return Result.error(ExceptionCode.COMPANY_NOT_EXIST);
     }
+
+    /**
+     * 删除
+     *
+     * @param companyId
+     * @return
+     */
+    @PostMapping("/delete")
+    public Result delete(@RequestParam Long companyId) {
+        companyService.removeByPrimaryKey(companyId);
+        return Result.success();
+    }
 }

+ 16 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountMapper.java

@@ -24,6 +24,14 @@ public interface AccountMapper {
      */
     int insertSelective(Account account);
 
+    /**
+     * 按ID查找
+     *
+     * @param id
+     * @return
+     */
+    Account selectByPrimaryKey(@Param("id") Long id);
+
     /**
      * 按用户名查找
      *
@@ -55,4 +63,12 @@ public interface AccountMapper {
      * @return
      */
     int deleteByPrimaryKey(@Param("id") Long id);
+
+    /**
+     * 更新启用状态
+     *
+     * @param id
+     * @param enabled
+     */
+    void updateEnabled(@Param("id") Long id, @Param("enabled") Boolean enabled);
 }

+ 9 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/Account.java

@@ -21,6 +21,7 @@ public class Account implements Serializable {
      * 账号类型 0 - 管理员
      */
     private Integer type;
+    private boolean enabled;
     protected Date createTime;
     protected long creatorId;
     protected Date updateTime;
@@ -82,6 +83,14 @@ public class Account implements Serializable {
         this.type = type;
     }
 
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
     public Long getId() {
         return id;
     }

+ 14 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java

@@ -97,4 +97,18 @@ public interface AccountService {
      */
     boolean removeByPrimaryKey(Long id);
 
+    /**
+     * 禁用
+     *
+     * @param accountId
+     */
+    void disable(Long accountId);
+
+    /**
+     * 启用
+     *
+     * @param accountId
+     */
+    void enable(Long accountId);
+
 }

+ 16 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java

@@ -88,4 +88,20 @@ public class AccountServiceImpl implements AccountService {
         accountCompanyMapper.deleteByAccountId(id);
         return accountMapper.deleteByPrimaryKey(id) > 0;
     }
+
+    @Override
+    public void enable(Long accountId) {
+        Account account = accountMapper.selectByPrimaryKey(accountId);
+        if (null != account && !account.isEnabled()) {
+            accountMapper.updateEnabled(accountId, true);
+        }
+    }
+
+    @Override
+    public void disable(Long accountId) {
+        Account account = accountMapper.selectByPrimaryKey(accountId);
+        if (null != account && account.isEnabled()) {
+            accountMapper.updateEnabled(accountId, false);
+        }
+    }
 }

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

@@ -5,7 +5,7 @@
         insert into ac_account_company(account_id,company_id) values (#{accountId}, #{companyId})
     </insert>
     <delete id="delete">
-        delete from ac_account_company where account_id=#{accountId} and companyId=#{companyId}
+        delete from ac_account_company where account_id=#{accountId} and company_id=#{companyId}
     </delete>
     <delete id="deleteByAccountId" parameterType="java.lang.Long">
         delete from ac_account_company where account_id=#{accountId}

+ 17 - 4
base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml

@@ -10,18 +10,19 @@
         <result column="email" jdbcType="VARCHAR" property="email"/>
         <result column="mobile" jdbcType="VARCHAR" property="mobile"/>
         <result column="type" jdbcType="INTEGER" property="type"/>
+        <result column="enabled" jdbcType="BOOLEAN" property="enabled"/>
         <result column="creator_id" jdbcType="BIGINT" property="creatorId"/>
         <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="updater_id" jdbcType="BIGINT" property="updaterId"/>
         <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
     </resultMap>
     <sql id="baseColumns">
-        id,username,password,salt,realname,email,mobile,type,creator_id,create_time,updater_id,update_time
+        id,username,password,salt,realname,email,mobile,type,enabled,creator_id,create_time,updater_id,update_time
     </sql>
     <insert id="insert" parameterType="com.usoftchina.saas.account.po.Account">
-        insert into ac_account(username,password,salt,realname,email,mobile,type,creator_id,create_time,updater_id,update_time)
+        insert into ac_account(username,password,salt,realname,email,mobile,type,enabled,creator_id,create_time,updater_id,update_time)
         values (#{username,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR}, #{salt,jdbcType=VARCHAR},
-        #{realname,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER},
+        #{realname,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, #{enabled,jdbcType=BOOLEAN},
         #{creatorId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}, #{updaterId,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP})
     </insert>
     <insert id="insertSelective" parameterType="com.usoftchina.saas.account.po.Account">
@@ -48,6 +49,9 @@
             <if test="type != null">
                 type,
             </if>
+            <if test="enabled != null">
+                enabled,
+            </if>
             <if test="creatorId != null">
                 creator_id,
             </if>
@@ -81,7 +85,10 @@
                 #{mobile,jdbcType=VARCHAR},
             </if>
             <if test="type != null">
-                #{type,jdbcType=INT},
+                #{type,jdbcType=INTEGER},
+            </if>
+            <if test="enabled != null">
+                #{enabled,jdbcType=BOOLEAN},
             </if>
             <if test="creatorId != null">
                 #{creatorId,jdbcType=BIGINT},
@@ -97,6 +104,9 @@
             </if>
         </trim>
     </insert>
+    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+        select <include refid="baseColumns"/> from ac_account where id=#{id}
+    </select>
     <select id="selectByUsername" parameterType="java.lang.String" resultMap="BaseResultMap">
         select <include refid="baseColumns"/> from ac_account where username=#{username}
     </select>
@@ -109,4 +119,7 @@
     <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
         delete from ac_account where id=#{id}
     </delete>
+    <update id="updateEnabled">
+        update ac_account set enabled=#{enabled,jdbcType=BOOLEAN} where id=#{id,jdbcType=BIGINT}
+    </update>
 </mapper>

+ 118 - 0
base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/controller/AccountControllerTest.java

@@ -0,0 +1,118 @@
+package com.usoftchina.saas.account.controller;
+
+import com.usoftchina.saas.account.constant.AccountType;
+import com.usoftchina.saas.account.dto.AccountDTO;
+import com.usoftchina.saas.account.dto.AccountRegDTO;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.test.BaseControllerTest;
+import com.usoftchina.saas.test.TestConstant;
+import org.junit.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MvcResult;
+//import org.springframework.transaction.annotation.Transactional;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+//@Transactional
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class AccountControllerTest extends BaseControllerTest {
+
+    private final String mobile = "13500000000";
+
+    private final String password = "select111***";
+
+    @Test
+    public void testA_register() throws Exception {
+        AccountRegDTO accountRegDTO = new AccountRegDTO();
+        accountRegDTO.setUsername(mobile);
+        accountRegDTO.setMobile(mobile);
+        accountRegDTO.setEmail("jack-ma@mxhichina.com");
+        accountRegDTO.setRealname("Jack Ma");
+        accountRegDTO.setPassword(password);
+        accountRegDTO.setType(AccountType.ADMIN.getType());
+
+        mockMvc.perform(requestBody("/account/register", accountRegDTO))
+                .andExpect(isSuccess());
+    }
+
+    @Test
+    public void testB_validByUsernameAndPwd() throws Exception {
+        MvcResult mvcResult = mockMvc.perform(get("/account/pwd/check")
+                .param("username", mobile)
+                .param("password", password))
+                .andExpect(isSuccess())
+                .andReturn();
+        Result<AccountDTO> result = result(mvcResult, AccountDTO.class);
+        System.out.println(result.getData());
+        Assert.assertEquals(result.getData().getMobile(), mobile);
+    }
+
+    @Test
+    public void testC_validByUsernameAndErrorPwd() throws Exception {
+        mockMvc.perform(get("/account/pwd/check")
+                .param("username", mobile)
+                .param("password", "1"))
+                .andExpect(isFail());
+    }
+
+    @Test
+    public void testD_getAccount() throws Exception {
+        AccountDTO accountDTO = getAccountDTO();
+        Assert.assertEquals(accountDTO.getMobile(), mobile);
+    }
+
+    private AccountDTO getAccountDTO() throws Exception {
+        MvcResult mvcResult = mockMvc.perform(get("/account")
+                .param("username", mobile))
+                .andExpect(isSuccess())
+                .andReturn();
+        Result<AccountDTO> result = result(mvcResult, AccountDTO.class);
+        System.out.println(result.getData());
+        return result.getData();
+    }
+
+    @Test
+    public void testE_bindCompany() throws Exception {
+        AccountDTO accountDTO = getAccountDTO();
+        mockMvc.perform(post("/account/bind/company")
+                .param("accountId", String.valueOf(accountDTO.getId()))
+                .param("companyId", String.valueOf(TestConstant.DEFAULT_COMPANY_ID)))
+                .andExpect(isSuccess());
+    }
+
+    @Test
+    public void testF_unbindCompany() throws Exception {
+        AccountDTO accountDTO = getAccountDTO();
+        mockMvc.perform(post("/account/unbind/company")
+                .param("accountId", String.valueOf(accountDTO.getId()))
+                .param("companyId", String.valueOf(TestConstant.DEFAULT_COMPANY_ID)))
+                .andExpect(isSuccess());
+    }
+
+    @Test
+    public void testG_disableAccount() throws Exception {
+        AccountDTO accountDTO = getAccountDTO();
+        mockMvc.perform(post("/account/disable")
+                .param("accountId", String.valueOf(accountDTO.getId())))
+                .andExpect(isSuccess());
+    }
+
+    @Test
+    public void testH_enableAccount() throws Exception {
+        AccountDTO accountDTO = getAccountDTO();
+        mockMvc.perform(post("/account/enable")
+                .param("accountId", String.valueOf(accountDTO.getId())))
+                .andExpect(isSuccess());
+    }
+
+    @Test
+    public void testI_deleteAccount() throws Exception {
+        AccountDTO accountDTO = getAccountDTO();
+        mockMvc.perform(post("/account/delete")
+                .param("accountId", String.valueOf(accountDTO.getId())))
+                .andExpect(isSuccess());
+    }
+}

+ 75 - 0
base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/controller/CompanyControllerTest.java

@@ -0,0 +1,75 @@
+package com.usoftchina.saas.account.controller;
+
+import com.usoftchina.saas.account.dto.CompanyDTO;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.test.BaseControllerTest;
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MvcResult;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class CompanyControllerTest extends BaseControllerTest {
+
+    private final String name = "spring.test";
+    private final String businessCode = "T00000000000000000";
+
+    @Test
+    public void testA_register() throws Exception {
+        CompanyDTO companyDTO = new CompanyDTO();
+        companyDTO.setName(name);
+        companyDTO.setBusinessCode(businessCode);
+        companyDTO.setAddress("深圳市南山区粤海街道高新技术产业园科技南五路英唐大厦六楼");
+        companyDTO.setLogoUrl("https://co-image.qichacha.com/CompanyImage/104eb3c232bbac93393a5e204d6a47d1.jpg?x-oss-process=style/qcc_cmp");
+
+        mockMvc.perform(requestBody("/company/register", companyDTO))
+                .andExpect(isSuccess());
+    }
+
+    @Test
+    public void testB_getByName() throws Exception {
+        CompanyDTO companyDTO = getByName();
+        Assert.assertEquals(companyDTO.getBusinessCode(), businessCode);
+    }
+
+    private CompanyDTO getByName() throws Exception {
+        MvcResult mvcResult = mockMvc.perform(get("/company")
+                .param("name", name))
+                .andExpect(isSuccess())
+                .andReturn();
+        Result<CompanyDTO> result = result(mvcResult, CompanyDTO.class);
+        System.out.println(result.getData());
+        return result.getData();
+    }
+
+    private CompanyDTO getByBusinessCode() throws Exception {
+        MvcResult mvcResult = mockMvc.perform(get("/company")
+                .param("businessCode", businessCode))
+                .andExpect(isSuccess())
+                .andReturn();
+        Result<CompanyDTO> result = result(mvcResult, CompanyDTO.class);
+        System.out.println(result.getData());
+        return result.getData();
+    }
+
+    @Test
+    public void testC_getByBusinessCode() throws Exception {
+        CompanyDTO companyDTO = getByBusinessCode();
+        Assert.assertEquals(companyDTO.getName(), name);
+    }
+
+    @Test
+    public void testD_delete() throws Exception {
+        CompanyDTO companyDTO = getByName();
+        mockMvc.perform(post("/company/delete")
+                .param("companyId", String.valueOf(companyDTO.getId())))
+                .andExpect(isSuccess());
+    }
+
+}

+ 8 - 8
base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/service/AccountServiceTest.java

@@ -2,18 +2,18 @@ package com.usoftchina.saas.account.service;
 
 import com.usoftchina.saas.account.constant.AccountType;
 import com.usoftchina.saas.account.po.Account;
-import org.junit.Assert;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
+import org.junit.*;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
+//import org.springframework.transaction.annotation.Transactional;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
-@FixMethodOrder(MethodSorters.JVM)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+//@Transactional
 public class AccountServiceTest {
 
     @Autowired
@@ -24,12 +24,12 @@ public class AccountServiceTest {
     private final String password = "select111***";
 
     @Test
-    public void save() throws Exception {
+    public void testA_save() throws Exception {
         Account account = new Account();
         account.setMobile(mobile);
         account.setUsername(mobile);
         account.setSalt(mobile);
-        account.setEmail("mayun@mxhichina.com");
+        account.setEmail("jack-ma@mxhichina.com");
         account.setPassword(accountService.getEncryptedPassword(password, account.getSalt()));
         account.setRealname("Jack Ma");
         account.setType(AccountType.ADMIN.getType());
@@ -39,7 +39,7 @@ public class AccountServiceTest {
     }
 
     @Test
-    public void checkPwd() throws Exception {
+    public void testB_checkPwd() throws Exception {
         Account account = accountService.findByMobile(mobile);
         Assert.assertNotNull(account);
         boolean checked = accountService.checkPwd(account, password);
@@ -47,7 +47,7 @@ public class AccountServiceTest {
     }
 
     @Test
-    public void removeByPrimaryKey() throws Exception {
+    public void testC_removeByPrimaryKey() throws Exception {
         Account account = accountService.findByMobile(mobile);
         Assert.assertNotNull(account);
         boolean removed = accountService.removeByPrimaryKey(account.getId());

+ 4 - 6
base-servers/account/account-server/src/test/java/com/usoftchina/saas/account/service/CompanyServiceTest.java

@@ -1,9 +1,7 @@
 package com.usoftchina.saas.account.service;
 
 import com.usoftchina.saas.account.po.Company;
-import org.junit.Assert;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
+import org.junit.*;
 import org.junit.runner.RunWith;
 import org.junit.runners.MethodSorters;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,7 +14,7 @@ import org.springframework.test.context.junit4.SpringRunner;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest
-@FixMethodOrder(MethodSorters.JVM)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class CompanyServiceTest {
 
     @Autowired
@@ -25,7 +23,7 @@ public class CompanyServiceTest {
     private final String name = "spring.test";
 
     @Test
-    public void save() {
+    public void testA_save() {
         Company company = new Company();
         company.setName(name);
         company.setBusinessCode("T00000000000000000");
@@ -37,7 +35,7 @@ public class CompanyServiceTest {
     }
 
     @Test
-    public void removeByPrimaryKey() {
+    public void testB_removeByPrimaryKey() {
         Company company = companyService.findByName(name);
         Assert.assertNotNull(company);
         boolean removed = companyService.removeByPrimaryKey(company.getId());

+ 22 - 0
framework/core/src/main/java/com/usoftchina/saas/base/Result.java

@@ -1,9 +1,13 @@
 package com.usoftchina.saas.base;
 
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.usoftchina.saas.exception.BaseException;
 import com.usoftchina.saas.exception.BaseExceptionCode;
+import com.usoftchina.saas.utils.JsonUtils;
+import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
 
 import java.io.Serializable;
+import java.lang.reflect.Type;
 
 /**
  * 结果
@@ -122,4 +126,22 @@ public class Result<T> implements Serializable {
         result.setMessage(e.getMessage());
         return result;
     }
+
+    /**
+     * json字符串转换Result对象
+     *
+     * @param jsonString
+     * @param <T>
+     * @return
+     */
+    public static <T> Result<T> fromJsonString(String jsonString, Class<T> targetCls) {
+        Type[] types = new Type[]{targetCls};
+        final ParameterizedTypeImpl type = ParameterizedTypeImpl.make(Result.class, types, Result.class.getDeclaringClass());
+        return JsonUtils.fromJsonString(jsonString, new TypeReference<Result<T>>() {
+            @Override
+            public Type getType() {
+                return type;
+            }
+        });
+    }
 }

+ 1 - 0
framework/core/src/main/java/com/usoftchina/saas/exception/ExceptionCode.java

@@ -32,6 +32,7 @@ public enum ExceptionCode implements BaseExceptionCode {
     USER_PWD_ERROR(53003, "密码错误"),
     USER_PWD_NOT_EQUALS(53004, "密码与确认密码不一致"),
     USER_NOT_EXIST(53005, "用户不存在"),
+    USER_NOT_ENABLE(53006, "用户禁止使用"),
 
     // 文件相关
     FOLDER_NULL(55000, "文件夹为空"),

+ 12 - 0
framework/core/src/main/java/com/usoftchina/saas/utils/JsonUtils.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.utils;
 
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.util.StringUtils;
 
@@ -29,4 +30,15 @@ public class JsonUtils {
             return null;
         }
     }
+
+    public static <T> T fromJsonString(String json, TypeReference valueTypeRef) {
+        if (StringUtils.isEmpty(json)) {
+            return null;
+        }
+        try {
+            return mapper.readValue(json, valueTypeRef);
+        } catch (Exception e) {
+            return null;
+        }
+    }
 }

+ 17 - 1
framework/server-starter/src/main/java/com/usoftchina/saas/server/ServerAutoConfiguration.java

@@ -1,14 +1,20 @@
 package com.usoftchina.saas.server;
 
+import com.usoftchina.saas.server.error.ServletErrorUtils;
+import com.usoftchina.saas.server.error.UnCaughtErrorFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.lang.Nullable;
 import org.springframework.web.servlet.HandlerExceptionResolver;
 import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.util.NestedServletException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 /**
  * @author yingp
@@ -18,13 +24,23 @@ import javax.servlet.http.HttpServletResponse;
 @ComponentScan(basePackages = {"com.usoftchina.saas.server"})
 public class ServerAutoConfiguration {
 
+    private Logger logger = LoggerFactory.getLogger(UnCaughtErrorFilter.class);
+
     @Bean
     public HandlerExceptionResolver handlerExceptionResolver() {
         return new HandlerExceptionResolver(){
             @Nullable
             @Override
             public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, @Nullable Object o, Exception e) {
-                System.err.println("############" + request.getRequestURI() + "#" + response.getStatus());
+                Throwable cause = e;
+                if (e instanceof NestedServletException) {
+                    cause = ((NestedServletException) e).getRootCause();
+                }
+                logger.error(ServletErrorUtils.buildMessage(request, cause), cause);
+                try {
+                    ServletErrorUtils.writerErrorResult(response, cause);
+                } catch (IOException ex) {
+                }
                 return null;
             }
         };

+ 22 - 0
framework/test-starter/pom.xml

@@ -21,5 +21,27 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <scope>compile</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <scope>compile</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 </project>

+ 118 - 0
framework/test-starter/src/main/java/com.usoftchina.saas.test/BaseControllerTest.java

@@ -0,0 +1,118 @@
+package com.usoftchina.saas.test;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.utils.JsonUtils;
+import org.junit.Before;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.ResultMatcher;
+import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
+
+/**
+ * @author yingp
+ * @date 2018/10/23
+ */
+public abstract class BaseControllerTest {
+    @Autowired
+    protected WebApplicationContext context;
+
+    protected MockMvc mockMvc;
+
+    @Before
+    public void setup() {
+        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
+                .alwaysDo(print())
+                .alwaysExpect(isOk())
+                .alwaysExpect(isJson())
+                .build();
+    }
+
+    /**
+     * GET请求
+     *
+     * @param urlTemplate
+     * @return
+     */
+    public static MockHttpServletRequestBuilder get(String urlTemplate) {
+        return MockMvcRequestBuilders.get(urlTemplate);
+    }
+
+    /**
+     * POST form方式请求
+     *
+     * @param urlTemplate
+     * @return
+     */
+    public static MockHttpServletRequestBuilder post(String urlTemplate) {
+        return MockMvcRequestBuilders.post(urlTemplate);
+    }
+
+    /**
+     * POST Payload方式请求,使用@RequestBody注解情况下
+     *
+     * @param object
+     * @return
+     */
+    public static MockHttpServletRequestBuilder requestBody(String urlTemplate, Object object) {
+        return post(urlTemplate).contentType(MediaType.APPLICATION_JSON_UTF8)
+                .content(JsonUtils.toJsonString(object));
+    }
+
+    /**
+     * 是否返回 http status: 200
+     *
+     * @return
+     */
+    public static ResultMatcher isOk() {
+        return status().isOk();
+    }
+
+    /**
+     * 是否返回json格式
+     *
+     * @return
+     */
+    public static ResultMatcher isJson() {
+        return content().contentType(MediaType.APPLICATION_JSON_UTF8);
+    }
+
+    /**
+     * 是否执行成功 {"success": true}
+     *
+     * @return
+     */
+    public static ResultMatcher isSuccess() {
+        return jsonPath("success").value(true);
+    }
+
+    /**
+     * 是否执行失败 {"success": false}
+     *
+     * @return
+     */
+    public static ResultMatcher isFail() {
+        return jsonPath("success").value(false);
+    }
+
+    /**
+     * Result转换
+     *
+     * @param mvcResult
+     * @param <T>
+     * @return
+     * @throws Exception
+     */
+    public static <T> Result<T> result(MvcResult mvcResult, Class<T> targetCls) throws Exception {
+        String content = mvcResult.getResponse().getContentAsString();
+        return Result.fromJsonString(content, targetCls);
+    }
+
+}

+ 16 - 0
framework/test-starter/src/main/java/com.usoftchina.saas.test/TestConstant.java

@@ -0,0 +1,16 @@
+package com.usoftchina.saas.test;
+
+/**
+ * @author yingp
+ * @date 2018/10/22
+ */
+public class TestConstant {
+    /**
+     * 默认企业ID
+     */
+    public static final long DEFAULT_COMPANY_ID = 1;
+    /**
+     * 默认账户ID
+     */
+    public static final long DEFAULT_ACCOUNT_ID = 1;
+}

+ 3 - 3
framework/test-starter/src/main/java/com.usoftchina.saas.test/DefaultContextHolderListener.java → framework/test-starter/src/main/java/com.usoftchina.saas.test/TestContextListener.java

@@ -8,11 +8,11 @@ import org.springframework.test.context.support.AbstractTestExecutionListener;
  * @author yingp
  * @date 2018/10/22
  */
-public class DefaultContextHolderListener extends AbstractTestExecutionListener {
+public class TestContextListener extends AbstractTestExecutionListener {
     @Override
     public void beforeTestClass(TestContext testContext) throws Exception {
         // 设置测试环境默认用户
-        BaseContextHolder.setCompanyId(1);
-        BaseContextHolder.setUserId(1);
+        BaseContextHolder.setCompanyId(TestConstant.DEFAULT_COMPANY_ID);
+        BaseContextHolder.setUserId(TestConstant.DEFAULT_ACCOUNT_ID);
     }
 }

+ 1 - 1
framework/test-starter/src/main/resources/META-INF/spring.factories

@@ -1,3 +1,3 @@
 # Test Execution Listeners
 org.springframework.test.context.TestExecutionListener=\
-com.usoftchina.saas.test.DefaultContextHolderListener
+com.usoftchina.saas.test.TestContextListener

+ 26 - 32
frontend/saas-web/app/util/FormUtil.js

@@ -36,22 +36,6 @@ Ext.define('saas.util.FormUtil', {
                         Ext.apply(item, cusItem);
                     });
                     Ext.Array.each(items, function(item) {
-                        var bind = item.bind,
-                        bindName = bind,
-                        defaultValue = item.defaultValue;
-                        
-                        if(bindName && !Ext.isString(bindName)) {
-                            bindName = bindName.value;
-                        }
-                        if(bindName) {
-                            bindName = bindName.replace(/[{|}]/g, '');
-                        }
-
-                        // 设置初始值
-                        if(defaultValue) {
-                            formModel.set(bindName, defaultValue);
-                        }
-
                         // 设置必填
                         if(item.allowBlank==false){
                             // TODO 需要判断类型
@@ -60,20 +44,24 @@ Ext.define('saas.util.FormUtil', {
 
                         // 如果是从表为其绑定store
                         if(item.xtype == 'detailGridField') {
+                            var index = form.detailCount;
                             var columns = item.columns,
                             cnames = columns.filter(function(c) {
                                 return c.dataIndex && !c.ignore;
                             }).map(function(c) {
                                 return c.dataIndex
                             });
-                            formModel.set('detailBindFields', cnames);
+
+                            formModel.set('detail' + index + '.detailBindFields', cnames);
                             item.bind = {
-                                store: '{detailStore}'
+                                store: '{detail' + index + '.detailStore}'
                             };     
-                            formModel.set('detailStore', Ext.create('Ext.data.Store', {
+                            formModel.set('detail' + index + '.detailStore', Ext.create('Ext.data.Store', {
                                 model:item.storeModel,
                                 data: []
                             }));
+
+                            form.detailCount++;
                         }
                     });
                 }
@@ -104,10 +92,20 @@ Ext.define('saas.util.FormUtil', {
                 form.setLoading(false);
                 var res = Ext.decode(response.responseText);
                 if(res.success) {
-                    form.setFormData({
-                        main: res.data.main,
-                        detail: res.data.items
-                    });
+                    var d = res.data;
+                    var o = {
+                        main: d.main
+                    };
+                    if(d.items) {
+                        o.detail0 = d.items;
+                    }else {
+                        var idx = 1;
+                        while(d['item' + idx]) {
+                            o['detail' + (idx - 1)] = d['item' + idx];
+                            idx++;
+                        }
+                    }
+                    form.setFormData(o);
                 }
             })
             .catch(function(response) {
@@ -128,15 +126,11 @@ Ext.define('saas.util.FormUtil', {
                 if(res.success){
                     var code = res.data.code;
                     var viewModel = form.getViewModel();
-                    var detailStore = viewModel.get('_detailStore');
-                    var detno = 0,datas=[];
-                    Ext.Array.each(new Array(10), function() {
-                        detno += 1;
-                        var data = {};
-                        data[form._detnoColumn] = detno;
-                        datas.push(data);
-                    })
-                    detailStore.loadData(datas);
+                    var detailGrids = form.query('detailGridField');
+
+                    Ext.Array.each(detailGrids, function(grid) {
+                        grid.add10EmptyRow();
+                    });
                     if(code){
                         viewModel.set(form._codeField,code);
                     }

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

@@ -12,6 +12,7 @@ Ext.define('saas.view.core.form.FormPanel', {
     _codeField: '',
     _statusField: '',
     _idField: '',
+    detailCount: 0,
 
     //基础属性
     initId: 0,
@@ -90,22 +91,22 @@ Ext.define('saas.view.core.form.FormPanel', {
         
         var o = {};
         o[statusField] = {
-            bind: '{' + statusCodeField + '}',
+            bind: '{form.' + statusCodeField + '}',
             get: function(value) {
                 return value == 'AUDITED' ? '已审核' : '未审核'
             }
         };
         o['auditBtnText'] = {
-            bind: '{' + statusCodeField + '}',
+            bind: '{form.' + statusCodeField + '}',
             get: function(value) {
                 return value == 'AUDITED' ? '反审核' : '审核'
             }
         };
         viewModel.setFormulas(o);
 
-        viewModel.set('createTime', new Date());
-        viewModel.set('updateTime', new Date());
-        statusCodeField ? viewModel.set(statusCodeField, "UNAUDITED") : viewModel.set('auditBtnText', "审核");
+        viewModel.set('form.createTime', new Date());
+        viewModel.set('form.updateTime', new Date());
+        statusCodeField ? viewModel.set('form.' + statusCodeField, "UNAUDITED") : viewModel.set('auditBtnText', "审核");
     },
 
     addItems: function(items) {
@@ -122,24 +123,37 @@ Ext.define('saas.view.core.form.FormPanel', {
         viewModel = me.getViewModel(),
         allData = viewModel.getData(),
         formData = allData['form'],
-        detailStore = allData['detailStore'],
+        detailCount = me.detailCount,
         data = {
             main: formData,
-            detail: detailStore.getData().items
         };
 
+        for(var i = 0; i < detailCount; i++) {
+            var detail = allData['detail' + i],
+            store = detail.detailStore;
+
+            data['detail' + i] = store.getData().items;
+        }
+
         return data;
     },
 
     setFormData: function(formData) {
         var me = this,
         main = formData.main,
-        detail = formData.detail,
+        detailCount = me.detailCount,
         viewModel = me.getViewModel(),
-        detailStore = viewModel.get('detailStore');
+        viewData = viewModel.getData();
+
+        viewModel.set('form', main);
 
-        viewModel.setData(main);
-        detailStore.loadData(detail);
+        for(var i = 0; i < detailCount; i++) {
+            var detailData = formData['detail' + i],
+            detail = viewData['detail' + i],
+            store = detail.detailStore;
+
+            store.loadData(detailData);
+        }
     },
 
     /**
@@ -150,11 +164,16 @@ Ext.define('saas.view.core.form.FormPanel', {
         viewModel = me.getViewModel();
 
         Ext.Array.each(items, function(item) {
-            var bind = item.bind,
+            var xtype = item.xtype,
+            bind = item.bind,
             name = item.name,
             ignore = item.ignore,
             defaultValue = item.defaultValue;
 
+            if(xtype == 'detailGridField') {
+                return;
+            }
+
             // 设置model绑定
             if(!ignore) {
                 if(bind) {
@@ -179,15 +198,4 @@ Ext.define('saas.view.core.form.FormPanel', {
 
         });
     },
-
-    initFormData: function(formData) {
-        var me = this,
-        main = formData.main,
-        detail = formData.detail,
-        viewModel = me.getViewModel();
-
-        viewModel.setData(main);
-        // viewModel.set('detailGridField');
-    }
-    
 });

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

@@ -67,16 +67,24 @@ Ext.define('saas.view.core.form.FormPanelController', {
     save:function(formData){
         var me = this,
         form = this.getView(),
+        detailCount = form.detailCount,
         viewModel = me.getViewModel(),
-        modelData = viewModel.getData(),
-        detailBindFields = modelData.detailBindFields;
+        modelData = viewModel.getData();
 
-        var gridData = formData.detail?formData.detail:[];
-        var dirtyGridData = [];
-        if(gridData.length>0){
-            Ext.each(gridData, function(item,index){
+        var params = {
+            main:formData.main
+        };
+
+        for(var i = 0; i < detailCount; i++) {
+            var detailData = formData['detail' + i];
+            var modelDetail = modelData['detail' + i];
+            var dirtyGridData = [];
+            var detailBindFields = modelDetail.detailBindFields;
+
+            Ext.Array.each(detailData, function(item){
                 var d = Object.assign({}, item.data),
                 dirty = item.dirty;
+
                 if(dirty){
                     if((typeof d.id) != "number" && d.id.indexOf('-')>-1){
                         d.id = 0;
@@ -89,11 +97,15 @@ Ext.define('saas.view.core.form.FormPanelController', {
                     dirtyGridData.push(d);
                 }
             });
+            params['item' + ( i + 1)] = dirtyGridData;
         }
-        var params = {
-            main:formData.main,
-            items:dirtyGridData
+
+        // 只有一个从表时从表字段改为items
+        if(detailCount == 1) {
+            params.items = params.item1;
+            delete params.item1;
         }
+
         me.BaseUtil.request({
             url: form._saveUrl,
             params: JSON.stringify(params),
@@ -113,8 +125,12 @@ Ext.define('saas.view.core.form.FormPanelController', {
     },
 
     audit: function(){
-        var me = this;
-        var form = this.getView();
+        var me = this,
+        form = this.getView(),
+        detailCount = form.detailCount,
+        viewModel = me.getViewModel(),
+        modelData = viewModel.getData();
+        
         if(form.getForm().wasDirty==false){
             Ext.Msg.alert('提示','未修改数据,请修改后保存');
             return false;
@@ -125,22 +141,41 @@ Ext.define('saas.view.core.form.FormPanelController', {
         }
         //form里面数据
         var formData = form.getFormData();
-        var gridData = formData.detail?formData.detail:[];
-        var dirtyGridData = [];
-        if(gridData.length>0){
-            Ext.each(gridData, function(item,index){
-                if(item.dirty){
-                    if((typeof item.data.id) != "number" && item.data.id.indexOf('extMode')>-1){
-                        item.data.id = 0;
+        var params = {
+            main: formData.main
+        };
+
+        for(var i = 0; i < detailCount; i++) {
+            var detailData = formData['detail' + i];
+            var modelDetail = modelData['detail' + i];
+            var dirtyGridData = [];
+            var detailBindFields = modelDetail.detailBindFields;
+
+            Ext.Array.each(detailData, function(item){
+                var d = Object.assign({}, item.data),
+                dirty = item.dirty;
+
+                if(dirty){
+                    if((typeof d.id) != "number" && d.id.indexOf('-')>-1){
+                        d.id = 0;
+                    }
+                    for(k in d) {
+                        if(!Ext.Array.contains(detailBindFields, k)) {
+                            delete d[k];
+                        }
                     }
-                    dirtyGridData.push(item.data)
+                    dirtyGridData.push(d);
                 }
             });
-        }   
-        var params = {
-            main:formData.main,
-            items:dirtyGridData
+            params['item' + ( i + 1)] = dirtyGridData;
+        }
+
+        // 只有一个从表时从表字段改为items
+        if(detailCount == 1) {
+            params.items = params.item1;
+            delete params.item1;
         }
+
         me.BaseUtil.request({
             url: form._auditUrl,
             params: JSON.stringify(params),

+ 4 - 2
frontend/saas-web/app/view/core/form/FormPanelModel.js

@@ -3,14 +3,16 @@ Ext.define('saas.view.core.form.FormPanelModel', {
     alias: 'viewmodel.core-form-formpanel',
 
     data: {
-        id:0,
+        form: {
+            id: 0
+        },
         detailBindeFields: [], // 从表绑定列
         detailStore: null, // 从表store
     },
 
     formulas:{
         deleteHidden:{
-            bind:'{id}',
+            bind:'{form.id}',
             get:function(value){
                 return !value;
             }

+ 7 - 9
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -92,14 +92,13 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
 
     add10EmptyRow: function() {
         var me = this,
-        form = me.ownerCt,
-        detnoColumn = form._detnoColumn,
+        detnoColumn = me._detnoColumn,
         store = me.getStore(),
         selectedRecord = me.selModel.lastSelected,
         datas = [];
 
         //当前行后序号全部加1
-        var detno = selectedRecord.data[form._detnoColumn];
+        var detno = selectedRecord ? selectedRecord.data[detnoColumn] : 0;
         Ext.Array.each(new Array(10), function() {
             detno += 1;
             var data = {};
@@ -111,15 +110,14 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
 
     addDetail: function() {
         var me = this,
-            form = me.ownerCt,
-            detnoColumn = form._detnoColumn,
+            detnoColumn = me._detnoColumn,
             store = me.getStore(),
             selectedRecord = me.selModel.lastSelected,
             detno = 0;
 
         //当前行后序号全部加1
         if(selectedRecord){
-            detno = selectedRecord.data[form._detnoColumn];
+            detno = selectedRecord.data[detnoColumn];
             var store = me.store;
             store.each(function(item){
                 d = item.data[detnoColumn];
@@ -183,14 +181,13 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
 
     swap: function(from, index, dir) {
         var me = this,
-        form = me.ownerCt,
         store = me.getStore(),
         to = store.getAt(index + dir);
 
         if(from && to) {
             var keys = me.getColumns().map(function(c) {
                 //剔除序号字段
-                if(c.dataIndex!=form._detnoColumn){
+                if(c.dataIndex!=me._detnoColumn){
                     return c.dataIndex 
                 }
             }),
@@ -205,5 +202,6 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             //聚焦目标行
             me.selModel.select(to);
         }
-    }
+    },
+
 });

+ 4 - 0
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -39,6 +39,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                 proxy: {
                     type: 'ajax',
                     url: me.baseVastUrl+'list',
+                    timeout: 8000,
                     actionMethods: {
                         read: 'GET'
                     },
@@ -68,6 +69,9 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                             condition: JSON.stringify(condition)
                         });
     
+                    },
+                    requestexception: function() {
+                        debugger;
                     }
                 }
             }),

+ 153 - 0
frontend/saas-web/app/view/money/payBalance/FormPanel.js

@@ -0,0 +1,153 @@
+Ext.define('saas.view.money.payBalance.FormPanel', {
+    extend: 'saas.view.core.form.FormPanel',
+    xtype: 'money-paybalance-formpanel',
+
+    controller: 'money-paybalance-formpanel',
+    viewModel: 'money-paybalance-formpanel',
+
+    viewName: 'money-paybalance-formpanel',
+
+    caller: 'Purchase',
+
+    //字段属性
+    _title: '付款单',
+    _idField: 'id',
+    _codeField: 'pu_code',
+    _statusField: 'pu_status',
+    _statusCodeField: 'pu_statuscode',
+    
+    _relationColumn: 'pd_puid',
+    _readUrl: 'http://192.168.0.181:8560/api/purchase/purchase/read/',
+    _saveUrl: 'http://192.168.0.181:8560/api/purchase/purchase/save',
+    _auditUrl: 'http://192.168.0.181:8560/api/purchase/purchase/audit',
+    _deleteUrl: 'http://192.168.0.181:8560/api/purchase/purchase/delete/',
+    _deleteDetailUrl: 'http://192.168.0.181:8560/api/purchase/purchase/deleteItem/',
+    _turnInUrl: 'http://192.168.253.228:8800/purchase/turnProdin/',
+    initId: 0,
+
+    // toolBtns: [{
+    //     xtype: 'button',
+    //     text: '转采购验收单',
+    //     handler: 'turnIn'
+    // }],
+
+    defaultItems: [{
+        xtype: 'hidden',
+        name: 'id',
+        fieldLabel: 'id'
+    }, {
+        xtype: "textfield",
+        name: "pb_code",
+        fieldLabel: "付款单号"
+    }, {
+        xtype: "hidden",
+        name: "pb_vendid",
+        bind: "{pb_vendid}",
+        fieldLabel: "供应商ID"
+    }, {
+        xtype: "hidden",
+        name: "pb_vendcode",
+        fieldLabel: "供应商编号"
+    }, {
+        xtype: "dbfindtrigger",
+        name: "pb_vendname",
+        fieldLabel: "供应商名称"
+    }, {
+        xtype: 'numberfield',
+        name: 'pb_pdamount',
+        fieldLabel: '总欠款'
+    }, {
+        xtype: "datefield",
+        name: "pb_date",
+        fieldLabel: "日期"
+    }, {
+        xtype: "detailGridField",
+        storeModel: 'saas.model.purchase.purchasedetail',
+        _detnoColumn: 'pd_detno',
+        columns: [{
+            text: "序号",
+            dataIndex: "pd_detno",
+            width: 100,
+            xtype: "numbercolumn",
+            align: 'center',
+            format: '0',
+            summaryType: 'count',
+            summaryRenderer: function (value, summaryData, dataIndex) {
+                return Ext.String.format('合计: {0}条', value);
+            },
+        }, {
+            text: '资金账户',
+            dataIndex: 'pd_bankname'
+        }, {
+            text: "付款金额",
+            dataIndex: "pd_amount",
+        }, {
+            text: "结算方式",
+            dataIndex: "pd_paymethod"
+        }, {
+            text: "结算号",
+            dataIndex: "pd_paycode"
+        }, {
+            text: "备注",
+            dataIndex: "pd_remark"
+        }]
+    }, {
+        xtype: "detailGridField",
+        storeModel: 'saas.model.purchase.purchasedetail',
+        _detnoColumn: 'pbd_detno',
+        columns: [{
+            text: "序号",
+            dataIndex: "pbd_detno",
+            width: 100,
+            xtype: "numbercolumn",
+            align: 'center',
+            format: '0',
+            summaryType: 'count',
+            summaryRenderer: function (value, summaryData, dataIndex) {
+                return Ext.String.format('合计: {0}条', value);
+            },
+        }, {
+            text: '来源单号',
+            dataIndex: 'pbd_slcode'
+        }, {
+            text: "业务类型",
+            dataIndex: "pbd_slkind",
+        }, {
+            text: "单据日期",
+            dataIndex: "pbd_sldate"
+        }, {
+            text: "单据金额",
+            dataIndex: "pbd_amount"
+        }, {
+            text: "已核销金额",
+            dataIndex: "pd_remark"
+        }, {
+            text: "未核销金额",
+            dataIndex: "pd_remark"
+        }, {
+            text: "本次核销金额",
+            dataIndex: "pbd_nowbalance"
+        }]
+    }, {
+        format: "Y-m-d",
+        xtype: "datefield",
+        name: "createTime",
+        fieldLabel: "创建时间"
+    }, {
+        xtype: "datefield",
+        name: "updateTime",
+        fieldLabel: "更新时间"
+    }, {
+        xtype: "textfield",
+        readOnly: true,
+        editable: false,
+        name: "pd_status",
+        fieldLabel: "单据状态"
+    }, {
+        xtype: "hidden",
+        readOnly: true,
+        editable: false,
+        name: "pd_statuscode",
+        fieldLabel: "单据状态码"
+    }]
+});

+ 158 - 0
frontend/saas-web/app/view/money/payBalance/FormPanelController.js

@@ -0,0 +1,158 @@
+Ext.define('saas.view.purchase.purchase.FormPanelController', {
+    extend: 'saas.view.core.form.FormPanelController',
+    alias: 'controller.money-paybalance-formpanel',
+
+    init: function (form) {
+        var me = this;
+        this.control({
+            /**放大镜新增demo*/
+            "field[name=combo]":{
+                beforerender:function(f){
+                    f.addHandler=me.addCombo;
+                }
+            },
+            //放大镜赋值关系 以及 tpl模板
+            'dbfindtrigger[name=pu_vendcode]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        dataUrl:'http://192.168.0.181:8570/api/document/vendor/getVendorsByCondition',
+                        dbfinds:[{
+                            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=pd_prodcode]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        conditionCode:'pr_code',
+                        dataUrl:'http://192.168.0.181:8570/api/document/product/getProductsByCondition',
+                        dbfinds:[{
+                            from:'pr_code',to:'pd_prodcode'
+                        }],
+                        dbtpls:[{
+                            field:'pr_code',width:100
+                        },{
+                            field:'pr_detail',width:100
+                        }],
+                        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
+                        }]
+                    }) ;   
+
+                }
+            }
+        });
+
+    },
+    addCombo:function(){
+        var combo=this.ownerCmp;
+        Ext.create('Ext.window.Window',{
+            layout:'vbox',
+            bodyPadding: 15,
+            width:500,
+            items:[{
+                fieldLabel:'实际值',
+                xtype:'textfield'
+            },{
+                fieldLabel:'显示值',
+                xtype:'textfield'
+            }],
+            buttons:[{
+                text:'确认',
+                handler:function(b){
+                    combo.setValue('ok');
+                    b.up('window').close();
+                }
+            }],
+            renderTo:this.ownerCmp.ownerCt.getEl()
+        }).show();
+
+    },
+
+    turnIn: function() {
+        var me = this,
+        form = me.getView(),
+        id = form.getForm().findField(form._idField);
+        form.BaseUtil.request({
+            url: form._turnInUrl+id.value,
+            method: 'GET',
+        })
+        .then(function(res) {
+            var localJson = new Ext.decode(res.responseText);
+            if(localJson.success){
+                Ext.Msg.alert('提示','转单成功');
+              
+            }
+        })
+        .catch(function() {
+            Ext.Msg.alert('提示','转单失败');
+        });
+     }
+});

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

@@ -0,0 +1,5 @@
+Ext.define('saas.view.purchase.purchase.FormPanelModel', {
+    extend: 'saas.view.core.form.FormPanelModel',
+    alias: 'viewmodel.money-paybalance-formpanel',
+
+});

+ 196 - 0
frontend/saas-web/app/view/money/payBalance/QueryPanel.js

@@ -0,0 +1,196 @@
+Ext.define('saas.view.purchase.purchase.QueryPanel', {
+    extend: 'saas.view.core.query.QueryPanel',
+    xtype: 'purchase-purchase-querypanel',
+
+    controller: 'purchase-purchase-querypanel',
+    viewModel: 'purchase-purchase-querypanel',
+
+    viewName: 'purchase-purchase-querypanel',
+    
+    queryFormItems: [{
+        xtype: 'hidden',
+        name: 'pu_id',
+        bind: '{pu_id}',
+        fieldLabel: 'ID',
+        allowBlank: true,
+        getCondition: function(value) {
+            return 'pu_id=' + value;
+        }
+    }, {
+        xtype: 'textfield',
+        name: 'pu_code',
+        bind: '{pu_code}',
+        fieldLabel: '单据编号'
+    }, {
+        xtype: 'condatefield',
+        name: 'pu_date',
+        bind: '{pu_date}',
+        fieldLabel: '采购日期',
+        columnWidth: 0.5,
+        operation: 'between'
+    }, {
+        xtype: 'dbfindtrigger',
+        name: 'pu_vendcode',
+        bind: '{pu_vendcode}',
+        fieldLabel: '供应商编号'
+    }, {
+        xtype: 'textfield',
+        name: 'pu_vendname',
+        bind: '{pu_vendname}',
+        fieldLabel: '供应商名称'
+    }, {
+        xtype: 'dbfindtrigger',
+        name: 'pd_prodcode',
+        bind: '{pd_prodcode}',
+        fieldLabel: '物料编号',
+        showDetail: true
+    }, {
+        xtype: 'textfield',
+        name: 'pr_detail',
+        bind: '{pr_detail}',
+        fieldLabel: '物料名称',
+        showDetail: true
+    }, {
+        xtype: 'combobox',
+        name: 'pu_statuscode',
+       // bind: '{pu_statuscode}',
+        fieldLabel: '审核状态',
+        queryMode: 'local',
+        displayField: 'pu_status',
+        valueField: 'pu_statuscode',
+        editable:false,
+        store: Ext.create('Ext.data.ArrayStore', {
+        fields: ['pu_statuscode', 'pu_status'],
+        data: [
+            ["$ALL", "全部"],
+            ["AUDITED", "已审核"],
+            ["UNAUDITED", "未审核"]
+        ]
+        })
+    }, {
+        xtype: 'multicombo',
+        name: 'pu_acceptstatuscode',
+        bind: '{pu_acceptstatuscode}',
+        fieldLabel: '入库状态',
+        datas: [
+            ["TURNIN", "已入库"],
+            ["UNTURNIN", "未入库"],
+            ["PARTIN", "部分入库"]
+        ]
+    }],
+    moreQueryFormItems: [{
+        xtype: 'textfield',
+        name: 'pu_buyername',
+        bind: '{pu_buyername}',
+        fieldLabel: '采购员'
+    }, {
+        xtype: 'textfield',
+        name: 'pu_total',
+        bind: '{pu_total}',
+        fieldLabel: '金额'
+    }, {
+        xtype: 'condatefield',
+        name: 'pu_delivery',
+        bind: '{pu_delivery}',
+        fieldLabel: '交货日期',
+        columnWidth: 1
+    }],
+    queryGridConfig: {
+        idField: 'pu_id',
+        codeField: 'pu_code',
+        addTitle: '采购单',
+        addXtype: 'purchase-purchase-formpanel',
+        defaultCondition:'',
+        baseVastUrl: 'http://192.168.253.58:8800/purchase/',
+        baseColumn: [{
+            text: '序号',
+            width: 80,
+            xtype: 'rownumberer'
+        }, {
+            text: 'id',
+            dataIndex: 'pu_id',
+            width: 100,
+            xtype: 'numbercolumn'
+        }, {
+            text: '单据编号',
+            dataIndex: 'pu_code',
+            width: 120
+        }, {
+            text: '单据状态',
+            dataIndex: 'pu_status',
+            width: 120
+        }, {
+            text: '下单日期',
+            dataIndex: 'pu_indate',
+            xtype: 'datecolumn',
+            width: 200
+        }, {
+            text: '供应商名称',
+            dataIndex: 'pu_vendname',
+            width: 120
+        }, {
+            text: '含税金额',
+            dataIndex: 'pu_taxtotal',
+            xtype: 'numbercolumn',
+            width: 120
+        }, {
+            text: '金额',
+            dataIndex: 'pu_total',
+            xtype: 'numbercolumn',
+            width: 120,
+            flex: 1
+        }],
+        relativeColumn: [{
+            text: '序号',
+            width: 80,
+            xtype: 'rownumberer'
+        }, {
+            text: 'id',
+            dataIndex: 'pu_id',
+            width: 100,
+            xtype: 'numbercolumn'
+        }, {
+            text: '单据编号',
+            dataIndex: 'pu_code',
+            width: 120
+        }, {
+            text: '单据状态',
+            dataIndex: 'pu_status',
+            width: 120
+        }, {
+            text: '下单日期',
+            dataIndex: 'pu_indate',
+            xtype: 'datecolumn',
+            width: 200
+        }, {
+            text: '供应商名称',
+            dataIndex: 'pu_vendname',
+            width: 120
+        }, {
+            text: '采购序号',
+            dataIndex: 'pd_detno',
+            xtype: 'numbercolumn',
+            width: 120
+        }, {
+            text: '物料编号',
+            dataIndex: 'pd_prodcode',
+            width: 120
+        }, {
+            text: '数量',
+            dataIndex: 'pd_qty',
+            xtype: 'numbercolumn',
+            width: 120
+        }, {
+            text: '单价',
+            dataIndex: 'pd_price',
+            xtype: 'numbercolumn',
+            width: 120
+        }, {
+            text: '已转数',
+            dataIndex: 'pd_ytqy',
+            xtype: 'numbercolumn',
+            width: 120,
+            flex: 1
+        }]
+    }
+});

+ 117 - 0
frontend/saas-web/app/view/money/payBalance/QueryPanelController.js

@@ -0,0 +1,117 @@
+Ext.define('saas.view.purchase.purchase.QueryPanelController', {
+    extend: 'saas.view.core.query.QueryPanelController',
+    alias: 'controller.purchase-purchase-querypanel',
+    
+    init: function (form) {
+        var me = this;
+        this.control({
+            //放大镜赋值关系 以及 tpl模板
+            'dbfindtrigger[name=pu_vendname]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        dataUrl:'http://192.168.253.41:9480/api/document/vendor/getVendorsByCondition',
+                        dbfinds:[{
+                            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=pd_prodcode]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        conditionCode:'pr_code',
+                        dataUrl:'http://192.168.253.41:9480/api/document/product/getProductsByCondition',
+                        dbfinds:[{
+                            from:'pr_code',to:'pd_prodcode',
+                        }, {
+                            from:'pr_detail',to:'pr_detail'
+                        }],
+                        dbtpls:[{
+                            field:'pr_code',width:100
+                        },{
+                            field:'pr_detail',width:100
+                        }],
+                        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
+                        }, {
+                            "text": "物料单位",
+                            "flex": 0,
+                            "dataIndex": "pr_unit",
+                            "width": 200,
+                            "xtype": "",
+                            "items": null
+                        }]
+                    }) ;   
+
+                }
+            }
+        });
+
+    }
+});

+ 5 - 0
frontend/saas-web/app/view/money/payBalance/QueryPanelModel.js

@@ -0,0 +1,5 @@
+Ext.define('saas.view.purchase.purchase.QueryPanelModel', {
+    extend: 'saas.view.core.query.QueryPanelModel',
+    alias: 'viewmodel.purchase-purchase-querypanel'
+
+});

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

@@ -15,7 +15,7 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
      _codeField: 'pu_code',
      _statusField: 'pu_status',
      _statusCodeField: 'pu_statuscode',
-     _detnoColumn:  'pd_detno',
+     
      _relationColumn: 'pd_puid',
      _readUrl:'http://192.168.0.181:8560/api/purchase/purchase/read/',
      _saveUrl:'http://192.168.0.181:8560/api/purchase/purchase/save',
@@ -114,6 +114,7 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
         name : "detailGridField", 
         xtype : "detailGridField", 
         storeModel:'saas.model.purchase.purchasedetail',
+        _detnoColumn:  'pd_detno',
         columns : [
             {
                 text : "序号", 

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

@@ -12,7 +12,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
     _codeField: 'pi_inoutno',
     _statusField: 'pi_status',
     _statusCodeField: 'pi_statuscode',
-    _detnoColumn:  'pd_pdno',
+    
     _relationColumn: 'pd_piid',
     _readUrl:'http://192.168.253.228:8800/prodinout/read/',
     _saveUrl:'http://192.168.253.228:8800/prodinout/save',
@@ -106,6 +106,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
         name : "detailGridField", 
         xtype : "detailGridField",
         storeModel:'saas.model.purchase.prodIODetail', 
+        _detnoColumn:  'pd_pdno',
         columns : [
             {
                 text : "序号", 

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

@@ -13,7 +13,7 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
     _codeField: 'pi_inoutno',
     _statusField: 'pi_status',
     _statusCodeField: 'pi_statuscode',
-    _detnoColumn:  'pd_pdno',
+    
     _relationColumn: 'pd_piid',
     _readUrl:'http://192.168.253.228:8800/prodinout/read/',
     _saveUrl:'http://192.168.253.228:8800/prodinout/save',
@@ -100,6 +100,7 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
     },{
         name : "detailGridField", 
         xtype : "detailGridField", 
+        _detnoColumn:  'pd_pdno',
         columns : [
             {
                 text : "序号", 

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

@@ -13,7 +13,7 @@ Ext.define('saas.view.sale.sale.FormPanel', {
      _codeField: 'sa_code',
      _statusField: 'sa_status',
      _statusCodeField: 'sa_statuscode',
-     _detnoColumn:  'sd_detno',
+     
      _relationColumn: 'sd_puid',
      _readUrl:'',
      _saveUrl:'',
@@ -114,6 +114,7 @@ Ext.define('saas.view.sale.sale.FormPanel', {
     ,{
         name : "detailGridField", 
         xtype : "detailGridField", 
+        _detnoColumn:  'sd_detno',
         columnWidth : 1,
         columns : [
             {

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

@@ -12,7 +12,7 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
     _codeField: 'pi_inoutno',
     _statusField: 'pi_status',
     _statusCodeField: 'pi_statuscode',
-    _detnoColumn:  'pd_pdno',
+    
     _relationColumn: 'pd_piid',
     _readUrl:'',
     _saveUrl:'',
@@ -105,6 +105,7 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
     }, {
         name : "detailGridField", 
         xtype : "detailGridField", 
+        _detnoColumn:  'pd_pdno',
         columns : [
             {
                 text : "序号", 

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

@@ -15,7 +15,7 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
     _codeField: 'pi_inoutno',
     _statusField: 'pi_status',
     _statusCodeField: 'pi_statuscode',
-    _detnoColumn:  'pd_pdno',
+    
     _relationColumn: 'pd_piid',
     _readUrl:'http://192.168.253.228:8800/prodinout/read/',
     _saveUrl:'http://192.168.253.228:8800/prodinout/save',
@@ -109,6 +109,7 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
     },{
         name : "detailGridField", 
         xtype : "detailGridField", 
+        _detnoColumn:  'pd_pdno',
         columns : [
             {
                 text : "序号", 

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

@@ -11,7 +11,7 @@ Ext.define('saas.view.stock.otherIn.FormPanel', {
      _codeField: 'pi_inoutno',
      _statusField: 'pi_status',
      _statusCodeField: 'pi_statuscode',
-     _detnoColumn:  'pd_pdno',
+     
      _relationColumn: 'pd_piid',
      _readUrl:'http://localhost:8800/purchase/read/',
      _saveUrl:'http://localhost:8800/purchase/save',
@@ -73,6 +73,7 @@ Ext.define('saas.view.stock.otherIn.FormPanel', {
     }, {
         name : "detailGridField", 
         xtype : "detailGridField", 
+        _detnoColumn:  'pd_pdno',
         columns : [
             {
                 text : "序号", 

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

@@ -11,7 +11,7 @@ Ext.define('saas.view.stock.otherOut.FormPanel', {
      _codeField: 'pi_inoutno',
      _statusField: 'pi_status',
      _statusCodeField: 'pi_statuscode',
-     _detnoColumn:  'pd_pdno',
+     
      _relationColumn: 'pd_piid',
      _readUrl:'http://localhost:8800/purchase/read/',
      _saveUrl:'http://localhost:8800/purchase/save',
@@ -69,6 +69,7 @@ Ext.define('saas.view.stock.otherOut.FormPanel', {
     }, {
         name : "detailGridField", 
         xtype : "detailGridField", 
+        _detnoColumn:  'pd_pdno',
         columns : [
             {
                 text : "序号", 

+ 10 - 0
pom.xml

@@ -291,6 +291,16 @@
                 <artifactId>storage-dto</artifactId>
                 <version>${project.release.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.usoftchina.saas</groupId>
+                <artifactId>sale-dto</artifactId>
+                <version>${project.release.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.usoftchina.saas</groupId>
+                <artifactId>sale-dto</artifactId>
+                <version>${project.release.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.usoftchina.saas</groupId>
                 <artifactId>test-starter</artifactId>

+ 7 - 2
script/mysql/init/account.sql

@@ -22,6 +22,7 @@ create table `ac_account` (
   email varchar(100) comment '邮箱',
   mobile varchar(100) not null comment '手机号',
   type int comment '账户类型 0, 1',
+  enabled bool comment '是否启用',
   creator_id int unsigned,
   create_time datetime,
   updater_id int unsigned,
@@ -71,12 +72,16 @@ create table `ac_role_resource` (
   resource_id int unsigned
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色绑定资源';
 
-insert into ac_account(id,username,password,salt,realname,email,mobile,type,
+insert into ac_account(id,username,password,salt,realname,email,mobile,type,enabled,
                        creator_id,create_time,updater_id,update_time)
 values (1,'18888888888','3e8451e274a8ee847872194e584a4145','18888888888','Administrator',
-          'admin@usoftchina.com', '18888888888', 0, 1, now(), 1, now());
+          'admin@usoftchina.com', '18888888888', 0, 1, 1, now(), 1, now());
 
 insert into ac_company(name, business_code, address, logo_url, creator_id, create_time, updater_id, update_time)
 values ('测试账套', '000000000000000000','深圳市南山区粤海街道高新技术产业园科技南五路英唐大厦六楼',
         'https://co-image.qichacha.com/CompanyImage/104eb3c232bbac93393a5e204d6a47d1.jpg?x-oss-process=style/qcc_cmp',
         1, now(), 1, now());
+
+insert into ac_account_company(account_id, company_id) values (1, 1);
+
+