Browse Source

合同里程碑列表编辑

ljy121 1 year ago
parent
commit
ca57bc32f3

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/response/ContractChildResponse.java

@@ -47,6 +47,8 @@ public class ContractChildResponse {
      */
     private String clientName;
 
+    private String clientNumber;
+
     /**
      * 受托方名称
      */

+ 3 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/response/ContractResponse.java

@@ -49,6 +49,9 @@ public class ContractResponse {
      */
     private String clientName;
 
+
+    private String clientNumber;
+
     /**
      * 受托方名称
      */

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/constants/ResponseStatusEnum.java

@@ -13,6 +13,8 @@ public enum ResponseStatusEnum {
     PROJECT_WORKER_NOT_EXIST(2100,"项目和成员未存在关联关系"),
     PROJECT_MILESTONE_FINISHED(2110,"项目里程碑已完成,请勿重复操作"),
     PROJECT_CONTRACT_RELATED(2120,"项目已存在关联合同"),
+
+    CONTRACT_NOT_EXIST(2131,"合同不存在"),
     MAIN_CONTRACT_NOT_EXIST(2130,"主合同不存在");
 
     ResponseStatusEnum(int code, String message) {

+ 10 - 3
zjugis-business/src/main/java/com/zjugis/business/controller/ContractInvoiceController.java

@@ -26,7 +26,7 @@ public class ContractInvoiceController {
      * 服务对象
      */
     @Autowired
-    private ContractInvoiceService projectService;
+    private ContractInvoiceService contractInvoiceService;
 
     /**
      * 分页查询所有数据
@@ -36,7 +36,7 @@ public class ContractInvoiceController {
     @GetMapping("/contractInvoice/page")
     public CommonResult<Page<ContractInvoiceRespense>> page(ContractInvoiceDto contractMakeBillDto) {
 
-        return CommonResult.success(projectService.page(new Page<>(contractMakeBillDto.getPageNo(),contractMakeBillDto.getPageSize()), contractMakeBillDto));
+        return CommonResult.success(contractInvoiceService.page(new Page<>(contractMakeBillDto.getPageNo(),contractMakeBillDto.getPageSize()), contractMakeBillDto));
     }
     /**
      * 查询统计信息
@@ -45,7 +45,14 @@ public class ContractInvoiceController {
      */
     @GetMapping("/contractInvoice/getStatics")
     public CommonResult<ContractInvoiceStaticsRespense> getStatics(ContractInvoiceDto contractMakeBillDto) {
-        return CommonResult.success(projectService.getStatics(contractMakeBillDto));
+        return CommonResult.success(contractInvoiceService.getStatics(contractMakeBillDto));
+    }
+
+
+    @GetMapping("/contractInovoice/process")
+    public CommonResult<String> process(String contractId) {
+        String url = contractInvoiceService.process(contractId);
+        return CommonResult.success(url);
     }
 }
 

+ 2 - 0
zjugis-business/src/main/java/com/zjugis/business/service/ContractInvoiceService.java

@@ -23,5 +23,7 @@ public interface ContractInvoiceService {
     ContractInvoice selectByInstanceId(String id);
 
     int delById(String id);
+
+    String process(String contractId);
 }
 

+ 56 - 0
zjugis-business/src/main/java/com/zjugis/business/service/impl/ContractInvoiceServiceImpl.java

@@ -3,14 +3,29 @@ package com.zjugis.business.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zjugis.business.bean.dto.ContractInvoiceDto;
+import com.zjugis.business.bean.entity.Contract;
 import com.zjugis.business.bean.entity.ContractInvoice;
 import com.zjugis.business.bean.response.ContractInvoiceRespense;
 import com.zjugis.business.bean.response.ContractInvoiceStaticsRespense;
+import com.zjugis.business.constants.FlowStatusConstants;
 import com.zjugis.business.mapper.ContractInvoiceMapper;
 import com.zjugis.business.service.ContractInvoiceService;
+import com.zjugis.business.service.ContractService;
+import com.zjugis.framework.common.exception.ServiceException;
+import com.zjugis.framework.common.pojo.CommonResult;
+import com.zjugis.framework.security.core.util.SecurityFrameworkUtils;
+import com.zjugis.framework.workflow.model.ProcessDto;
+import com.zjugis.framework.workflow.rpc.remote.WorkflowClient;
+import com.zjugis.framework.workflow.utils.UrlUtils;
+import com.zjugis.module.system.api.user.AdminUserApi;
+import com.zjugis.module.system.api.user.dto.AdminUserRespDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
+
+import static com.zjugis.business.constants.ResponseStatusEnum.CONTRACT_NOT_EXIST;
+
 
 /**
  * 开票表服务实现类
@@ -24,6 +39,15 @@ public class ContractInvoiceServiceImpl implements ContractInvoiceService {
     @Autowired
     ContractInvoiceMapper contractInvoiceMapper;
 
+    @Autowired
+    ContractService contractService;
+
+    @Autowired
+    AdminUserApi adminUserApi;
+
+    @Autowired
+    WorkflowClient workflowClient;
+
     @Override
     public String insert(ContractInvoice contractInvoice) {
         contractInvoiceMapper.insert(contractInvoice);
@@ -60,5 +84,37 @@ public class ContractInvoiceServiceImpl implements ContractInvoiceService {
     public int delById(String id) {
         return contractInvoiceMapper.deleteById(id);
     }
+
+    /**
+     * @param contractId
+     * @return
+     */
+    @Override
+    public String process(String contractId) {
+        Contract contract = contractService.selectByPrimaryKey(contractId);
+        if(contract == null){
+            throw new ServiceException(CONTRACT_NOT_EXIST.getCode(),CONTRACT_NOT_EXIST.getMessage());
+        }
+        String userId = SecurityFrameworkUtils.getLoginUserId();
+        CommonResult<AdminUserRespDTO> userResp = adminUserApi.getUser(userId);
+        String mark = "kpsq";
+        ProcessDto processDto = new ProcessDto();
+        processDto.setFlowTemplateMark(mark);
+        processDto.setPromoterId(userId);
+        String returnUrl = workflowClient.createProcess(processDto);
+        ContractInvoice invoice = new ContractInvoice();
+        invoice.setInstanceId(UrlUtils.getParam(returnUrl,"flowInstanceId"));
+        invoice.setContractId(contractId);
+        invoice.setProjectId(contract.getProjectId());
+        AdminUserRespDTO user = userResp.getCheckedData();
+        invoice.setApplyWorkerName(user.getNickname());
+        invoice.setWorkerId(userId);
+        invoice.setApplyWorkerDept(user.getDeptName());
+        invoice.setApplyWorkerDeptId(user.getDeptId());
+        invoice.setApplyDate(LocalDate.now());
+        contract.setFlowStatus(FlowStatusConstants.FLOW_NOT_START);
+        insert(invoice);
+        return returnUrl;
+    }
 }
 

+ 1 - 1
zjugis-business/src/main/resources/mapper/oracle/ProjectMapper.xml

@@ -23,7 +23,7 @@
 
     <select id="page" resultType="com.zjugis.business.bean.entity.Project">
         SELECT P.*,C.CONTRACT_AMOUNT as outputValue ,C.CONTRACT_NUMBER as contractNumber FROM PROJECT P
-        LEFT JOIN CONTRACT C ON C.PROJECT_ID = P.ID
+        LEFT JOIN CONTRACT C ON C.PROJECT_ID = P.ID AND C.FLOW_STATUS = 90
         <if test="params != null and params.userId != null  and params.userId != ''">
             LEFT JOIN PROJECT_WORKER_RELATION PW ON PW.PROJECT_ID = P.ID
         </if>

+ 33 - 25
zjugis-business/src/main/resources/templates/FlowContract/apply.ftl

@@ -7,7 +7,7 @@ styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css' ]>
       </ul>
 
       <div class="ow-tab-scroll">
-          <div class="ow-tab-content" name="jbxx">
+          <div class="ow-tab-content" name="jbxx"  style="padding-bottom: 50px;">
               <div class="z-form-row" style="display: none;">
                   <input type="text" value="${formEntity.instanceId!}" name="contract$instanceId">
                   <input type="text" value="${formEntity.id!}" name="contract$id">
@@ -542,30 +542,35 @@ styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css' ]>
                       </table>
                   </div>
               </div>
-<#--              <div class="form-title">-->
-<#--                  <div class="form-icon">-->
-<#--                      <img src="/imgs/titleIcon.png" alt="">-->
-<#--                      <span>合同里程碑信息</span>-->
-<#--                  </div>-->
-<#--              </div>-->
-<#--              <div class="qjsjxx-box">-->
-<#--                  <table class="form-table-info">-->
-<#--                      <thead>-->
-<#--                      <tr>-->
-<#--                          <td>序号</td>-->
-<#--                          <td>里程碑信息</td>-->
-<#--                          <td>回款比例</td>-->
-<#--                          <td>应回款金额(元)</td>-->
-<#--                          <td>已回款金额(元)</td>-->
-<#--                          <td>预计到款时间</td>-->
-<#--                          <td>说明</td>-->
-<#--                          <td>操作</td>-->
-<#--                      </tr>-->
-<#--                      </thead>-->
-<#--                      <tbody class="tbody tbodyQjsq" name="milestone"></tbody>-->
-<#--                  </table>-->
-<#--              </div>-->
-
+              <div class="form-title">
+                  <div class="form-icon">
+                      <img src="/imgs/titleIcon.png" alt="">
+                      <span>合同里程碑信息</span>
+                  </div>
+                  <div class="form-btn">
+                      <div id="addData" name="addData">
+                          <img src="/imgs/addIcon.png" alt="">
+                          <span>新增</span>
+                      </div>
+                  </div>
+              </div>
+              <div class="qjsjxx-box">
+                  <table class="form-table-info">
+                      <thead>
+                      <tr>
+                          <td>序号</td>
+                          <td>里程碑信息</td>
+                          <td>回款比例</td>
+                          <td>应回款金额(元)</td>
+                          <td>已回款金额(元)</td>
+                          <td>预计到款时间</td>
+                          <td>说明</td>
+                          <td>操作</td>
+                      </tr>
+                      </thead>
+                      <tbody class="tbody tbodyQjsq" name="milestone"></tbody>
+                  </table>
+              </div>
           </div>
           <div class="ow-tab-content" name="yj">
               <#if WORKFLOW.OPINION! !="">
@@ -600,5 +605,8 @@ styles=[ '/flow/css/formCommon.css', '/OwCommon/OwCommon.css' ]>
       .jbxx-box-flex>table>tbody>tr>td:not(.th) {
           flex: 1;
       }
+    .qjsjxx-box .form-table-info tr:nth-child(1){
+        height: 63px;
+    }
   </style>
 </@w.workFlow>

+ 103 - 9
zjugis-business/src/main/resources/templates/FlowContract/js/apply.js

@@ -1,4 +1,5 @@
 (function () {
+    var lists = [];
     let flowInstanceId = "";
     let isView = "";
     window.onload = function () {
@@ -207,7 +208,6 @@
     }
 
     function addContractMilestone(){
-        var lists = []
         var trFragment = document.createDocumentFragment();
         let tbody = document.querySelectorAll('.tbody tr')
         let qjsjElements = document.getElementsByName("contract_milestone_seq");
@@ -216,7 +216,7 @@
         $(".tbody").append(trFragment)
         timeSelector({
             ele: ".endTimeRange" + lists.length,
-            name: "Contract[" + lists.length + "]$endTimeRange",
+            name: "ContractMilestone[" + lists.length + "]$endTimeRange",
             callback: function (val) {
             }
         })
@@ -228,6 +228,7 @@
                     var element = document.getElementById("contract_milestone_" + index);
                     element.remove();
                     buildSeq();
+                    updateView();
                 },
                 onCancel: function () {
 
@@ -235,12 +236,12 @@
             })
 
         })
-        z.ui.date("[name='Contract[" + lists.length + "]$planReturnTime']").init()
+        z.ui.date("[name='ContractMilestone[" + lists.length + "]$planReturnTime']").init()
         buildSeq();
         lists.push(dataObj)
 
         for (let i = 0; i < tbody.length; i++) {
-            z.ui.date("[name='Contract[" + i + "]$planReturnTime']").init({
+            z.ui.date("[name='ContractMilestone[" + i + "]$planReturnTime']").init({
                 done: function (value, date, endDate) {
                     //改变日期后触发
                     console.log(value);
@@ -258,17 +259,110 @@
         }
     }
 
+    function updateView() {
+        let tbodyQjsq = document.querySelector('.tbodyQjsq')
+        let html = ''
+        for (let i = 0; i < lists.length; i++) {
+            html += '<tr class="qjsjClass" id="contract_milestone_' + i + '" style="background:#fff">'
+            + '<td name="contract_milestone_seq">' + (index + 1) + '</td>'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$name">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
+            + '<div class="z-comp-input">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$returnAmount">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$actualReturnAmount">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
+            + '<div class="z-comp-date" name="ContractMilestone[' + index + ']$planReturnTime">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '<div style="width: 50%;margin-left: 5px;" class="dateTimeRange endTimeRange' + (index) + '">'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td>'
+            + '<div class="form-flex">'
+            + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$description">'
+            + '<input type="text" value="">'
+            + '</div>'
+            + '</div>'
+            + '</div>'
+            + '</td>'
+            + '<td>'
+            + '<div id="delBtn_' + (index) + '" class="table-btn delBtn_' + (index) + '" data-index="' + (index) + '">'
+            + '<span>删除</span>'
+            + '</div>'
+            + '</td></tr>';
+        }
+        tbodyQjsq.innerHTML = html
+        for (let i = 0; i < lists.length; i++) {
+            $("#delBtn_" + i).click(function () {
+                z.ui.confirm("compid").init({
+                    content: "确定删除吗?",
+                    onConfirm: function () {
+                        var element = document.getElementById("contract_milestone_" + index);
+                        element.remove();
+                        buildSeq();
+                        updateView();
+                    },
+                    onCancel: function () {
+
+                    }
+                })
+
+            })
+            // if(viewState === 'v' || read=== '1'){
+            //     detailReadonly(i)
+            // }
+        }
+        detailTotalInit()
+    }
+
 
 
     function generateTableTrHtml(index) {
         var trDom = document.createElement("tr");
         trDom.style.backgroundColor = "#fff";
         trDom.id = "contract_milestone_" + index;
+        trDom.className = 'qjsjClass';
         trDom.innerHTML = '<td name="contract_milestone_seq">' + (index + 1) + '</td>'
             + '<td>'
             + '<div class="form-flex">'
             + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
-            + '<div class="z-comp-input" name="Contract[' + index + ']$name">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$name">'
             + '<input type="text" value="">'
             + '</div>'
             + '</div>'
@@ -286,7 +380,7 @@
             + '<td>'
             + '<div class="form-flex">'
             + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
-            + '<div class="z-comp-input" name="Contract[' + index + ']$returnAmount">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$returnAmount">'
             + '<input type="text" value="">'
             + '</div>'
             + '</div>'
@@ -295,7 +389,7 @@
             + '<td>'
             + '<div class="form-flex">'
             + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
-            + '<div class="z-comp-input" name="Contract[' + index + ']$actualReturnAmount">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$actualReturnAmount">'
             + '<input type="text" value="">'
             + '</div>'
             + '</div>'
@@ -304,7 +398,7 @@
             + '<td>'
             + '<div class="form-flex">'
             + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
-            + '<div class="z-comp-date" name="Contract[' + index + ']$planReturnTime">'
+            + '<div class="z-comp-date" name="ContractMilestone[' + index + ']$planReturnTime">'
             + '<input type="text" value="">'
             + '</div>'
             + '</div>'
@@ -315,7 +409,7 @@
             + '<td>'
             + '<div class="form-flex">'
             + '<div class="form-item" style="width: 50%;margin-right: 5px;">'
-            + '<div class="z-comp-input" name="Contract[' + index + ']$description">'
+            + '<div class="z-comp-input" name="ContractMilestone[' + index + ']$description">'
             + '<input type="text" value="">'
             + '</div>'
             + '</div>'