ソースを参照

联合丽格改版

zhijiezhao 2 年 前
コミット
d8e3d705d5
29 ファイル変更1024 行追加347 行削除
  1. 11 4
      pom.xml
  2. 2 2
      src/main/java/com/caimei/modules/config/SwaggerConfig.java
  3. 6 6
      src/main/java/com/caimei/modules/fastDFS/FastDFSClient.java
  4. 26 0
      src/main/java/com/caimei/modules/groupbuy/controller/GroupBuyController.java
  5. 13 0
      src/main/java/com/caimei/modules/groupbuy/dao/AdditionalRepository.java
  6. 9 0
      src/main/java/com/caimei/modules/groupbuy/dao/ProcureRepository.java
  7. 31 0
      src/main/java/com/caimei/modules/groupbuy/entity/AdditionalPo.java
  8. 61 0
      src/main/java/com/caimei/modules/groupbuy/entity/BuyerDto.java
  9. 50 0
      src/main/java/com/caimei/modules/groupbuy/entity/ProcurePo.java
  10. 99 0
      src/main/java/com/caimei/modules/groupbuy/service/AdditionalService.java
  11. 194 0
      src/main/java/com/caimei/modules/groupbuy/service/ProcureService.java
  12. 1 0
      src/main/java/com/caimei/modules/homepage/enity/ActiveImages.java
  13. 6 33
      src/main/java/com/caimei/modules/order/controller/OrderPayShopController.java
  14. 7 1
      src/main/java/com/caimei/modules/order/dao/PayShopDao.java
  15. 8 0
      src/main/java/com/caimei/modules/order/entity/CmReceiptOrderRelation.java
  16. 4 0
      src/main/java/com/caimei/modules/order/entity/OrderPayShop.java
  17. 5 1
      src/main/java/com/caimei/modules/order/entity/OrderPayShopDetail.java
  18. 22 0
      src/main/java/com/caimei/modules/order/entity/PayCheckDto.java
  19. 1 1
      src/main/java/com/caimei/modules/order/service/PayShopService.java
  20. 28 170
      src/main/java/com/caimei/modules/order/service/impl/PayShopServiceImpl.java
  21. 212 38
      src/main/java/com/caimei/modules/order/util/OrderUtils.java
  22. 60 10
      src/main/java/com/caimei/utils/ImageUploadUtils.java
  23. 6 0
      src/main/resources/config/beta/application-beta.yml
  24. 6 0
      src/main/resources/config/dev/application-dev.yml
  25. 5 0
      src/main/resources/config/prod/application-prod.yml
  26. 3 3
      src/main/resources/mapper/ActiveMapper.xml
  27. 1 0
      src/main/resources/mapper/CmDiscernReceiptMapper.xml
  28. 5 3
      src/main/resources/mapper/NewShopOrderMapper.xml
  29. 142 75
      src/main/resources/mapper/PayShopDao.xml

+ 11 - 4
pom.xml

@@ -42,6 +42,13 @@
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
 
+        <!-- mongo -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+            <version>2.4.3</version>
+        </dependency>
+
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-spring-boot-starter</artifactId>
@@ -121,10 +128,10 @@
             <artifactId>struts2-core</artifactId>
             <version>2.3.32</version>
             <!--<exclusions>spring-boot-starter-->
-                <!--<exclusion>-->
-                    <!--<groupId>javassist</groupId>-->
-                    <!--<artifactId>javassist</artifactId>-->
-                <!--</exclusion>-->
+            <!--<exclusion>-->
+            <!--<groupId>javassist</groupId>-->
+            <!--<artifactId>javassist</artifactId>-->
+            <!--</exclusion>-->
             <!--</exclusions>-->
         </dependency>
 

+ 2 - 2
src/main/java/com/caimei/modules/config/SwaggerConfig.java

