Merge remote-tracking branch 'origin/1.2.0' into 1.2.0

master
pengqiang 2022-12-23 18:01:22 +08:00
commit e12961f1f1
2 changed files with 69 additions and 84 deletions

View File

@ -2,6 +2,7 @@ package cn.palmte.work.controller.backend;
import cn.palmte.work.config.activiti.ActApproveTypeEnum;
import cn.palmte.work.config.activiti.ActProjectTypeEnum;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@ -26,10 +27,12 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -45,10 +48,12 @@ import cn.palmte.work.model.DeptRepository;
import cn.palmte.work.model.Project;
import cn.palmte.work.model.ProjectBudgetIncomeDetail;
import cn.palmte.work.model.ProjectRepository;
import cn.palmte.work.model.ProjectTaskRecord;
import cn.palmte.work.model.enums.CooperationType;
import cn.palmte.work.model.enums.Enumerable;
import cn.palmte.work.model.enums.ProcessStatus;
import cn.palmte.work.model.enums.ProcessType;
import cn.palmte.work.model.enums.ProcurementMode;
import cn.palmte.work.model.enums.ProjectType;
import cn.palmte.work.model.enums.SealType;
import cn.palmte.work.model.process.ProcessAttachment;
@ -63,10 +68,12 @@ import cn.palmte.work.model.process.form.SaleContractProcessForm;
import cn.palmte.work.service.ProjectBudgetService;
import cn.palmte.work.service.ProjectInstanceService;
import cn.palmte.work.service.ProjectProcessService;
import cn.palmte.work.service.ProjectTaskRecordService;
import cn.palmte.work.utils.InterfaceUtil;
import lombok.Builder;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import sun.java2d.pipe.SpanShapeRenderer;
/**
* @author <a href="https://github.com/TAKETODAY">Harry Yang</a>
@ -88,6 +95,7 @@ public class ProcessController {
private final ProjectProcessRepository repository;
private final ProjectInstanceService projectInstanceService;
private final ProjectProcessService processService;
private final ProjectTaskRecordService projectTaskRecordService;
static class FormMetadata {
// 部门
@ -125,6 +133,7 @@ public class ProcessController {
@GetMapping("/edit/{id}")
public String editProcess(Model model, @PathVariable int id) {
model.addAttribute("sealTypes", SealType.values());
model.addAttribute("procurementMode", ProcurementMode.values());
model.addAttribute("taxRate", Arrays.asList(0, 1, 3, 4, 5, 6, 9, 10, 13));
model.addAttribute("processId", id);
return "/admin/business/process-edit";
@ -449,7 +458,7 @@ public class ProcessController {
public void audit(@RequestBody @Valid AuditForm form) {
ProjectProcess process = repository.findOne(form.processId);
ActApproveTypeEnum approveType = form.processStatus == ProcessStatus.audit_passed ? ActApproveTypeEnum.APPROVAL_PASSED :
ActApproveTypeEnum.APPROVAL_UN_PASS;
ActApproveTypeEnum.APPROVAL_UN_PASS;
switch (process.getProcessType()) {
case business_procurement:
projectInstanceService.completeTaskByProjectId(process.getId(), ActProjectTypeEnum.BUSINESS_PURCHASE, approveType, form.auditOpinion);
@ -484,14 +493,22 @@ public class ProcessController {
@ResponseBody
@GetMapping("/audits/{id}")
public List<Map<String, String>> showAudits(@PathVariable("id") int id) {
ArrayList<Map<String, String>> ret = new ArrayList<>();
// ArrayList<Map<String, String>> ret = new ArrayList<>();
// ret.add(create("2021-01-03 12:07:45", "提交审核"));
// ret.add(create("2021-01-28 12:15:05", "工程运维管理部孙果审核已通过"));
// ret.add(create("2021-02-03 22:01:12", "系统产品集成部尹浩审核已通过"));
// ret.add(create("2021-03-03 22:05:12", "财务部主管何丹审核已通过"));
ret.add(create("2021-01-03 12:07:45", "提交审核"));
ret.add(create("2021-01-28 12:15:05", "工程运维管理部孙果审核已通过"));
ret.add(create("2021-02-03 22:01:12", "系统产品集成部尹浩审核已通过"));
ret.add(create("2021-03-03 22:05:12", "财务部主管何丹审核已通过"));
return ret;
ProjectProcess process = processService.getById(id);
ProcessType processType = process.getProcessType();
List<ProjectTaskRecord> projectTaskRecords = projectTaskRecordService.listV2(id,
processType == ProcessType.sale_contract ? ActProjectTypeEnum.SALE_CONTRACT : ActProjectTypeEnum.BUSINESS_PURCHASE);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return projectTaskRecords.stream()
.map(item -> {
Date createTime = item.getCreateTime();
return create(format.format(createTime), item.getTaskName() + item.getTaskComment());
}).collect(Collectors.toList());
}
private Map<String, String> create(String timestamp, String content) {

View File

@ -52,7 +52,7 @@
<div class="am-g">
<#-- 新增销售合同流程 -->
<div class="am-u-sm-12 am-u-md-12" v-if="isSalesContractProcessMode">
<div class="am-u-sm-12 am-u-md-12" v-if="isSalesContractMode">
<el-form :inline="true" ref="saleContractProcessForm" :model="processForm" label-position="right" label-width="100px">
<div class="am-form-inline">
@ -70,7 +70,15 @@
<span>{{processForm.applyDate}}</span>
</el-form-item>
<el-form-item label="项目类型">
<el-form-item label="采购模式" v-if="isProcurementContractMode">
<el-select v-model="processForm.procurementMode" placeholder="请选择采购模式">
<#list procurementMode as item>
<el-option label="${item.description}" value="${sealType.name()}"></el-option>
</#list>
</el-select>
</el-form-item>
<el-form-item label="项目类型" v-if="isSalesContractMode">
<span>{{processForm.projectType}}</span>
</el-form-item>
@ -106,10 +114,16 @@
<el-input placeholder="请输入合同编号" v-model="processForm.contractNo"></el-input>
</el-form-item>
<el-form-item label="合同名称" :rules="[{ required: true, message: '合同名称不能为空'}]" prop="contractName">
<el-form-item v-if="isSalesContractMode" label="合同名称" :rules="[{ required: true, message: '合同名称不能为空'}]"
prop="contractName">
<el-input placeholder="请输入合同名称" v-model="processForm.contractName"></el-input>
</el-form-item>
<el-form-item v-if="isProcurementContractMode" label="采购合同名称"
:rules="[{ required: true, message: '采购合同名称不能为空'}]" prop="contractName">
<el-input placeholder="请输入采购合同名称" v-model="processForm.contractName"></el-input>
</el-form-item>
<el-form-item label="合同金额">
<span>{{processForm.contractAmount}}元</span>
</el-form-item>
@ -117,12 +131,15 @@
</div>
<div>
<el-form-item label="客户名称" :rules="[{ required: true, message: '客户名称不能为空'}]">
<el-form-item v-if="isSalesContractMode" label="客户名称" :rules="[{ required: true, message: '客户名称不能为空'}]">
<el-input placeholder="请输入客户名称" v-model="processForm.clientName"></el-input>
</el-form-item>
<el-form-item v-if="isProcurementContractMode" label="供应商名称" :rules="[{ required: true, message: '供应商名称不能为空'}]">
<el-input placeholder="请输入供应商" v-model="processForm.supplierName"></el-input>
</el-form-item>
<el-form-item label="最终用户名称">
<#--TODO 最终用户名称-->
<span>{{processForm.terminalCustomer}}</span>
</el-form-item>
</div>
@ -162,10 +179,17 @@
</div>
<div>
<el-form-item label="收款条件" :rules="[{ required: true, message: '收款条件不能为空'}]" prop="paymentTerms">
<el-form-item v-if="isSalesContractMode" label="收款条件" :rules="[{ required: true, message: '收款条件不能为空'}]"
prop="paymentTerms">
<el-input type="textarea" :autosize="{ minRows: 3, maxRows: 10}" cols="90" maxlength="5000" show-word-limit
v-model="processForm.paymentTerms" placeholder="请输入收款条件限制5000字"></el-input>
</el-form-item>
<el-form-item v-if="isProcurementContractMode" label="付款条件" :rules="[{ required: true, message: '付款条件不能为空'}]"
prop="paymentTerms">
<el-input type="textarea" :autosize="{ minRows: 3, maxRows: 10}" cols="90" maxlength="5000" show-word-limit
v-model="processForm.paymentTerms" placeholder="请输入付款条件限制5000字"></el-input>
</el-form-item>
</div>
<div>
@ -197,9 +221,16 @@
</el-form-item>
</div>
<div v-if="isProcurementContractMode">
供应商比选材料
</div>
</el-form>
<#-- <el-row justify="space-around" type="flex" class="row-bg">-->
<el-row>
<el-button type="info" @click="goToHome">返回上一级</el-button>
<el-button type="primary" @click="saveDraft">保存草稿</el-button>
@ -240,77 +271,11 @@
<el-button type="primary" @click="submitToSaleContractProcess">保存并返回上一级</el-button>
</el-row>
</div>
<#-- 新增业务采购合同流程 -->
<div class="am-u-sm-12 am-u-md-12" id="newBusinessProcurementContractProcess" v-if="isBusinessProcurementContractProcessMode">
<form role="form" id="newBusinessProcurementContractProcessForm">
<div class="am-form-inline">
<div class="am-form-group">
<label class="am-u-md-3 am-form-label">项目编号</label>
<el-autocomplete v-model="processForm.serialNumber" :fetch-suggestions="queryProject"
placeholder="请输入内容" @select="handleSelectProject"></el-autocomplete>
</div>
<div class="am-form-group">
<label class="am-u-md-3 am-form-label">项目标题</label>
<el-input placeholder="请输入内容" v-model="processForm.title" clearable></el-input>
</div>
<div class="am-form-group">
<label class="am-u-md-3 am-form-label">申请时间</label>
<input type="text" class="am-form-field am-u-sm-2" :value="processForm.time"/>
</div>
<div class="am-form-group">
<label class="am-u-sm-3 am-form-label">采购模式</label>
<input type="text" class="am-form-field" :value="processForm.time"/>
</div>
<div class="am-form-group">
<label class="am-u-md-3 am-form-label">合作类型</label>
<input type="text" class="am-form-field" :value="processForm.time"/>
</div>
</div>
<div class="am-form-inline">
<div class="am-form-group am-u-md-4">
<label class="am-form-label">申请部门</label>
<input type="text" class="am-form-field" :value="processForm.title"/>
<input type="text" class="am-form-field" :value="processForm.time"/>
<input type="text" class="am-form-field" :value="processForm.time"/>
</div>
<div class="am-form-group am-u-md-4">
<label class="am-form-label">申请人</label>
<input type="text" class="am-form-field" value="周瑾"/>
</div>
<div class="am-form-group am-u-md-4">
<label class="am-form-label">申请部门领导</label>
<input type="text" class="am-form-field" value="尹浩"/>
</div>
</div>
<div class="am-form-inline">
</div>
<div class="am-form-inline">
<button type="submit" class="am-btn am-btn-default">登录</button>
</div>
</form>
</div>
<#-- 选择 业务采购清单明细 -->
<div class="am-u-sm-12 am-u-md-12" v-if="isBusinessProcurementContractProcessMode">
<div class="am-u-sm-12 am-u-md-12" v-if="isProcurementContractMode">
<el-table style="width: 100%" border>
<el-table-column prop="fee" label="费用项目" width="180"></el-table-column>
@ -380,6 +345,7 @@
processForm: {
sealTypes: [],
},
processType: '',
projectSelected: false,
applySectorOptions: [
{
@ -668,6 +634,7 @@
const applyDept = process.applyDept.split(',')
this.initForm({ ...form, ...process, ...contract, applyDept })
this.projectSelected = true
this.processType = process.processType
this.incomeDetails = incomeDetails.map(detail => ({
...detail, type: computeType(detail.type)
}))
@ -675,6 +642,7 @@
name: item.name, url: item.uri
}))
if (process.processType === 'sale_contract') {
this.changeMode(saleContractProcess)
}
@ -810,10 +778,10 @@
isButtonMode() {
return this.mode === BUTTON
},
isBusinessProcurementContractProcessMode() {
isProcurementContractMode() {
return this.mode === newBusinessProcurementContractProcess
},
isSalesContractProcessMode() {
isSalesContractMode() {
return this.mode === saleContractProcess
},
isSaleContractDetailMode() {