Browse Source

合同费用

zhangyuewww 3 years ago
parent
commit
2361156025

+ 4 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/constant/StatusEnum.java

@@ -140,6 +140,10 @@ public enum StatusEnum {
     GRAIN_REVIEWED("5", "待审核", "grain_reviewed"),
     GRAIN_REJECT("7", "已驳回", "grain_reject"),
     GRAIN_ADOPT("9", "已通过", "grain_adopt"),
+    //合同费用状态
+    RECEIVED("1", "已收款", "received"),
+    PENDING_PAYMENT("3", "待付款", "pending_payment"),
+    PAID("5", "已付款", "paid"),
 
 
     ;

+ 63 - 2
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/ContractCostInfoController.java

@@ -1,9 +1,14 @@
 package com.yh.saas.plugin.yiliangyiyun.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.yh.saas.plugin.yiliangyiyun.entity.ContractCostInfo;
+import com.yh.saas.plugin.yiliangyiyun.service.IContractCostInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * <p>
@@ -16,6 +21,62 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("/contractCostInfo")
 public class ContractCostInfoController {
+    @Autowired
+    private IContractCostInfoService contractCostInfoService;
+
+    /**
+     * 新增合同费用信息
+     */
+    @PostMapping("/api/addInfo")
+    public String addInfo(@RequestBody @Valid ContractCostInfo contractCostInfo) {
+        return contractCostInfoService.addInfo(contractCostInfo);
+    }
+
+    /**
+     * 编辑
+     */
+    @PostMapping("/editInfo")
+    public String editInfo(@RequestBody ContractCostInfo contractCostInfo) {
+        return contractCostInfoService.editInfo(contractCostInfo);
+    }
+
+    /**
+     * 查看合同费用信息
+     */
+    @GetMapping("/getInfo")
+    public ContractCostInfo getInfo(@RequestParam String id) {
+        return contractCostInfoService.getInfo(id);
+    }
+
+    /**
+     * 信息分页列表查询
+     *
+     * @param contractCostInfo
+     * @return
+     */
+    @GetMapping("/selectInfo")
+    public Page<ContractCostInfo> selectInfo(ContractCostInfo contractCostInfo) {
+        return contractCostInfoService.selectInfo(contractCostInfo);
+    }
+
+    /**
+     * 删除
+     *
+     * @param example
+     * @return
+     */
+    @PostMapping("/deleteInfo")
+    public void deleteInfo(@RequestBody  ContractCostInfo example) {
+        contractCostInfoService.deleteInfo(example.getId());
+    }
+
+    /**
+     * 付款
+     */
+    @PostMapping("/payment")
+    public String payment(@RequestBody ContractCostInfo contractCostInfo) {
+        return contractCostInfoService.payment(contractCostInfo);
+    }
 
 }
 

+ 16 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/ContractCostInfo.java

@@ -1,12 +1,15 @@
 package com.yh.saas.plugin.yiliangyiyun.entity;
 
+import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableId;
 import com.baomidou.mybatisplus.annotations.TableName;
 import com.baomidou.mybatisplus.enums.IdType;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yh.saas.common.support.entity.BaseModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -72,6 +75,10 @@ public class ContractCostInfo extends BaseModel<ContractCostInfo> {
      * 备注
      */
     private String remark;
+    /**
+     * 回款方
+     */
+    private String payee;
     /**
      * 请款人/收款人
      */
@@ -83,6 +90,8 @@ public class ContractCostInfo extends BaseModel<ContractCostInfo> {
     /**
      * 支付日期
      */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date payDeadline;
     /**
      * 状态标识
@@ -108,6 +117,13 @@ public class ContractCostInfo extends BaseModel<ContractCostInfo> {
      * 工作流ID
      */
     private String workflowId;
+    /**
+     * 查询类型
+     */
+    @TableField(exist = false)
+    private String searchType;
+    @TableField(exist = false)
+    private String taskId;
 
 
     @Override

+ 18 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/mapper/ContractCostInfoMapper.java

@@ -3,6 +3,9 @@ package com.yh.saas.plugin.yiliangyiyun.mapper;
 import com.yh.saas.plugin.yiliangyiyun.entity.ContractCostInfo;
 import com.baomidou.mybatisplus.mapper.BaseMapper;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 合同费用 Mapper 接口
@@ -12,5 +15,20 @@ import com.baomidou.mybatisplus.mapper.BaseMapper;
  * @since 2022-03-01
  */
 public interface ContractCostInfoMapper extends BaseMapper<ContractCostInfo> {
+    /**
+     * 根据条件查询合同费用总数
+     *
+     * @param pageView
+     * @return
+     */
+    Integer getCountByCondition(Map<String, Object> pageView);
+
+    /**
+     * 根据条件查询合同费用列表
+     *
+     * @param pageView
+     * @return
+     */
+    List<ContractCostInfo> getListByCondition(Map<String, Object> pageView);
 
 }

+ 42 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IContractCostInfoService.java

@@ -1,5 +1,6 @@
 package com.yh.saas.plugin.yiliangyiyun.service;
 
+import com.baomidou.mybatisplus.plugins.Page;
 import com.yh.saas.plugin.yiliangyiyun.entity.ContractCostInfo;
 import com.baomidou.mybatisplus.service.IService;
 
@@ -12,5 +13,46 @@ import com.baomidou.mybatisplus.service.IService;
  * @since 2022-03-01
  */
 public interface IContractCostInfoService extends IService<ContractCostInfo> {
+    /**
+     * 添加
+     *
+     * @param contractCostInfo
+     */
+    String addInfo(ContractCostInfo contractCostInfo);
+
+    /**
+     * 编辑
+     *
+     * @param contractCostInfo
+     */
+    String editInfo(ContractCostInfo contractCostInfo);
+    /**
+     * 付款
+     *
+     * @param contractCostInfo
+     */
+    String payment(ContractCostInfo contractCostInfo);
+
+    /**
+     * 查看
+     *
+     * @param
+     */
+    ContractCostInfo getInfo(String id);
+
+    /**
+     * 信息分页列表查询
+     *
+     * @param contractCostInfo
+     * @return
+     */
+    Page<ContractCostInfo> selectInfo(ContractCostInfo contractCostInfo);
+
+    /**
+     * 删除
+     *
+     * @param id
+     */
+    void deleteInfo(String id);
 
 }

+ 195 - 2
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/ContractCostInfoServiceImpl.java

@@ -1,10 +1,27 @@
 package com.yh.saas.plugin.yiliangyiyun.service.impl;
 
-import com.yh.saas.plugin.yiliangyiyun.entity.ContractCostInfo;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.google.common.collect.Lists;
+import com.winsea.svc.base.security.util.AuthSecurityUtils;
+import com.winsea.svc.base.workflow.entity.Workflow;
+import com.yh.saas.common.support.util.IdGenerator;
+import com.yh.saas.plugin.yiliangyiyun.constant.StatusEnum;
+import com.yh.saas.plugin.yiliangyiyun.entity.*;
+import com.yh.saas.plugin.yiliangyiyun.exception.YException;
+import com.yh.saas.plugin.yiliangyiyun.exception.YExceptionEnum;
 import com.yh.saas.plugin.yiliangyiyun.mapper.ContractCostInfoMapper;
-import com.yh.saas.plugin.yiliangyiyun.service.IContractCostInfoService;
+import com.yh.saas.plugin.yiliangyiyun.service.*;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -17,4 +34,180 @@ import org.springframework.stereotype.Service;
 @Service
 public class ContractCostInfoServiceImpl extends ServiceImpl<ContractCostInfoMapper, ContractCostInfo> implements IContractCostInfoService {
 
+    @Autowired
+    private INewWorkflowService workflowService;
+    @Autowired
+    private IContractManagementInfoService contractManagementInfoService;
+    @Autowired
+    private IReveExpeInfoService reveExpeInfoService;
+
+
+    /**
+     * 添加
+     * @param contractCostInfo
+     * @return
+     */
+    @Override
+    public String addInfo(ContractCostInfo contractCostInfo) {
+        contractCostInfo.setId(IdGenerator.generateUUID());
+        //收款
+        if ("1".equals(contractCostInfo.getType())){
+            contractCostInfo.setStatusFlag(StatusEnum.RECEIVED.getFlag());
+            contractCostInfo.setStatus(StatusEnum.RECEIVED.getName());
+            //收款时生成收支明细
+            ReveExpeInfo reveExpeInfo=new ReveExpeInfo();
+            reveExpeInfo.setId(IdGenerator.generateUUID());
+            reveExpeInfo.setCompId(contractCostInfo.getCompId());
+            reveExpeInfo.setReexType("合同收入");
+            reveExpeInfo.setAmountMoney(contractCostInfo.getCostPrice());
+            reveExpeInfo.setExpenseName(contractCostInfo.getCostName());
+            String remark="";
+            if ("1".equals(contractCostInfo.getCostType())){
+                remark="粮款";
+            }
+            else {
+                remark="非粮款";
+            }
+            ContractManagementInfo contractManagementInfo=contractManagementInfoService.selectOne(new EntityWrapper<ContractManagementInfo>()
+                .eq("comp_id",contractCostInfo.getCompId())
+                .eq("contract_no",contractCostInfo.getContractNo()));
+            reveExpeInfo.setExpenseRemarks(remark+"  "+contractCostInfo.getContractNo()+"  "+contractManagementInfo.getBuyer());
+            reveExpeInfoService.insert(reveExpeInfo);
+
+        }
+        //付款
+        else
+        {
+            contractCostInfo.setStatusFlag(StatusEnum.PENDING_PAYMENT.getFlag());
+            contractCostInfo.setStatus(StatusEnum.PENDING_PAYMENT.getName());
+            boolean isStartWorkflow = StringUtils.isBlank(contractCostInfo.getWorkflowId());
+            // 不是退回的单子
+            if (isStartWorkflow) {
+                Workflow workflow = workflowService
+                        .findLatestWorkflowByBusinessCodeByApp(contractCostInfo.getCompId(), "NON-CONTRACT-APPROVE");
+                // 没配置审核流程,直接结束并处理信息
+                if (workflow == null) {
+                    throw new YException(YExceptionEnum.PURCHASE_ORDER_ERROR);
+                }
+                // 开启审核流
+                else {
+                    // 设置状态 已提交审核
+                    contractCostInfo.setWorkflowId(workflow.getId());
+                    this.updateById(contractCostInfo);
+                    workflowService.startInstance(workflow.getId(), contractCostInfo.getId());
+                }
+            }
+            // 退回的单子 再启用
+            else {
+                this.updateById(contractCostInfo);
+                workflowService.activateInstance(contractCostInfo.getWorkflowId(), contractCostInfo.getId());
+            }
+        }
+        this.insert(contractCostInfo);
+        return "ok";
+    }
+
+    /**
+     * 编辑
+     * @param contractCostInfo
+     * @return
+     */
+    @Override
+    public String editInfo(ContractCostInfo contractCostInfo) {
+        this.updateById(contractCostInfo);
+        return "ok";
+    }
+
+    /**
+     * 付款
+     * @param contractCostInfo
+     * @return
+     */
+    @Override
+    public String payment(ContractCostInfo contractCostInfo) {
+        contractCostInfo.setStatusFlag(StatusEnum.PAID.getFlag());
+        contractCostInfo.setStatus(StatusEnum.PAID.getName());
+        //付款时生成收支明细
+        ReveExpeInfo reveExpeInfo=new ReveExpeInfo();
+        reveExpeInfo.setId(IdGenerator.generateUUID());
+        reveExpeInfo.setReexType("合同支出");
+        reveExpeInfo.setCompId(contractCostInfo.getCompId());
+        reveExpeInfo.setAmountMoney(contractCostInfo.getCostPrice());
+        reveExpeInfo.setExpenseName(contractCostInfo.getCostName());
+        String remark="";
+        if ("1".equals(contractCostInfo.getCostType())){
+            remark="粮款";
+        }
+        else {
+            remark="非粮款";
+        }
+        ContractManagementInfo contractManagementInfo=contractManagementInfoService.selectOne(new EntityWrapper<ContractManagementInfo>()
+                .eq("comp_id",contractCostInfo.getCompId())
+                .eq("contract_no",contractCostInfo.getContractNo()));
+        reveExpeInfo.setExpenseRemarks(remark+"  "+contractCostInfo.getContractNo()+"  "+contractManagementInfo.getSeller());
+        reveExpeInfoService.insert(reveExpeInfo);
+        this.updateById(contractCostInfo);
+        return "ok";
+    }
+
+    /**
+     * 查看
+     * @param id
+     * @return
+     */
+    @Override
+    public ContractCostInfo getInfo(String id) {
+        ContractCostInfo contractCostInfo=this.selectById(id);
+        return contractCostInfo;
+    }
+
+    /**
+     * 列表
+     * @param contractCostInfo
+     * @return
+     */
+    @Override
+    public Page<ContractCostInfo> selectInfo(ContractCostInfo contractCostInfo) {
+        Map<String, Object> pageView = new HashMap<>();
+        pageView.put("startRecord", (contractCostInfo.getCurrentPage() - 1)
+                * contractCostInfo.getPageSize());
+        //  公司ID
+        pageView.put("compId", AuthSecurityUtils.getCurrentUserInfo().getCompId());
+        pageView.put("contractNo", contractCostInfo.getContractNo());
+        pageView.put("searchType", contractCostInfo.getSearchType());
+        pageView.put("contractType", contractCostInfo.getContractType());
+        pageView.put("pageSize", contractCostInfo.getPageSize());
+        pageView.put("currentPage", contractCostInfo.getCurrentPage());
+        // 查询服务商总数
+        Integer dataCount = baseMapper.getCountByCondition(pageView);
+        List<ContractCostInfo> dataList = baseMapper.getListByCondition(pageView);
+        if (!CollectionUtils.isEmpty(dataList)) {
+            for (ContractCostInfo contractCostInfo1:dataList){
+                String taskId = "";
+                // 只有待审核状态才有taskId
+                if (StringUtils.isNotBlank(contractCostInfo1.getWorkflowId())) {
+                    JSONObject jsonObject = workflowService.getActiveTask(Lists.newArrayList(contractCostInfo1.getWorkflowId()), contractCostInfo1.getId());
+                    taskId = jsonObject.getString("taskId");
+                    contractCostInfo1.setTaskId(taskId);
+                }
+            }
+        }
+        Page<ContractCostInfo> page = new Page<>();
+        page.setRecords(dataList == null ? Lists.newArrayList() : dataList);
+        page.setTotal(dataCount == null ? 0 : dataCount);
+        page.setCurrent(contractCostInfo.getCurrentPage());
+        page.setSize(contractCostInfo.getPageSize());
+        return page;
+    }
+
+    /**
+     * 删除
+     * @param id
+     */
+    @Override
+    public void deleteInfo(String id) {
+        ContractCostInfo contractCostInfo=this.selectById(id);
+        this.deleteById(contractCostInfo.getId());
+
+    }
 }

+ 60 - 1
winsea-haixin-plugin-yiliangyiyun/src/main/resources/mapper/ContractCostInfoMapper.xml

@@ -1,5 +1,64 @@
 <?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.yh.saas.plugin.yiliangyiyun.mapper.ContractCostInfoMapper">
-
+    <!-- 获得合同费用总数 -->
+    <select id="getCountByCondition" parameterType="Map" resultType="java.lang.Integer">
+        SELECT
+        COUNT(id)
+        FROM contract_cost_info
+        WHERE
+        comp_id = #{compId}
+        and contract_type= #{contractType}
+        and delete_flag = '0'
+        <if test="searchType != null and searchType != ''">
+            <if test="searchType == 1">
+                AND type = '1'
+            </if>
+            <if test="searchType == 2">
+                AND type = '2'
+            </if>
+        </if>
+        <if test="contractNo != null and contractNo != ''">
+            AND contract_no = #{contractNo}
+        </if>
+    </select>
+    <!-- 合同费用列表查询 -->
+    <select id="getListByCondition" parameterType="Map"
+            resultType="com.yh.saas.plugin.yiliangyiyun.entity.ContractCostInfo">
+        SELECT
+        id,
+        type,
+        payee,
+        cost_type as costType,
+        cost_name as costName,
+        cost_price as costPrice,
+        remark,
+        person_name as personName,
+        address_url as addressUrl,
+        pay_deadline as payDeadline,
+        status,
+        create_date as createDate,
+        approve_status as approveStatus,
+        workflow_id as workflowId
+        FROM contract_cost_info
+        WHERE
+        comp_id = #{compId}
+        and contract_type= #{contractType}
+        and delete_flag = '0'
+        <if test="searchType != null and searchType != ''">
+            <if test="searchType == 1">
+                AND type = '1'
+            </if>
+            <if test="searchType == 2">
+                AND type = '2'
+            </if>
+        </if>
+        <if test="contractNo != null and contractNo != ''">
+            AND contract_no = #{contractNo}
+        </if>
+        ORDER BY update_date DESC
+        <if test="currentPage != null and currentPage != ''">
+            LIMIT ${startRecord}, ${pageSize}
+        </if>
+    </select>
 </mapper>