@@ -32,9 +32,9 @@ public class SwaggerConfig {
 
     private ApiInfo apiInfo() {
         return new ApiInfoBuilder()
-                .title("Spring Boot中使用Swagger2构建RESTful APIs")
+                .title("后台api")
                 .description("rest api 文档构建利器")
-                .termsOfServiceUrl("https://blog.wuwii.com/")
+                .termsOfServiceUrl("https://www.baidu.com")
                 .version("1.0")
                 .build();
     }

+ 6 - 6
src/main/java/com/caimei/modules/fastDFS/FastDFSClient.java

@@ -22,24 +22,24 @@ public class FastDFSClient {
 
 
     // 文件上传
-    public String uploadFile(String path) throws FileNotFoundException{
+    public String uploadFile(String path) throws FileNotFoundException {
         File file = new File(path);
         InputStream input = new FileInputStream(file);
         long size = FileUtils.sizeOf(file);
         String name = file.getName();
-        String fileName = name.substring(name.lastIndexOf("/")+1);
-        StorePath storePath = storageClient.uploadFile(input,size, FilenameUtils.getExtension(fileName),null);
+        String fileName = name.substring(name.lastIndexOf("/") + 1);
+        StorePath storePath = storageClient.uploadFile(input, size, FilenameUtils.getExtension(fileName), null);
         return storePath.getFullPath();
     }
 
     // 文件下载
-    public boolean downloadFile(String path,String downloadFilePath) throws IOException{
+    public boolean downloadFile(String path, String downloadFilePath) throws IOException {
         File file = new File(downloadFilePath);
         FileOutputStream outputStream = null;
         // fastdfs 文件读取
-        String filepath = path.substring(path.lastIndexOf("group1/")+7);
+        String filepath = path.substring(path.lastIndexOf("group1/") + 7);
         DownloadByteArray callback = new DownloadByteArray();
-        byte[] content = storageClient.downloadFile("group1", filepath,callback);
+        byte[] content = storageClient.downloadFile("group1", filepath, callback);
         // 数据写入指定文件夹中
         outputStream = new FileOutputStream(file);
         outputStream.write(content);

+ 26 - 0
src/main/java/com/caimei/modules/groupbuy/controller/GroupBuyController.java

@@ -0,0 +1,26 @@
+package com.caimei.modules.groupbuy.controller;
+
+import com.caimei.modules.club.entity.Page;
+import com.caimei.modules.groupbuy.entity.BuyerDto;
+import com.caimei.modules.groupbuy.service.ProcureService;
+import com.caimei.utils.ResponseJson;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zzj
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/group/buy")
+public class GroupBuyController {
+
+    private final ProcureService procureService;
+
+    @PostMapping("/buy/list")
+    public ResponseJson<Page<BuyerDto>> saveTheme(@RequestBody BuyerDto dto,
+                                                  @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                  @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        return ResponseJson.success(procureService.findBuyListByPro(dto, pageNum, pageSize));
+    }
+}

+ 13 - 0
src/main/java/com/caimei/modules/groupbuy/dao/AdditionalRepository.java

@@ -0,0 +1,13 @@
+package com.caimei.modules.groupbuy.dao;
+
+import com.caimei.modules.groupbuy.entity.AdditionalPo;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2023/4/26
+ */
+public interface AdditionalRepository extends MongoRepository<AdditionalPo, String> {
+}

+ 9 - 0
src/main/java/com/caimei/modules/groupbuy/dao/ProcureRepository.java

@@ -0,0 +1,9 @@
+package com.caimei.modules.groupbuy.dao;
+
+
+import com.caimei.modules.groupbuy.entity.ProcurePo;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+
+public interface ProcureRepository extends MongoRepository<ProcurePo,String> {
+}

+ 31 - 0
src/main/java/com/caimei/modules/groupbuy/entity/AdditionalPo.java

@@ -0,0 +1,31 @@
+package com.caimei.modules.groupbuy.entity;
+
+import lombok.Data;
+import lombok.ToString;
+import nonapi.io.github.classgraph.json.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+
+@Document(collection = "additionalCollection")
+@ToString
+@Data
+public class AdditionalPo {
+    /**
+     * 参与集采id
+     */
+    @Id
+    private String id;
+    /**
+     * 集采Id
+     */
+    private String procureId;
+    /**
+     * 参与Id
+     */
+    private String additionalId;
+    /**
+     * 是否删除 0 未删除 其他删除
+     */
+    private String delFlag;
+
+}

+ 61 - 0
src/main/java/com/caimei/modules/groupbuy/entity/BuyerDto.java

@@ -0,0 +1,61 @@
+package com.caimei.modules.groupbuy.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import nonapi.io.github.classgraph.json.Id;
+
+/**
+ * @author zzj
+ */
+@ApiModel("集采对象实体")
+@Data
+public class BuyerDto {
+
+    @ApiModelProperty("id")
+    private String id;
+
+    @ApiModelProperty("发布人userId")
+    private String userId;
+
+    @ApiModelProperty("商品图片")
+    private String productImage;
+
+    @ApiModelProperty("商品名称")
+    private String productName;
+
+    @ApiModelProperty("期望单价")
+    private String price;
+
+    @ApiModelProperty("购买数量")
+    private String number;
+
+    @ApiModelProperty("创建时间")
+    private String saveTime;
+
+    @ApiModelProperty("创建人Id")
+    private String createUserId;
+
+    @ApiModelProperty("是否实现 0 以实现 1 未实现")
+    private String isAchieve;
+
+    @ApiModelProperty("是否删除 0 未删除 其他删除")
+    private String delFlag;
+
+    @ApiModelProperty("机构名称")
+    private String clubName;
+
+
+
+    @ApiModelProperty("参与机构数")
+    private Integer clubCount;
+
+    @ApiModelProperty("查询字段:创建起始时间")
+    private String startSaveTime;
+
+    @ApiModelProperty("查询字段:创建终止时间")
+    private String endSaveTime;
+
+    @ApiModelProperty("查询字段:需求状态 1未完成 2已完成 3已删除")
+    private Integer status;
+}

+ 50 - 0
src/main/java/com/caimei/modules/groupbuy/entity/ProcurePo.java

@@ -0,0 +1,50 @@
+package com.caimei.modules.groupbuy.entity;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+import nonapi.io.github.classgraph.json.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+
+@Document(collection = "procureCollection")
+@Data
+@ToString
+public class ProcurePo {
+    /**
+     * id
+     */
+    @Id
+    private String id;
+
+    @ApiModelProperty("发布人userId")
+    private String userId;
+
+    @ApiModelProperty("商品图片")
+    private String productImage;
+
+    @ApiModelProperty("商品名称")
+    private String productName;
+
+    @ApiModelProperty("期望单价")
+    private String price;
+
+    @ApiModelProperty("购买数量")
+    private String number;
+
+    @ApiModelProperty("创建时间")
+    private String saveTime;
+
+    @ApiModelProperty("创建人Id")
+    private String createUserId;
+
+    @ApiModelProperty("是否实现 0 以实现 1 未实现")
+    private String isAchieve;
+
+    @ApiModelProperty("是否删除 0 未删除 其他删除")
+    private String delFlag;
+
+    @ApiModelProperty("机构名称")
+    private String clubName;
+}

+ 99 - 0
src/main/java/com/caimei/modules/groupbuy/service/AdditionalService.java

@@ -0,0 +1,99 @@
+package com.caimei.modules.groupbuy.service;
+
+import com.caimei.modules.groupbuy.dao.AdditionalRepository;
+import com.caimei.modules.groupbuy.entity.AdditionalPo;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+
+@Service
+public class AdditionalService {
+
+    @Resource
+    private AdditionalRepository additionalRepository;
+    @Resource
+    private MongoTemplate mongoTemplate;
+
+    /**
+     * 保存
+     *
+     * @param additional
+     */
+    public void save(AdditionalPo additional) {
+        //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键
+        //设置一些默认初始值。。。
+        //调用dao
+        additionalRepository.save(additional);
+    }
+
+    /**
+     * 修改
+     *
+     * @param additional
+     */
+    public void update(AdditionalPo additional) {
+        //调用dao
+        additionalRepository.save(additional);
+    }
+
+    /**
+     * 根据id删除
+     *
+     * @param id
+     */
+    public void deleteById(String id) {
+        //调用dao
+        additionalRepository.deleteById(id);
+    }
+
+    /**
+     * 根据条件删除
+     *
+     * @param additional
+     */
+    public void deleteByParams(AdditionalPo additional) {
+        //调用dao
+        additionalRepository.delete(additional);
+    }
+
+    /**
+     * 查询所有
+     *
+     * @return
+     */
+    public List<AdditionalPo> findList() {
+        //调用dao
+        return additionalRepository.findAll();
+    }
+
+    /**
+     * 根据id查询
+     *
+     * @param id
+     * @return
+     */
+    public AdditionalPo findById(String id) {
+        //调用dao
+        return additionalRepository.findById(id).get();
+    }
+
+    /**
+     * 根据主集采Id查询
+     *
+     * @param procureId
+     * @return
+     */
+    public List<AdditionalPo> findProcureById(String procureId) {
+        //调用dao
+        Query query = new Query();
+        query.addCriteria(Criteria.where("procureId").is(procureId));
+        query.addCriteria(Criteria.where("delFlag").is("0"));
+        return mongoTemplate.find(query, AdditionalPo.class);
+    }
+
+}

+ 194 - 0
src/main/java/com/caimei/modules/groupbuy/service/ProcureService.java

@@ -0,0 +1,194 @@
+package com.caimei.modules.groupbuy.service;
+
+
+import com.caimei.modules.club.entity.Page;
+import com.caimei.modules.groupbuy.dao.ProcureRepository;
+import com.caimei.modules.groupbuy.entity.AdditionalPo;
+import com.caimei.modules.groupbuy.entity.BuyerDto;
+import com.caimei.modules.groupbuy.entity.ProcurePo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+@Service
+public class ProcureService {
+
+    @Resource
+    private ProcureRepository procureRepository;
+    @Resource
+    private MongoTemplate mongoTemplate;
+
+
+    /**
+     * 保存
+     *
+     * @param procure
+     */
+    public void save(ProcurePo procure) {
+        //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键
+        //设置一些默认初始值。。。
+        //调用dao
+        procureRepository.save(procure);
+    }
+
+    /**
+     * 修改
+     *
+     * @param procure
+     */
+    public void update(ProcurePo procure) {
+        //调用dao
+        procureRepository.save(procure);
+    }
+
+    /**
+     * 根据id删除
+     *
+     * @param id
+     */
+    public void deleteById(String id) {
+        //调用dao
+        procureRepository.deleteById(id);
+    }
+
+    /**
+     * 查询所有集采
+     *
+     * @return
+     */
+    public Page<ProcurePo> findList(int pageNo, int pageSize) {
+        //调用dao
+        Pageable pageable = PageRequest.of(pageNo, pageSize);
+        Query query = new Query();
+        query.addCriteria(Criteria.where("delFlag").is("0"));
+        query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
+        List<ProcurePo> procurePos = mongoTemplate.find(query.with(pageable), ProcurePo.class);
+        long count = mongoTemplate.count(query, ProcurePo.class);
+        PageImpl<ProcurePo> page = new PageImpl<>(procurePos, pageable, count);
+        return pageCopy(page, pageNo, pageSize, procurePos);
+    }
+
+    /**
+     * 根据id查询
+     *
+     * @param id
+     * @return
+     */
+    public ProcurePo findById(String id) {
+        //调用dao
+        return procureRepository.findById(id).get();
+    }
+
+    /**
+     * 我参与的集采
+     *
+     * @param userId
+     * @return
+     */
+    public List<ProcurePo> findInvolvedList(Integer userId) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("userId").is(userId));
+        query.addCriteria(Criteria.where("createUserId").not().is(userId));
+        query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
+        query.with(Sort.by(Sort.Direction.DESC, "isAchieve"));
+        List<ProcurePo> procureList = mongoTemplate.find(query, ProcurePo.class);
+        procureList.forEach(p -> {
+
+        });
+        return mongoTemplate.find(query, ProcurePo.class);
+    }
+
+    /**
+     * 我发起的集采
+     *
+     * @param userId
+     * @return
+     */
+    public List<ProcurePo> findUserList(Integer userId) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("createUserId").is(userId));
+        query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
+        query.with(Sort.by(Sort.Direction.DESC, "isAchieve"));
+        return mongoTemplate.find(query, ProcurePo.class);
+    }
+
+    public ProcurePo editData(Integer id, Integer userId) {
+        Query query = new Query();
+        query.addCriteria(Criteria.where("id").is(id));
+        query.addCriteria(Criteria.where("userId").is(userId));
+        return mongoTemplate.find(query, ProcurePo.class).get(0);
+    }
+
+    public Page<BuyerDto> findBuyListByPro(BuyerDto dto, Integer pageNum, Integer pageSize) {
+        Pageable pageable = PageRequest.of(pageNum, pageSize);
+        Query query = new Query();
+        Criteria criteria = setCriteriaVal(dto);
+        query.addCriteria(criteria).with(Sort.by(Sort.Direction.DESC, "saveTime")).with(pageable);
+        List<ProcurePo> procurePos = mongoTemplate.find(query, ProcurePo.class);
+        List<BuyerDto> buyerDtos = new ArrayList<>();
+        procurePos.forEach(p -> {
+            BuyerDto buyerDto = new BuyerDto();
+            int count = (int) mongoTemplate.count(Query.query(Criteria.where("procureId").is(p.getId())), AdditionalPo.class);
+            buyerDto.setClubCount(count);
+            BeanUtils.copyProperties(p, buyerDto);
+            buyerDtos.add(buyerDto);
+        });
+        long count = mongoTemplate.count(query, ProcurePo.class);
+        PageImpl<ProcurePo> page = new PageImpl<>(procurePos, pageable, count);
+        Page<ProcurePo> procurePoPage = pageCopy(page, pageNum, pageSize, procurePos);
+        procurePoPage.setResults(buyerDtos);
+        return null;
+    }
+
+    public Page<ProcurePo> pageCopy(PageImpl<ProcurePo> page, Integer pageNum, Integer pageSize, List<ProcurePo> procurePos) {
+        Page<ProcurePo> result = new Page<ProcurePo>();
+        result.setTotalPage(page.getTotalPages());
+        result.setPageSize(page.getSize());
+        result.setHasNextPage(page.hasNext());
+        result.setHasPreviousPage(page.hasPrevious());
+        result.setIndex(pageNum);
+        result.setPageSize(pageSize);
+        result.setResults(procurePos);
+        return result;
+    }
+
+
+    public Criteria setCriteriaVal(BuyerDto dto) {
+        Criteria criteria = new Criteria();
+        if (StringUtils.isNotBlank(dto.getClubName())) {
+            Pattern pattern = Pattern.compile("^.*" + dto.getClubName() + ".*$", Pattern.CASE_INSENSITIVE);
+            criteria.andOperator(Criteria.where("clubName").regex(pattern));
+        }
+        if (StringUtils.isNotBlank(dto.getProductName())) {
+            Pattern pattern = Pattern.compile("^.*" + dto.getProductName() + ".*$", Pattern.CASE_INSENSITIVE);
+            criteria.andOperator(Criteria.where("productName").regex(pattern));
+        }
+        if (null != dto.getStatus()) {
+            if (3 == dto.getStatus()) {
+                criteria.andOperator(Criteria.where("delFlag").is("1"));
+            } else {
+                criteria.andOperator(Criteria.where("isAchieve").is(dto.getStatus().toString()));
+            }
+        }
+        if (StringUtils.isNotBlank(dto.getStartSaveTime())) {
+            criteria.andOperator(Criteria.where("saveTime").gte(dto.getStartSaveTime());
+        }
+        if (StringUtils.isNotBlank(dto.getEndSaveTime())) {
+            criteria.andOperator(Criteria.where("saveTime")).lte(dto.getEndSaveTime());
+        }
+        return criteria;
+    }
+}

+ 1 - 0
src/main/java/com/caimei/modules/homepage/enity/ActiveImages.java

@@ -15,5 +15,6 @@ public class ActiveImages implements Serializable {
     private Integer id;
     private Integer activeId;
     private String image;
+    private String topic;
     private List<BackProduct> products;
 }

+ 6 - 33
src/main/java/com/caimei/modules/order/controller/OrderPayShopController.java

@@ -87,33 +87,12 @@ public class OrderPayShopController {
     }
 
     @ApiOperation("审核付款单")
-    @ApiImplicitParams({
-            @ApiImplicitParam(required = true, name = "id", value = "付款单Id"),
-            @ApiImplicitParam(required = true, name = "payType", value = "付款方式"),
-            @ApiImplicitParam(required = true, name = "passCode", value = "1审核通过/2审核不通过")
-    })
-    @GetMapping("/pay/check/{id}/{payType}/{passCode}")
-    public ResponseJson checkPass(@PathVariable("id") Integer id,
-                                  @PathVariable("payType") Integer payType,
-                                  @PathVariable("passCode") Integer passCode) throws Exception {
-        return payShopService.checkPass(id, payType, passCode);
+    @PostMapping("/pay/check")
+    public ResponseJson checkPass(@RequestBody PayCheckDto checkDto) throws Exception {
+        return payShopService.checkPass(checkDto.getId(), checkDto.getPayType(), checkDto.getPassCode(), checkDto.getReason());
     }
 
     @ApiOperation("付款申请/重申付款")
-    @ApiImplicitParams({
-            @ApiImplicitParam(required = false, name = "payShopId", value = "付款单Id"),
-            @ApiImplicitParam(required = true, name = "name", value = "付款单名称"),
-            @ApiImplicitParam(required = true, name = "bankAccount", value = "付款帐号"),
-            @ApiImplicitParam(required = true, name = "bankName", value = "付款帐号的开户行"),
-            @ApiImplicitParam(required = true, name = "bankAccountName", value = "户名"),
-            @ApiImplicitParam(required = true, name = "cmBankAccount", value = "付采美帐号"),
-            @ApiImplicitParam(required = true, name = "cmBankName", value = "付采美账号的开户行"),
-            @ApiImplicitParam(required = true, name = "cmBankAccountName", value = "付采美账号的户名"),
-            @ApiImplicitParam(required = true, name = "type", value = "付款账号的类型 0公账, 1私账"),
-            @ApiImplicitParam(required = true, name = "cmType", value = "付采美账号的类型 0公账, 1私账"),
-            @ApiImplicitParam(required = true, name = "waitPayCmAmount", value = "待付采美"),
-            @ApiImplicitParam(required = true, name = "waitPayShop", value = "待付供应商")
-    })
     @PostMapping("/pay/apply")
     public ResponseJson<Integer> applyPay(@RequestBody OrderPayShopDetail payShop) throws Exception {
         return payShopService.applyPay(payShop);
@@ -121,24 +100,19 @@ public class OrderPayShopController {
 
     @ApiOperation("取消付款单")
     @ApiImplicitParam(required = true, name = "id", value = "付款单Id")
-    @GetMapping("/pay/cancel/{id}/{status}")
+    @GetMapping("/pay/cancel/{id}")
     public ResponseJson cancelPay(@PathVariable("id") Integer id) {
         return payShopService.cancelPay(id);
     }
 
     @ApiOperation("申请分账")
-    @ApiImplicitParam(name = "shopOrderIds", value = "子订单IdList", required = true, allowMultiple = true, dataType = "int", paramType = "query")
+    @ApiImplicitParam(name = "shopOrderIds", value = "子订单IdList", required = true, allowMultiple = true)
     @PostMapping("/pay/split")
     public ResponseJson splitShopOrders(@RequestBody List<Integer> shopOrderIds) {
         return payShopService.splitShopOrders(shopOrderIds);
     }
 
     @ApiOperation("申请结算")
-    @ApiImplicitParams({
-            @ApiImplicitParam(required = true, name = "splitCode", value = "分帐号"),
-            @ApiImplicitParam(required = true, name = "waitPayCmAmount", value = "待付采美"),
-            @ApiImplicitParam(required = true, name = "waitPayShop", value = "待付供应商")
-    })
     @PostMapping("/pay/settle")
     public ResponseJson settleShopOrders(@RequestBody OrderPayShopDetail payShop) {
         return payShopService.settleShopOrders(payShop);
@@ -146,11 +120,10 @@ public class OrderPayShopController {
 
     @ApiOperation("订单财务信息列表")
     @ApiImplicitParams({
-            @ApiImplicitParam(required = true, name = "organizeId", value = "组织Id"),
             @ApiImplicitParam(required = true, name = "pageNum", value = "当前页码"),
             @ApiImplicitParam(required = true, name = "pageSize", value = "每页大小")
     })
-    @GetMapping
+    @PostMapping
     public ResponseJson<PageInfo<NewOrder>> orderPayInfoList(@RequestBody OrderPayShop orderPayShop,
                                                              @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                              @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {

+ 7 - 1
src/main/java/com/caimei/modules/order/dao/PayShopDao.java

@@ -57,7 +57,7 @@ public interface PayShopDao {
 
     void updateShopOrderSettleStatus(Integer shopOrderId, int i);
 
-    List<CmReceiptOrderRelation> findOrderRelations(Integer shopOrderId);
+    List<CmReceiptOrderRelation> findOrderRelations(Integer orderId);
 
     Double findTotalAmount(Integer shopOrderId);
 
@@ -66,4 +66,10 @@ public interface PayShopDao {
     String findSplitCode(Integer shopOrderId);
 
     List<NewShopOrder> findPayShopOrderByShopOrderIds(List<Integer> shopOrderIds);
+
+    void updateCmShopAccount(String cmBankAccount, String cmBankAccountName, String cmBankName);
+
+    void deletePayShop(Integer id);
+
+    Double findOnlinePayCm(Integer shopOrderId, Integer status);
 }

+ 8 - 0
src/main/java/com/caimei/modules/order/entity/CmReceiptOrderRelation.java

@@ -66,4 +66,12 @@ public class CmReceiptOrderRelation implements Serializable {
      * 分账状态:0待分账,1已分账(只针对线上支付)
      */
     private Integer splitStatus;
+    /**
+     * 用户付款方式:1线上,2线下,3余额抵扣
+     */
+    private Integer payWay;
+    /**
+     * 收款金额
+     */
+    private Double receiptAmount;
 }

+ 4 - 0
src/main/java/com/caimei/modules/order/entity/OrderPayShop.java

@@ -56,6 +56,10 @@ public class OrderPayShop implements Serializable {
     private String orderNo;
     @ApiModelProperty("付款金额")
     private Double totalAmount;
+    @ApiModelProperty("付款银行id")
+    private Integer payType;
+    @ApiModelProperty("删除标记 0未删除,其他删除")
+    private Integer delFlag;
 
     @ApiModelProperty("查询字段:申请起始时间")
     private String applyStartTime;

+ 5 - 1
src/main/java/com/caimei/modules/order/entity/OrderPayShopDetail.java

@@ -17,6 +17,9 @@ public class OrderPayShopDetail implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty("其他不传,1编辑付款单")
+    private Integer operateMode;
+
     @ApiModelProperty("供应商付款账号的户名")
     private String bankAccountName;
     @ApiModelProperty("供应商付款账号")
@@ -74,5 +77,6 @@ public class OrderPayShopDetail implements Serializable {
     private String reason;
     @ApiModelProperty("付款单关联的子订单")
     private List<NewShopOrder> shopOrders;
-
+    @ApiModelProperty("删除标记 0未删除,其他删除")
+    private Integer delFlag;
 }

+ 22 - 0
src/main/java/com/caimei/modules/order/entity/PayCheckDto.java

@@ -0,0 +1,22 @@
+package com.caimei.modules.order.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zzj
+ */
+@ApiModel("付款审核对象")
+@Data
+public class PayCheckDto {
+
+    @ApiModelProperty("付款单Id")
+    private Integer id;
+    @ApiModelProperty("付款方式")
+    private Integer payType;
+    @ApiModelProperty("1审核通过/2审核不通过")
+    private Integer passCode;
+    @ApiModelProperty("审核不通过原因")
+    private String reason;
+}

+ 1 - 1
src/main/java/com/caimei/modules/order/service/PayShopService.java

@@ -18,7 +18,7 @@ public interface PayShopService {
 
     OrderPayShopDetail getPayShopDetail(Integer id);
 
-    ResponseJson checkPass(Integer id, Integer payType, Integer passCode) throws Exception;
+    ResponseJson checkPass(Integer id, Integer payType, Integer passCode,String reason) throws Exception;
 
     ResponseJson<Integer> applyPay(OrderPayShopDetail payShop) throws Exception;
 

+ 28 - 170
src/main/java/com/caimei/modules/order/service/impl/PayShopServiceImpl.java

@@ -1,7 +1,5 @@
 package com.caimei.modules.order.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.caimei.modules.order.constant.Constant;
 import com.caimei.modules.order.dao.NewOrderDao;
 import com.caimei.modules.order.dao.NewShopOrderDao;
@@ -11,28 +9,19 @@ import com.caimei.modules.order.service.PayShopService;
 import com.caimei.modules.order.util.OrderUtils;
 import com.caimei.modules.shiro.entity.CmMallAdminUser;
 import com.caimei.utils.*;
-import com.caimei.utils.payUtil.MyBeanUtils;
-import com.caimei.utils.payUtil.RSA;
-import com.caimei.utils.payUtil.SettlePostFormUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
-import okhttp3.*;
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.io.IOException;
-import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
 
 
 /**
@@ -42,12 +31,6 @@ import java.util.stream.Collectors;
 @Service
 public class PayShopServiceImpl implements PayShopService {
 
-    public static OkHttpClient client = new OkHttpClient.Builder()
-            .connectTimeout(3, TimeUnit.SECONDS)
-            .readTimeout(20, TimeUnit.SECONDS)
-            .build();
-
-
     @Resource
     private RedisService redisService;
     @Resource
@@ -76,22 +59,20 @@ public class PayShopServiceImpl implements PayShopService {
     public OrderPayShopDetail getPayShopDetail(Integer id) {
         OrderPayShopDetail detail = payShopDao.findPayShopDetail(id);
         List<NewShopOrder> shopOrders = payShopDao.findPayShopOrders(detail.getPayShopId());
-        shopOrders.forEach(s -> {
-            s.setShopOrderNos(payShopDao.findShopOrderNos(s.getOrderId()));
-            s.setNewOrderProducts(payShopDao.findPayOrderProducts(s.getShopOrderId()));
-        });
+        shopOrders.forEach(s -> orderUtils.getShouldPay(s));
         detail.setShopOrders(shopOrders);
         return detail;
     }
 
     @Transactional(readOnly = false, rollbackFor = Exception.class)
     @Override
-    public ResponseJson checkPass(Integer id, Integer payType, Integer passCode) throws Exception {
+    public ResponseJson checkPass(Integer id, Integer payType, Integer passCode, String reason) throws Exception {
         OrderPayShop orderPayShop = new OrderPayShop();
         CmMallAdminUser user = (CmMallAdminUser) SecurityUtils.getSubject().getPrincipal();
         orderPayShop.setReviewer(user.getId());
         orderPayShop.setReviewTime(DateUtils.getDateTime());
         orderPayShop.setPayShopId(id);
+        orderPayShop.setReason(reason);
         if (1 == passCode) {
             // 通过审核
             List<OrderPayShopRecord> records = payShopDao.findPayShopRecords(id);
@@ -99,7 +80,7 @@ public class PayShopServiceImpl implements PayShopService {
             //修改每一条子订单的已付款金额
             for (OrderPayShopRecord record : records) {
                 NewShopOrder shopOrder = newShopOrderDao.get(record.getShopOrderId());
-
+                orderUtils.getShouldPay(shopOrder);
                 // 本次付款金额 + 付采美 + 原来已经付过的金额
                 BigDecimal payedFee = MathUtil.add(MathUtil.add(record.getPayAmount(), record.getPayAmount()), shopOrder.getPayedShopAmount());
                 // 总共要付的金额
@@ -158,6 +139,7 @@ public class PayShopServiceImpl implements PayShopService {
             payShopDao.insertPayShop(payShop);
 
             payShopDao.updateShopAccount(payShop.getShopId(), payShop.getBankAccount(), payShop.getBankAccountName(), payShop.getBankName());
+            payShopDao.updateCmShopAccount(payShop.getCmBankAccount(), payShop.getCmBankAccountName(), payShop.getCmBankName());
             shopOrders.forEach(s -> {
                 OrderPayShopRecord record = new OrderPayShopRecord();
                 record.setShopId(payShop.getShopId());
@@ -175,23 +157,25 @@ public class PayShopServiceImpl implements PayShopService {
             // 运费付款单作用不明,暂时取消生成
 
         } else {
-            //修改
-            if (1 == payShop.getStatus()) {
-                throw new Exception("该付款单已被审核,无需再申请付款");
-            }
-            if (2 == payShop.getStatus()) {
-                //付款记录 修改状态
-                payShopDao.updatePayRecordById(2, payShop.getPayShopId());
-                //子订单退出付款状态
-                newShopOrderDao.inPaying(payShop.getPayShopId());
-                payShop.setReviewer(null);
-                payShop.setReviewTime(null);
-                payShop.setReason(null);
-                payShop.setStatus(0);
+            if (null == payShop.getOperateMode()) {
+                //修改
+                if (1 == payShop.getStatus()) {
+                    return ResponseJson.error("该付款单已被审核,无需再申请付款");
+                }
+                if (2 == payShop.getStatus()) {
+                    //付款记录 修改状态
+                    payShopDao.updatePayRecordById(2, payShop.getPayShopId());
+                    //子订单退出付款状态
+                    newShopOrderDao.inPaying(payShop.getPayShopId());
+                    payShop.setReviewer(null);
+                    payShop.setReviewTime(null);
+                    payShop.setReason(null);
+                    payShop.setStatus(0);
+                }
+                shopOrders.forEach(s -> {
+                    payShopDao.updateRecordById(s.getShopOrderId(), s.getWaitPayShop(), s.getWaitPayCmAmount(), payShop.getPayShopId());
+                });
             }
-            shopOrders.forEach(s -> {
-                payShopDao.updateRecordById(s.getShopOrderId(), s.getWaitPayShop(), s.getWaitPayCmAmount(), payShop.getPayShopId());
-            });
             payShopDao.updatePayShopDetail(payShop);
         }
         return ResponseJson.success(payShop.getPayShopId());
@@ -206,6 +190,7 @@ public class PayShopServiceImpl implements PayShopService {
         }
         newShopOrderDao.outPaying(id);
         payShopDao.deleteRecords(id);
+        payShopDao.deletePayShop(id);
         return ResponseJson.success();
     }
 
@@ -347,66 +332,7 @@ public class PayShopServiceImpl implements PayShopService {
                      */
                     splitBillDetail.removeIf(sp -> sp.getSubUserNo().equals(shopOrder.getSplitCode()));
                     if (null != splitBillRules && splitBillRules.size() > 0) {
-                        //第三方分账接口
-                        try {
-                            AccountPayOrder accountPayOrder = new AccountPayOrder();
-                            accountPayOrder.setP1_bizType("AccountPaySub");
-                            accountPayOrder.setP2_signType("MD5");
-                            String format1 = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS").format(new Date());
-                            accountPayOrder.setP3_timestamp(format1);
-                            String substring = format1.substring(20);
-                            // fz+当前微秒时间+原唯一订单号
-                            accountPayOrder.setP4_orderId("FZ" + substring + orderRelation.getOrderRequestNo());
-                            //付款账户子订单绑定商户号
-                            accountPayOrder.setP5_customerNumber(shopOrder.getSplitCode());
-                            AccountPayOrder.AccountPayOrderExt accountPayOrderExt = new AccountPayOrder.AccountPayOrderExt();
-                            //收款账户商编  填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
-                            //accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
-                            //accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
-                            accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
-                            accountPayOrderExt.setServerCallbackUrl(Constant.prodSplit);
-                            accountPayOrderExt.setGoodsName("分账");
-                            if (null != splitBillRules && splitBillRules.size() > 0) {
-                                accountPayOrderExt.setSplitBillRules(splitBillRules);
-                            }
-                            String ext = JSON.toJSONString(accountPayOrderExt);
-                            log.info("分账规则串json串:" + ext);
-                            accountPayOrder.setP6_ext(ext);
-                            // 生成签名
-                            StringBuilder builder = new StringBuilder();
-                            builder.append(Constant.SPLIT)
-                                    .append(accountPayOrder.getP1_bizType()).append(Constant.SPLIT)
-                                    .append(accountPayOrder.getP2_signType()).append(Constant.SPLIT)
-                                    .append(accountPayOrder.getP3_timestamp()).append(Constant.SPLIT)
-                                    .append(accountPayOrder.getP4_orderId()).append(Constant.SPLIT)
-                                    .append(accountPayOrder.getP5_customerNumber()).append(Constant.SPLIT)
-                                    .append(accountPayOrder.getP6_ext()).append(Constant.SPLIT)
-                                    .append(Constant.XUNI);
-                            String sign = Disguiser.disguiseMD5(builder.toString().trim());
-                            Map<String, String> bean = convertBean(accountPayOrder);
-                            log.info("--------------------> 发送分账参数:  " + bean);
-                            Map<String, String> map = postForm(bean, Constant.FZ, sign, Map.class);
-                            log.info("----------------分账返回数据: " + map.toString());
-                            if (map != null) {
-                                String code = map.get("rt5_retCode");
-                                if (!"0000".equals(code)) {
-                                    String msg = map.get("rt6_retMsg");
-                                    log.info("【手动分账】>>>>>>>>>>手动分账失败>>>>>>>msg:" + msg);
-                                } else {
-                                    for (SplitAccountPo splitAccount : splitBillDetail) {
-                                        splitAccount.setMbOrderId(orderRelation.getMbOrderId());
-                                        splitAccount.setOrderRequestNo(orderRelation.getOrderRequestNo());
-                                        splitAccount.setPayStatus(1);
-                                        // 保存分账详情
-                                        newOrderDao.insertSplitAccount(splitAccount);
-                                    }
-                                    redisService.remove("XSFZMDS");
-                                    log.info("【手动分账】>>>>>>>>>>此订单分账结束");
-                                }
-                            }
-                        } catch (Exception e) {
-                            log.error("【手动分账】>>>>>>>>>>错误信息", e);
-                        }
+                        orderUtils.splitAccount(splitBillRules, orderRelation.getOrderRequestNo(), orderRelation.getMbOrderId(), shopOrder, splitBillDetail);
                     } else {
                         // 没有佣金分账,全是成本,本笔交易已分帐
                         newOrderDao.updateBySplitStatus(orderRelation.getMbOrderId());
@@ -452,10 +378,7 @@ public class PayShopServiceImpl implements PayShopService {
     public OrderPayShopDetail applyPayList(List<Integer> shopOrderIds) {
         OrderPayShopDetail detail = new OrderPayShopDetail();
         List<NewShopOrder> shopOrders = payShopDao.findPayShopOrderByShopOrderIds(shopOrderIds);
-        shopOrders.forEach(s -> {
-            s.setShopOrderNos(payShopDao.findShopOrderNos(s.getOrderId()));
-            s.setNewOrderProducts(payShopDao.findPayOrderProducts(s.getShopOrderId()));
-        });
+        shopOrders.forEach(s -> orderUtils.getShouldPay(s));
         detail.setShopId(shopOrders.get(0).getShopId());
         detail.setShopName(shopOrders.get(0).getShopName());
         detail.setShopOrders(shopOrders);
@@ -466,7 +389,8 @@ public class PayShopServiceImpl implements PayShopService {
     public ResponseJson<PageInfo<NewOrder>> orderPayInfoList(OrderPayShop orderPayShop, Integer pageNum, Integer pageSize) {
         PageHelper.startPage(pageNum, pageSize);
         List<NewOrder> orderList = newOrderDao.findListByPayShop(orderPayShop);
-        return null;
+        orderUtils.setOrderListValue(orderList);
+        return ResponseJson.success(new PageInfo<NewOrder>(orderList));
     }
 
     public void setSplitAccountDetail(NewShopOrder shopOrder, PayParamBo payParam, List<SplitAccountPo> list) {
@@ -564,70 +488,4 @@ public class PayShopServiceImpl implements PayShopService {
         }
     }
 
-
-    public Map<String, String> convertBean(Object bean) {
-        Class clazz = bean.getClass();
-        Field[] fields = clazz.getDeclaredFields();
-        for (Field f : fields) {
-            f.setAccessible(true);
-        }
-        try {
-            Map<String, String> retMap = new LinkedHashMap<>();
-            for (Field f : fields) {
-                String key = f.toString().substring(f.toString().lastIndexOf(".") + 1);
-                Object value = f.get(bean);
-                if (value == null) {
-                    value = "";
-                }
-                retMap.put(key, (String) value);
-            }
-            return retMap;
-        } catch (Exception e) {
-            log.info("分账", e);
-            throw new IllegalStateException("分账异常", e);
-        }
-    }
-
-    public <T> T postForm(Map<String, String> params, String url, String sign, Class<T> clazz) {
-        FormBody.Builder builder = new FormBody.Builder();
-        for (Map.Entry<String, String> entry : params.entrySet()) {
-            builder.add(entry.getKey(), entry.getValue());
-        }
-        builder.add("sign", sign);
-
-        Request request = new Request.Builder() // okHttp post
-                .url(url)
-                .post(builder.build())
-                .build();
-
-        Response response = null;
-        try {
-            response = client.newCall(request).execute();
-        } catch (IOException e) {
-            throw new IllegalStateException("请求出错", e);
-        }
-        if (!response.isSuccessful()) {
-            try {
-                log.info(response.body().string());
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-            throw new RuntimeException("请求失败了: http response code: " + response.code());
-        }
-
-        ResponseBody body = response.body();
-        String content = null;
-        try {
-            content = body.string();
-        } catch (IOException e) {
-            throw new IllegalStateException("IO异常", e);
-        }
-        JSONObject res = JSON.parseObject(content);
-        if (!res.getBooleanValue("rt4_success")) {
-            log.error("error: " + res.getString("rt6_retMsg"));
-        }
-        /** rt4_success 为 true,需验签  **/
-        return res.toJavaObject(clazz);
-    }
-
 }

+ 212 - 38
src/main/java/com/caimei/modules/order/util/OrderUtils.java

@@ -1,25 +1,34 @@
 package com.caimei.modules.order.util;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.caimei.modules.order.constant.Constant;
+import com.caimei.modules.order.dao.NewOrderDao;
 import com.caimei.modules.order.dao.NewShopOrderDao;
 import com.caimei.modules.order.dao.PayShopDao;
 import com.caimei.modules.order.entity.*;
 import com.caimei.utils.Disguiser;
 import com.caimei.utils.MathUtil;
+import com.caimei.utils.RedisService;
 import com.caimei.utils.payUtil.MyBeanUtils;
 import com.caimei.utils.payUtil.RSA;
 import com.caimei.utils.payUtil.SettlePostFormUtil;
 import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
+
+
 /**
  * @author zzj
  */
@@ -27,18 +36,28 @@ import java.util.concurrent.atomic.AtomicReference;
 @Component
 public class OrderUtils {
 
+    public static OkHttpClient client = new OkHttpClient.Builder()
+            .connectTimeout(3, TimeUnit.SECONDS)
+            .readTimeout(20, TimeUnit.SECONDS)
+            .build();
+
+    @Resource
+    private NewOrderDao newOrderDao;
+    @Resource
+    private RedisService redisService;
     @Resource
     private PayShopDao payShopDao;
     @Resource
     private NewShopOrderDao shopOrderDao;
 
     /**
-     * 计算应付供应商
+     * 计算子订单应付
      *
-     * @param shopOrderId
+     * @param shopOrder
      */
-    public Map<String, Double> getOrderCharge(Integer shopOrderId) {
-        List<NewOrderProduct> products = payShopDao.findOrderProductPrice(shopOrderId);
+    public NewShopOrder getShouldPay(NewShopOrder shopOrder) {
+        List<NewOrderProduct> products = payShopDao.findPayOrderProducts(shopOrder.getShopOrderId());
+        shopOrder.setShopOrderNos(payShopDao.findShopOrderNos(shopOrder.getOrderId()));
         AtomicReference<BigDecimal> organizeFee = new AtomicReference<>();
         AtomicReference<BigDecimal> shopFee = new AtomicReference<>();
         AtomicReference<BigDecimal> totalAmount = new AtomicReference<>();
@@ -52,37 +71,61 @@ public class OrderUtils {
         // 子订单总额 - 付供应商成本 - 付组织 = 应付采美
         Double cmFee = MathUtil.sub(totalAmount.get(), MathUtil.add(shopFee.get(), organizeFee.get())).doubleValue();
 
-        List<CmReceiptOrderRelation> relations = payShopDao.findOrderRelations(shopOrderId);
-        AtomicReference<Double> total = new AtomicReference<>();
+        List<CmReceiptOrderRelation> relations = payShopDao.findOrderRelations(shopOrder.getOrderId());
+        // 线上手续费
+        AtomicReference<Double> totalCharge = new AtomicReference<>();
+        // 子订单总收款
+        AtomicReference<Double> receiptTotal = new AtomicReference<>();
+        // 线上标记
+        AtomicReference<Boolean> onlineFlag = new AtomicReference<Boolean>(false);
         relations.forEach(r -> {
             double charge = 0;
-            if (12 == r.getPayType()) {
-                // 企业网银
-                charge = 10;
-            } else if (8 == r.getPayType() || 13 == r.getPayType() || 15 == r.getPayType()) {
-                charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.0065, 2).doubleValue(), 0.01);
-            } else if (29 == r.getPayType()) {
-                // 快捷支付借记卡
-
-                charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.003, 2).doubleValue(), 0.1);
-            } else if (30 == r.getPayType()) {
-                // 快捷支付贷记卡
-                charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.006, 2).doubleValue(), 0.1);
-            } else if (17 == r.getPayType()) {
-                // 个人网银
-                charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.002, 2).doubleValue(), 0.1);
-            } else if (14 == r.getPayType()) {
-                // 支付宝
-                charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.0025, 2).doubleValue(), 0.01);
+            // 线上手续费
+            if (1 == r.getPayWay()) {
+                onlineFlag.set(true);
+                if (12 == r.getPayType()) {
+                    // 企业网银
+                    charge = 10;
+                } else if (8 == r.getPayType() || 13 == r.getPayType() || 15 == r.getPayType()) {
+                    // 微信
+                    charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.0065, 2).doubleValue(), 0.01);
+                } else if (29 == r.getPayType()) {
+                    // 快捷支付借记卡
+                    charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.003, 2).doubleValue(), 0.1);
+                } else if (30 == r.getPayType()) {
+                    // 快捷支付贷记卡
+                    charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.006, 2).doubleValue(), 0.1);
+                } else if (17 == r.getPayType()) {
+                    // 个人网银
+                    charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.002, 2).doubleValue(), 0.1);
+                } else if (14 == r.getPayType()) {
+                    // 支付宝
+                    charge = Math.max(MathUtil.mul(r.getAssociateAmount(), 0.0025, 2).doubleValue(), 0.01);
+                }
             }
-            total.set(MathUtil.add(total.get(), charge).doubleValue());
+            totalCharge.set(MathUtil.add(totalCharge.get(), charge).doubleValue());
+            receiptTotal.set(MathUtil.add(r.getAssociateAmount(), receiptTotal.get()).doubleValue());
         });
-        Double v = MathUtil.sub(shopFee.get(), total.get()).doubleValue();
-        HashMap<String, Double> feeMap = new HashMap<>(3);
-        feeMap.put("organizeFee", organizeFee.get().doubleValue());
-        feeMap.put("shopFee", shopFee.get().doubleValue());
-        feeMap.put("cmFee", cmFee);
-        return feeMap;
+        // 应付供应商
+        Double v = MathUtil.sub(shopFee.get(), totalCharge.get()).doubleValue();
+        Double paidCm = shopOrder.getPayCmAmount();
+        Double paidShop = shopOrder.getPayedShopAmount();
+        if (onlineFlag.get()) {
+            // 线上计算已付采美
+            paidCm = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 3);
+            // 线上计算已付供应商
+            paidShop = payShopDao.findOnlinePayCm(shopOrder.getShopOrderId(), 5);
+            shopOrder.setPayCmAmount(paidCm);
+            shopOrder.setPayedShopAmount(paidShop);
+        }
+        shopOrder.setBrokerage(organizeFee.get().doubleValue());
+        shopOrder.setWaitPayCmAmount(MathUtil.sub(cmFee, paidCm).doubleValue());
+        shopOrder.setWaitPayShop(MathUtil.sub(v, paidShop).doubleValue());
+        shopOrder.setShouldPayCmAmount(cmFee);
+        shopOrder.setShouldPayShopAmount(v);
+        shopOrder.setReceiptTotalFee(receiptTotal.get());
+
+        return shopOrder;
     }
 
     /**
@@ -161,12 +204,143 @@ public class OrderUtils {
     }
 
 
-    public List<NewOrder> setOrderListValue(List<NewOrder> orderList){
-        orderList.forEach(o->{
-            o.setNewShopOrders(shopOrderDao.findListByOrderId(o.getOrderId()));
+    public List<NewOrder> setOrderListValue(List<NewOrder> orderList) {
+        orderList.forEach(o -> {
+            List<NewShopOrder> shopOrders = shopOrderDao.findListByOrderId(o.getOrderId());
+            shopOrders.forEach(this::getShouldPay);
+            o.setNewShopOrders(shopOrders);
         });
-        return null;
+        return orderList;
     }
 
+    public void splitAccount(List<AccountPayOrder.AccountPayOrderExt.SplitBillRule> splitBillRules, String orderRequestNo,
+                             String mbOrderId, NewShopOrder shopOrder, List<SplitAccountPo> splitBillDetail) {
+        if (null != splitBillRules && splitBillRules.size() > 0) {
+            //第三方分账接口
+            try {
+                AccountPayOrder accountPayOrder = new AccountPayOrder();
+                accountPayOrder.setP1_bizType("AccountPaySub");
+                accountPayOrder.setP2_signType("MD5");
+                String format1 = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS").format(new Date());
+                accountPayOrder.setP3_timestamp(format1);
+                String substring = format1.substring(20);
+                // fz+当前微秒时间+原唯一订单号
+                accountPayOrder.setP4_orderId("FZ" + substring + orderRequestNo);
+                //付款账户子订单绑定商户号
+                accountPayOrder.setP5_customerNumber(shopOrder.getSplitCode());
+                AccountPayOrder.AccountPayOrderExt accountPayOrderExt = new AccountPayOrder.AccountPayOrderExt();
+                //收款账户商编  填写splitBillRules时候不填写MerchantNo,Amount并且即使填写这两个参数不生效!!
+                //accountPayOrderExt.setInMerchantNo(splitMoneyVo.getName());
+                //accountPayOrderExt.setAmount(splitMoneyVo.getSplitMoney());
+                accountPayOrderExt.setOrderType(AccountPayOrderType.TRANSFER);
+                accountPayOrderExt.setServerCallbackUrl(Constant.prodSplit);
+                accountPayOrderExt.setGoodsName("分账");
+                if (null != splitBillRules && splitBillRules.size() > 0) {
+                    accountPayOrderExt.setSplitBillRules(splitBillRules);
+                }
+                String ext = JSON.toJSONString(accountPayOrderExt);
+                log.info("分账规则串json串:" + ext);
+                accountPayOrder.setP6_ext(ext);
+                // 生成签名
+                StringBuilder builder = new StringBuilder();
+                builder.append(Constant.SPLIT)
+                        .append(accountPayOrder.getP1_bizType()).append(Constant.SPLIT)
+                        .append(accountPayOrder.getP2_signType()).append(Constant.SPLIT)
+                        .append(accountPayOrder.getP3_timestamp()).append(Constant.SPLIT)
+                        .append(accountPayOrder.getP4_orderId()).append(Constant.SPLIT)
+                        .append(accountPayOrder.getP5_customerNumber()).append(Constant.SPLIT)
+                        .append(accountPayOrder.getP6_ext()).append(Constant.SPLIT)
+                        .append(Constant.XUNI);
+                String sign = Disguiser.disguiseMD5(builder.toString().trim());
+                Map<String, String> bean = convertBean(accountPayOrder);
+                log.info("--------------------> 发送分账参数:  " + bean);
+                Map<String, String> map = postForm(bean, Constant.FZ, sign, Map.class);
+                log.info("----------------分账返回数据: " + map.toString());
+                if (map != null) {
+                    String code = map.get("rt5_retCode");
+                    if (!"0000".equals(code)) {
+                        String msg = map.get("rt6_retMsg");
+                        log.info("【手动分账】>>>>>>>>>>手动分账失败>>>>>>>msg:" + msg);
+                    } else {
+                        for (SplitAccountPo splitAccount : splitBillDetail) {
+                            splitAccount.setMbOrderId(mbOrderId);
+                            splitAccount.setOrderRequestNo(orderRequestNo);
+                            splitAccount.setPayStatus(1);
+                            // 保存分账详情
+                            newOrderDao.insertSplitAccount(splitAccount);
+                        }
+                        redisService.remove("XSFZMDS");
+                        log.info("【手动分账】>>>>>>>>>>此订单分账结束");
+                    }
+                }
+            } catch (Exception e) {
+                log.error("【手动分账】>>>>>>>>>>错误信息", e);
+            }
+        }
+    }
 
+    public Map<String, String> convertBean(Object bean) {
+        Class clazz = bean.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        for (Field f : fields) {
+            f.setAccessible(true);
+        }
+        try {
+            Map<String, String> retMap = new LinkedHashMap<>();
+            for (Field f : fields) {
+                String key = f.toString().substring(f.toString().lastIndexOf(".") + 1);
+                Object value = f.get(bean);
+                if (value == null) {
+                    value = "";
+                }
+                retMap.put(key, (String) value);
+            }
+            return retMap;
+        } catch (Exception e) {
+            log.info("分账", e);
+            throw new IllegalStateException("分账异常", e);
+        }
+    }
+
+    public <T> T postForm(Map<String, String> params, String url, String sign, Class<T> clazz) {
+        FormBody.Builder builder = new FormBody.Builder();
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            builder.add(entry.getKey(), entry.getValue());
+        }
+        builder.add("sign", sign);
+
+        Request request = new Request.Builder() // okHttp post
+                .url(url)
+                .post(builder.build())
+                .build();
+
+        Response response = null;
+        try {
+            response = client.newCall(request).execute();
+        } catch (IOException e) {
+            throw new IllegalStateException("请求出错", e);
+        }
+        if (!response.isSuccessful()) {
+            try {
+                log.info(response.body().string());
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            throw new RuntimeException("请求失败了: http response code: " + response.code());
+        }
+
+        ResponseBody body = response.body();
+        String content = null;
+        try {
+            content = body.string();
+        } catch (IOException e) {
+            throw new IllegalStateException("IO异常", e);
+        }
+        JSONObject res = JSON.parseObject(content);
+        if (!res.getBooleanValue("rt4_success")) {
+            log.error("error: " + res.getString("rt6_retMsg"));
+        }
+        /** rt4_success 为 true,需验签  **/
+        return res.toJavaObject(clazz);
+    }
 }

