Browse Source

销售模块

guq 7 years ago
parent
commit
4dbe663fca
24 changed files with 6138 additions and 1 deletions
  1. 29 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Status.java
  2. 4 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  3. 86 0
      applications/sale/pom.xml
  4. 15 0
      applications/sale/sale-dto/pom.xml
  5. 54 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleDTO.java
  6. 56 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleDetailDTO.java
  7. 36 0
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java
  8. 22 0
      applications/sale/sale-server/pom.xml
  9. 19 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/SaleApplication.java
  10. 166 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java
  11. 11 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleListMapper.java
  12. 43 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  13. 40 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaledetailMapper.java
  14. 53 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/Sale.java
  15. 53 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleDetail.java
  16. 1941 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleExample.java
  17. 105 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java
  18. 1651 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaledetailExample.java
  19. 43 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java
  20. 478 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  21. 63 0
      applications/sale/sale-server/src/main/resources/application.yml
  22. 132 0
      applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml
  23. 543 0
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  24. 495 0
      applications/sale/sale-server/src/main/resources/mapper/SaledetailMapper.xml

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

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

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

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

+ 86 - 0
applications/sale/pom.xml

@@ -10,7 +10,93 @@
     <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>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>sale-dto</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>document-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>auth-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>server-starter</artifactId>
+        </dependency>
 
+        <!--test-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+        </dependency>
+
+        <!-- db -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+        </dependency>
+        <!-- sleuth -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zipkin</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.amqp</groupId>
+            <artifactId>spring-rabbit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>net.logstash.logback</groupId>
+            <artifactId>logstash-logback-encoder</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
+        <!-- feign -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-dto</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
 </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 +
+                '}';
+    }
+}

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

@@ -0,0 +1,22 @@
+<?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>
+            <version>1.0.0-SNAPSHOT</version>
+        </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>