+ 60 - 10
src/main/java/com/caimei/utils/ImageUploadUtils.java

@@ -3,23 +3,26 @@ package com.caimei.utils;
 
 import com.alibaba.fastjson.JSONObject;
 import com.caimei.modules.fastDFS.FastDFSClient;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Controller;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 import sun.misc.BASE64Decoder;
 import sun.misc.BASE64Encoder;
 
+import javax.annotation.Resource;
 import java.io.*;
 import java.util.Hashtable;
 import java.util.Random;
+import java.util.UUID;
 
+@Slf4j
 @Controller
 @RequestMapping(value = "/mall/uploadFile")
 public class ImageUploadUtils {
@@ -28,18 +31,65 @@ public class ImageUploadUtils {
     @Value("${malladmin.imageDomain}")
     private String imageDomain;
 
-    @Autowired
+    @Resource
     private FastDFSClient client;
 
-    /**
-     *
-     */
     private static final long serialVersionUID = 1L;
-    private File fileMaterial;// Ajax获取图片文件,与控件type=File中的name属性一样
-    private String dirName;// Ajax获取图片相对路径名称,相应的name属性名称+FileName
+
+    // Ajax获取图片文件,与控件type=File中的name属性一样
+    private File fileMaterial;
+    // Ajax获取图片相对路径名称,相应的name属性名称+FileName
+    private String dirName;
     private Hashtable<String, String> jsonResult;
     private static Hashtable<String, String> dirNameTableHashtable = new Hashtable<String, String>();
 
+    @PostMapping("/image/upload")
+    public ResponseJson<String> multiImageUpload(MultipartFile[] file, @RequestHeader HttpHeaders headers) {
+        // 打印IP
+        String ip = headers.getFirst("X-CLIENT-IP");
+        log.info("【图片上传】 X-CLIENT-IP : " + ip);
+        if (file != null && file.length > 0) {
+            try {
+                String fileUrl = null;
+                for (MultipartFile fileItem : file) {
+                    String url = saveFile(fileItem);
+                    fileUrl = imageDomain + "/" + url;
+                }
+                log.info("【图片上传】>>>>>>>>>>>>>>>>上传成功:" + fileUrl);
+                return ResponseJson.success("上传成功", fileUrl);
+            } catch (IOException e) {
+                log.error("【图片上传】>>>>>>>>>>>>>>>>上传失败:" + e);
+                return ResponseJson.error("图片上传失败!",null);
+            }
+        } else {
+            return ResponseJson.error("请传入图片!",null);
+        }
+    }
+
+
+    private String saveFile(MultipartFile file) throws IOException {
+        String originalFilename = file.getOriginalFilename();
+        String randomStr = UUID.randomUUID().toString();
+        assert originalFilename != null;
+        int index = originalFilename.lastIndexOf(".");
+        String name = originalFilename.substring(index);
+        // 图片暂存本地服务器路径
+        String filePath = "/mnt/newdatadrive/data/runtime/cloud-instance/server-tools/tempImage/";
+//        if ("dev".equals(profile)){
+//            filePath = "D:\\";
+//        }
+        filePath += randomStr + name;
+        // 临时图片
+        File tempFile = new File(filePath);
+        file.transferTo(tempFile);
+        log.info("【图片上传】>>>>>>>>>>>>>>>>图片临时路径:" + filePath);
+        String fileUrl = client.uploadFile(filePath);
+        // 删除临时图片
+        boolean delete = tempFile.delete();
+        log.info("【图片上传】>>>>>>>>>>>>>>>>删除临时图片:" + delete);
+        return fileUrl;
+    }
+
     @ResponseBody
     @RequestMapping(value = "/imageUpload", method = RequestMethod.POST)
     public JsonModel imageUpload(@RequestBody String imgStr) throws FileNotFoundException {

+ 6 - 0
src/main/resources/config/beta/application-beta.yml

@@ -15,6 +15,12 @@ spring:
     url: jdbc:mysql://172.31.165.28:3306/caimei?characterEncoding=UTF8&serverTimezone=Asia/Shanghai
     username: developer
     password: J5p3tgOVazNl4ydf
+  # 数据源连接--end
+  data:
+    mongodb:
+      #使用uri连接
+      # mongodb://用户名:密码@IP地址:27017/数据库
+      uri: mongodb://zzj:easyCome.@47.107.48.218:27017/userInfo
     #数据源连接--end
 
   #模板引擎配置

+ 6 - 0
src/main/resources/config/dev/application-dev.yml

@@ -15,6 +15,12 @@ spring:
     url: jdbc:mysql://120.79.25.27:3306/caimei?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
     username: developer
     password: J5p3tgOVazNl4ydf
+  data:
+    #mongo数据源配置
+    mongodb:
+      #使用uri连接
+      # mongodb://用户名:密码@IP地址:27017/数据库  暂时连测试
+      uri: mongodb://zzj:easyCome.@47.107.48.218:27017/userInfo
     #数据源连接--end
 
   #模板引擎配置

+ 5 - 0
src/main/resources/config/prod/application-prod.yml

@@ -15,6 +15,11 @@ spring:
     url: jdbc:mysql://rm-wz928s8btl7kxil44.mysql.rds.aliyuncs.com:3306/caimei?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
     username: coder
     password: diKtPYZ%wToI&9#L
+  data:
+    mongodb:
+      #使用uri连接
+      # mongodb://用户名:密码@IP地址:27017/数据库
+      uri: mongodb://zzj:easyCome.@120.79.162.1:27017/userInfo
     #数据源连接--end
 
   #模板引擎配置

+ 3 - 3
src/main/resources/mapper/ActiveMapper.xml

@@ -13,8 +13,8 @@
     <insert id="insertImages" keyColumn="id" keyProperty="id"
             parameterType="com.caimei.modules.homepage.enity.ActiveImages"
             useGeneratedKeys="true">
-        insert into cm_mall_active_image(activeId, image)
-        VALUES (#{activeId}, #{image})
+        insert into cm_mall_active_image(activeId, image,topic)
+        VALUES (#{activeId}, #{image},#{topic})
     </insert>
 
     <insert id="insertProducts">
@@ -105,7 +105,7 @@
     </select>
 
     <select id="findImageList" resultType="com.caimei.modules.homepage.enity.ActiveImages">
-        select id, image
+        select id, image, topic
         from cm_mall_active_image
         where activeId = #{id}
     </select>

+ 1 - 0
src/main/resources/mapper/CmDiscernReceiptMapper.xml

@@ -164,6 +164,7 @@
         select type as id, bankAccount as name
         from cm_offline_collection
         where type in (12, 13, 14, 15, 17, 29, 30)
+        or organizeId = 4
     </select>
 
     <select id="findOrderIds" resultType="java.lang.String">

+ 5 - 3
src/main/resources/mapper/NewShopOrderMapper.xml

@@ -16,7 +16,6 @@
 			a.townId  AS townId,
 			a.productAmount  AS productAmount,
 			a.discountAmount AS  discountAmount,
-			a.accountAmount AS  accountAmount,
 			a.totalAmount AS  totalAmount,
 			a.payFlag  AS payFlag,
 			a.payTime  AS payTime,
@@ -228,8 +227,11 @@
 
     <select id="findListByOrderId" resultType="com.caimei.modules.order.entity.NewShopOrder">
         SELECT<include refid="shopOrderColumns"/>,
-        b.name as shopName
-        FROM cm_shop_order a left join shop b on a.shopId = b.shopId
+        b.name as shopName,
+        ifnull((select sum(payAmount) from cm_pay_shop_record where shopOrderId = a.shopOrderId),0) as payedShopAmount,
+        ifnull((select sum(payCmAmount) from cm_pay_shop_record where shopOrderId = a.shopOrderId),0) as payCmAmount
+        FROM cm_shop_order a
+        left join shop b on a.shopId = b.shopId
         WHERE a.orderId = #{orderId} ORDER BY a.shopOrderNo DESC
     </select>
 

+ 142 - 75
src/main/resources/mapper/PayShopDao.xml

@@ -65,17 +65,41 @@
 
     <update id="updatePayShop">
         UPDATE cm_pay_shop
-        SET name        = #{name},
-            totalAmount = #{totalAmount},
-            payType     = #{payType},
-            applicant   = #{applicant},
-            applyTime   = #{applyTime},
-            reviewer    = #{reviewer},
-            reviewTime  = #{reviewTime},
-            payTime     = #{payTime},
-            status      = #{status},
-            reason      = #{reason},
-            delFlag     = #{delFlag}
+        <set>
+            <if test="name !=null and name!=''">
+                name = #{name},
+            </if>
+            <if test="totalAmount !=null">
+                totalAmount = #{totalAmount},
+            </if>
+            <if test="payType !=null">
+                payType = #{payType},
+            </if>
+            <if test="applicant !=null">
+                applicant = #{applicant},
+            </if>
+            <if test="applyTime !=null and applyTime !=''">
+                applyTime = #{applyTime},
+            </if>
+            <if test="reviewer !=null">
+                reviewer = #{reviewer},
+            </if>
+            <if test="reviewTime !=null and reviewTime !=''">
+                reviewTime = #{reviewTime},
+            </if>
+            <if test="payTime !=null and payTime !=''">
+                payTime = #{payTime},
+            </if>
+            <if test="status !=null">
+                status = #{status},
+            </if>
+            <if test="reason !=null and reason !=''">
+                reason = #{reason},
+            </if>
+            <if test="delFlag !=null">
+                delFlag = #{delFlag}
+            </if>
+        </set>
         WHERE id = #{payShopId}
     </update>
 
@@ -93,16 +117,38 @@
 
     <update id="updatePayShopDetail">
         UPDATE cm_pay_shop
-        SET name        = #{name},
-            totalAmount = #{totalAmount},
-            payType     = #{payType},
-            applicant   = #{applicant},
-            applyTime   = #{applyTime},
-            reviewer    = #{reviewer},
-            reviewTime  = #{reviewTime},
-            status      = #{status},
-            reason      = #{reason},
-            delFlag     = #{delFlag}
+        <set>
+            <if test="name !=null and name!=''">
+                name = #{name},
+            </if>
+            <if test="totalAmount !=null">
+                totalAmount = #{totalAmount},
+            </if>
+            <if test="payType !=null">
+                payType = #{payType},
+            </if>
+            <if test="applicant !=null">
+                applicant = #{applicant},
+            </if>
+            <if test="applyTime !=null and applyTime !=''">
+                applyTime = #{applyTime},
+            </if>
+            <if test="reviewer !=null">
+                reviewer = #{reviewer},
+            </if>
+            <if test="reviewTime !=null and reviewTime !=''">
+                reviewTime = #{reviewTime},
+            </if>
+            <if test="status !=null">
+                status = #{status},
+            </if>
+            <if test="reason !=null and reason !=''">
+                reason = #{reason},
+            </if>
+            <if test="delFlag !=null">
+                delFlag = #{delFlag}
+            </if>
+        </set>
         WHERE id = #{payShopId}
     </update>
 
@@ -141,6 +187,20 @@
         where shopOrderId = #{shopOrderId}
     </update>
 
+    <update id="updateCmShopAccount">
+        update cm_shop_account
+        set bankAccountName = #{cmBankAccount},
+            bankAccount     = #{cmBankAccount},
+            bankName        = #{cmBankName}
+        where id = 1
+    </update>
+
+    <update id="deletePayShop">
+        update cm_pay_shop
+        set delFlag = 1
+        where id = #{id}
+    </update>
+
     <select id="findPayShops" resultType="com.caimei.modules.order.entity.OrderPayShop">
         SELECT
         a.id AS "payShopId",
@@ -208,22 +268,27 @@
     </select>
 
     <select id="findPayShopDetail" resultType="com.caimei.modules.order.entity.OrderPayShopDetail">
-        SELECT a.id           AS "payShopId",
+        SELECT a.id                                                       AS "payShopId",
+               a.reason,
                a.payCmAmount,
                a.bankAccountName,
                a.bankAccount,
                a.bankName,
                a.type,
-               a.name         AS "name",
-               a.totalAmount  AS "totalAmount",
-               a.applyTime    AS "applyTime",
-               a.reviewTime   AS "reviewTime",
-               a.payTime      AS "payTime",
-               a.status       AS "status",
-               u1.accountName AS applicantName,
-               u2.accountName AS reviewerName,
-               s.name         AS shopName,
-               a.shopId
+               a.cmType,
+               a.name                                                     AS "name",
+               a.totalAmount                                              AS "totalAmount",
+               a.applyTime                                                AS "applyTime",
+               a.reviewTime                                               AS "reviewTime",
+               a.payTime                                                  AS "payTime",
+               a.status                                                   AS "status",
+               u1.accountName                                             AS applicantName,
+               u2.accountName                                             AS reviewerName,
+               s.name                                                     AS shopName,
+               a.shopId,
+               (select bankAccount from cm_shop_account where id = 1)     as cmBankAccount,
+               (select bankAccountName from cm_shop_account where id = 1) as cmbankAccountName,
+               (select bankName from cm_shop_account where id = 1)        as cmbankName
         FROM cm_pay_shop a
                  left join cm_mall_admin_user u1 on u1.id = a.applicant
                  left join cm_mall_admin_user u2 on u2.id = a.reviewer
@@ -232,33 +297,30 @@
     </select>
 
     <select id="findPayShopOrders" resultType="com.caimei.modules.order.entity.NewShopOrder">
-        SELECT DISTINCT a.shopOrderID                                   AS shopOrderId,
-                        a.orderID                                       AS orderId,
-                        a.organizeID                                    AS organizeId,
-                        a.shopOrderNo                                   AS shopOrderNo,
-                        a.orderNo                                       AS orderNo,
-                        ROUND(a.totalAmount * 0.17, 2)                  AS brokerage,
-                        ROUND(a.totalAmount * 0.03, 2)                  AS shouldPayCmAmount,
-                        a.payCmAmount                                   AS payCmAmount,
-                        ROUND(a.totalAmount * 0.03, 2) - a.payCmAmount  AS waitPayCmAmount,
-                        a.receiptStatus                                 AS receiptStatus,
-                        a.orderTime                                     AS orderTime,
-                        a.payStatus                                     AS payStatus,
-                        a.shopProductAmount                             AS shopProductAmount,
-                        a.shopPostFee                                   AS shopPostFee,
-                        ROUND(a.totalAmount * 0.8, 2)                   AS shouldPayShopAmount,
-                        ROUND(a.totalAmount * 0.8, 2) - payedShopAmount AS waitPayShop,
-                        a.payedShopAmount                               AS payedShopAmount,
-                        co.payTotalFee                                  AS payTotalFee,
-                        bou.name                                        AS buyer,
-                        s.name                                          AS shopName,
-                        co.receiptStatus                                AS orderReceiptStatus
+        SELECT DISTINCT
+            a.shopOrderID AS shopOrderId,
+            a.orderID AS orderId,
+            a.organizeID AS organizeId,
+            a.shopOrderNo AS shopOrderNo,
+            a.orderNo AS orderNo,
+            a.totalAmount,
+            a.payCmAmount AS payCmAmount,
+            a.receiptStatus AS receiptStatus,
+            a.orderTime AS orderTime,
+            a.payStatus AS payStatus,
+            a.shopProductAmount AS shopProductAmount,
+            a.shopPostFee AS shopPostFee,
+            ifnull((select sum(payAmount) from cm_pay_shop_record where shopOrderId = a.shopOrderId),0) as payedShopAmount,
+            ifnull((select sum(payCmAmount) from cm_pay_shop_record where shopOrderId = a.shopOrderId),0) as payCmAmount,
+            a.payedShopAmount AS payedShopAmount,
+            co.payTotalFee AS payTotalFee,
+            s.name AS shopName,
+            s.shopId,
+            a.paying,
+            co.receiptStatus AS orderReceiptStatus
         FROM cm_shop_order a
-                 LEFT JOIN cm_pay_shop_record cpsr ON a.shopOrderID = cpsr.shopOrderID
-                 LEFT JOIN bp_order_userinfo bou ON bou.orderId = a.orderID
-                 LEFT JOIN cm_order co ON co.orderID = a.orderID
-                 LEFT JOIN shop s ON s.shopID = a.shopID
-                 LEFT JOIN club c ON c.userID = a.userID
+        LEFT JOIN cm_order co ON co.orderID = a.orderID
+        LEFT JOIN shop s ON s.shopID = a.shopID
         WHERE a.shopOrderID IN
               (SELECT shoporderId
                FROM cm_pay_shop_record
@@ -277,6 +339,10 @@
                cop.costPrice            AS costPrice,
                cop.productType          AS productType,
                cop.price,
+               cop.shopPercent,
+               cop.organizePercent,
+               cop.cmPercent,
+               cop.totalAmount,
                (SELECT SUM(crpp.actualReturnedNum) + SUM(crpp.actualCancelNum)
                 FROM cm_returned_purchase_product crpp
                          LEFT JOIN cm_returned_purchase rp ON rp.id = crpp.returnedID
@@ -284,17 +350,17 @@
                   AND rp.status = '2'
                   AND rp.delFlag = '0') AS returnedNum
         from cm_order_product cop
-        left join cm_sku cs on cop.skuId = cs.skuId
-        left join product p on p.productID = cop.productID
-        left join cm_order co on co.orderID = cop.orderID
-        left join user u on u.userID = co.userID
+                 left join cm_sku cs on cop.skuId = cs.skuId
+                 left join product p on p.productID = cop.productID
+                 left join cm_order co on co.orderID = cop.orderID
+                 left join user u on u.userID = co.userID
         where cop.shopOrderID = #{shopOrderId}
     </select>
 
     <select id="findShopOrderNos" resultType="java.lang.String">
         SELECT CONCAT(shopOrderNo, '(', shopOrderID, ')') AS result
         FROM cm_shop_order
-        WHERE orderID = #{orderID}
+        WHERE orderID = #{orderId}
           and shopId != 998
     </select>
 
@@ -347,12 +413,13 @@
     </select>
 
     <select id="findOrderRelations" resultType="com.caimei.modules.order.entity.CmReceiptOrderRelation">
-        select payType, associateAmount
+        select payType, associateAmount, orderId, cror.shopOrderId, payWay, cdr.receiptAmount
         from cm_receipt_order_relation cror
                  left join cm_discern_receipt cdr on cror.receiptID = cdr.id
-        where cror.shopOrderId = #{shopOrderId}
+        where cror.orderId = #{orderId}
           and cror.delFlag = 0
           and cdr.delFlag = 0
+          and cdr.receiptStatus = 3
     </select>
 
     <select id="findTotalAmount" resultType="java.lang.Double">
@@ -381,33 +448,33 @@
         a.shopOrderNo AS shopOrderNo,
         a.orderNo AS orderNo,
         a.totalAmount,
-        # todo
-        ROUND(a.totalAmount * 0.17, 2) AS brokerage,
-        ROUND(a.totalAmount * 0.03, 2) AS shouldPayCmAmount,
         a.payCmAmount AS payCmAmount,
-        ROUND(a.totalAmount * 0.03, 2) - a.payCmAmount AS waitPayCmAmount,
         a.receiptStatus AS receiptStatus,
         a.orderTime AS orderTime,
         a.payStatus AS payStatus,
         a.shopProductAmount AS shopProductAmount,
         a.shopPostFee AS shopPostFee,
-        ROUND(a.totalAmount * 0.8, 2) AS shouldPayShopAmount,
-        ROUND(a.totalAmount * 0.8, 2) - ifnull(payedShopAmount,0) AS waitPayShop,
+        ifnull((select sum(payAmount) from cm_pay_shop_record where shopOrderId = a.shopOrderId),0) as payedShopAmount,
+        ifnull((select sum(payCmAmount) from cm_pay_shop_record where shopOrderId = a.shopOrderId),0) as payCmAmount,
         a.payedShopAmount AS payedShopAmount,
         co.payTotalFee AS payTotalFee,
-        bou.name AS buyer,
         s.name AS shopName,
         s.shopId,
+        a.paying,
         co.receiptStatus AS orderReceiptStatus
         FROM cm_shop_order a
-        LEFT JOIN cm_pay_shop_record cpsr ON a.shopOrderID = cpsr.shopOrderID
-        LEFT JOIN bp_order_userinfo bou ON bou.orderId = a.orderID
         LEFT JOIN cm_order co ON co.orderID = a.orderID
         LEFT JOIN shop s ON s.shopID = a.shopID
-        LEFT JOIN club c ON c.userID = a.userID
         WHERE a.shopOrderId in
         <foreach collection="shopOrderIds" open="(" close=")" item="oId" separator=",">
             #{oId}
         </foreach>
     </select>
+
+    <select id="findOnlinePayCm" resultType="java.lang.Double">
+        SELECT SUM(splitAccount)
+        FROM cm_split_account
+        WHERE productType = #{status}
+          AND shoporderid = #{shopOrderId}
+    </select>
 </mapper>