新增采购单
This commit is contained in:
parent
b8658c97b5
commit
caa5602f48
|
@ -11,8 +11,10 @@ import com.alibaba.fastjson.JSON;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.snow.common.constant.SequenceContants;
|
import com.snow.common.constant.SequenceContants;
|
||||||
import com.snow.common.utils.poi.EasyExcelUtil;
|
import com.snow.common.utils.poi.EasyExcelUtil;
|
||||||
|
import com.snow.flowable.domain.CompleteTaskDTO;
|
||||||
import com.snow.flowable.domain.leave.SysOaLeaveForm;
|
import com.snow.flowable.domain.leave.SysOaLeaveForm;
|
||||||
import com.snow.flowable.domain.purchaseOrder.PurchaseOrderForm;
|
import com.snow.flowable.domain.purchaseOrder.PurchaseOrderForm;
|
||||||
|
import com.snow.flowable.domain.purchaseOrder.PurchaseOrderMainTask;
|
||||||
import com.snow.flowable.service.FlowableService;
|
import com.snow.flowable.service.FlowableService;
|
||||||
import com.snow.framework.excel.FinanceAlipayFlowListener;
|
import com.snow.framework.excel.FinanceAlipayFlowListener;
|
||||||
import com.snow.framework.excel.PurchaseOrderListener;
|
import com.snow.framework.excel.PurchaseOrderListener;
|
||||||
|
@ -231,4 +233,28 @@ public class PurchaseOrderController extends BaseController
|
||||||
return prefix + "/detail";
|
return prefix + "/detail";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重新申请
|
||||||
|
*/
|
||||||
|
@PostMapping("/restart")
|
||||||
|
@ResponseBody
|
||||||
|
@Transactional
|
||||||
|
public AjaxResult restart(PurchaseOrderMainTask purchaseOrderMainTask)
|
||||||
|
{
|
||||||
|
SysUser sysUser = ShiroUtils.getSysUser();
|
||||||
|
purchaseOrderMainTask.setUpdateBy(String.valueOf(sysUser.getUserId()));
|
||||||
|
PurchaseOrderMain purchaseOrderMain=new PurchaseOrderMain();
|
||||||
|
BeanUtils.copyProperties(purchaseOrderMainTask,purchaseOrderMain);
|
||||||
|
int i = purchaseOrderMainService.updatePurchaseOrderMain(purchaseOrderMain);
|
||||||
|
CompleteTaskDTO completeTaskDTO=new CompleteTaskDTO();
|
||||||
|
completeTaskDTO.setUserId(String.valueOf(sysUser.getUserId()));
|
||||||
|
completeTaskDTO.setComment(purchaseOrderMainTask.getComment());
|
||||||
|
completeTaskDTO.setIsStart(purchaseOrderMainTask.getIsStart());
|
||||||
|
completeTaskDTO.setFiles(purchaseOrderMainTask.getFiles());
|
||||||
|
completeTaskDTO.setTaskId(purchaseOrderMainTask.getTaskId());
|
||||||
|
flowableService.completeTask(completeTaskDTO);
|
||||||
|
return toAjax(i);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
|
||||||
<head>
|
<head>
|
||||||
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet" />
|
<th:block th:include="include :: header('采购单审核')" />
|
||||||
<link th:href="@{/css/font-awesome.min.css}" rel="stylesheet" />
|
<th:block th:include="include :: datetimepicker-css" />
|
||||||
<!-- bootstrap-table 表格插件样式 -->
|
|
||||||
<link th:href="@{/ajax/libs/bootstrap-table/bootstrap-table.min.css}" rel="stylesheet"/>
|
|
||||||
<link th:href="@{/css/animate.css}" rel="stylesheet" />
|
|
||||||
<link th:href="@{/css/style.css}" rel="stylesheet" />
|
|
||||||
<link th:href="@{/ruoyi/css/ry-ui.css}" rel="stylesheet" />
|
|
||||||
<th:block th:include="include :: bootstrap-fileinput-css"/>
|
<th:block th:include="include :: bootstrap-fileinput-css"/>
|
||||||
</head>
|
</head>
|
||||||
<body class="white-bg" >
|
<body class="white-bg" >
|
||||||
<form class="form-horizontal m-t" id="signupForm" th:object="${appFrom}">
|
<form class="form-horizontal m-t" id="signupForm" th:object="${appFrom}">
|
||||||
<input class="form-control" type="hidden" name="taskId" th:value="${taskId}"/>
|
<input class="form-control" type="hidden" name="taskId" th:value="${taskId}"/>
|
||||||
|
<input class="form-control" type="hidden" id="processInstanceId" th:value="${processInstanceId}"/>
|
||||||
|
|
||||||
<input class="form-control" type="hidden" name="businessKey" th:value="${appFrom.orderNo}"/>
|
<input class="form-control" type="hidden" name="businessKey" th:value="${appFrom.orderNo}"/>
|
||||||
<input name="id" th:value="${appFrom.id}" type="hidden">
|
<input name="id" th:value="${appFrom.id}" type="hidden">
|
||||||
<h2 class="form-header h2" align="center" >采购单信息</h2>
|
<h2 class="form-header h2" align="center" >采购单信息</h2>
|
||||||
|
@ -20,31 +17,19 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">订单号:</label>
|
<label class="col-sm-3 control-label">订单号:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="orderNo" th:field="*{orderNo}" class="form-control" type="text">
|
<input name="orderNo" th:field="*{orderNo}" class="form-control" type="text" readonly>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">总数量:</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input name="totalQuantity" th:field="*{totalQuantity}" class="form-control" type="text">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="col-sm-3 control-label">采购总金额:</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input name="totalPrice" th:field="*{totalPrice}" class="form-control" type="text">
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">采购标题:</label>
|
<label class="col-sm-3 control-label">采购标题:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="title" th:field="*{title}" class="form-control" type="text">
|
<input name="title" th:field="*{title}" class="form-control" type="text" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">供应商:</label>
|
<label class="col-sm-3 control-label">供应商:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input name="supplierName" th:field="*{supplierName}" class="form-control" type="text">
|
<input name="supplierName" th:field="*{supplierName}" class="form-control" type="text" >
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -74,21 +59,32 @@
|
||||||
</div>
|
</div>
|
||||||
<h4 class="form-header h4">采购单明细信息</h4>
|
<h4 class="form-header h4">采购单明细信息</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-11 col-sm-offset-1">
|
||||||
<button type="button" class="btn btn-success btn-sm" onclick="addColumn()"><i class="fa fa-plus"> 增加</i></button>
|
<button type="button" class="btn btn-success btn-sm" onclick="addColumn()"><i class="fa fa-plus"> 增加</i></button>
|
||||||
<button type="button" class="btn btn-warning btn-sm" onclick="sub.delColumn()"><i class="fa fa-minus"> 删除</i></button>
|
<button type="button" class="btn btn-warning btn-sm" onclick="sub.delColumn()"><i class="fa fa-minus"> 删除</i></button>
|
||||||
<div class="col-sm-12 select-table table-striped">
|
<div class="col-sm-11 select-table table-striped">
|
||||||
<table id="bootstrap-table"></table>
|
<table id="bootstrap-table"></table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
<h4 class="form-header h4">流程图</h4>
|
||||||
|
<div class="col-sm-offset-1">
|
||||||
|
<img class="imgcode" width="85%"/>
|
||||||
|
</div>
|
||||||
<h4 class="form-header h4">填写信息</h4>
|
<h4 class="form-header h4">填写信息</h4>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label">审批结果:</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<div class="radio-box" th:each="dict : ${@dict.getType('process_check_status')}">
|
||||||
|
<input type="radio" th:id="${dict.dictCode}" name="isStart" th:value="${dict.dictValue}" required>
|
||||||
|
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label">审批意见:</label>
|
<label class="col-sm-3 control-label">审批意见:</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<textarea name="suggestion" class="form-control"></textarea>
|
<textarea name="comment" class="form-control"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -100,12 +96,22 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-6 col-sm-10">
|
||||||
|
<button type="button" class="btn btn-sm btn-success" onclick="submitCheckHandler()"><i class="fa fa-check"></i>提 交</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
<th:block th:include="include :: footer" />
|
<th:block th:include="include :: footer" />
|
||||||
<script src="http://www.jq22.com/jquery/jquery-migrate-1.2.1.min.js"></script>
|
|
||||||
<script th:src="@{/js/jquery.jqprint-0.3.js}"></script>
|
|
||||||
<th:block th:include="include :: bootstrap-fileinput-js"/>
|
<th:block th:include="include :: bootstrap-fileinput-js"/>
|
||||||
|
<th:block th:include="include :: datetimepicker-js" />
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
|
var files=new Array();
|
||||||
|
$(function () {
|
||||||
|
var processInstanceId= $("#processInstanceId").val();
|
||||||
|
var url ="/modeler/getProcessDiagram?processInstanceId="+processInstanceId;
|
||||||
|
$(".imgcode").attr("src", url);
|
||||||
|
});
|
||||||
$(".file-upload").each(function (i) {
|
$(".file-upload").each(function (i) {
|
||||||
var val = $("input[name='" + this.id + "']").val();
|
var val = $("input[name='" + this.id + "']").val();
|
||||||
$(this).fileinput({
|
$(this).fileinput({
|
||||||
|
@ -115,28 +121,44 @@
|
||||||
maxFileCount: 1,
|
maxFileCount: 1,
|
||||||
autoReplace: true
|
autoReplace: true
|
||||||
}).on('fileuploaded', function (event, data, previewId, index) {
|
}).on('fileuploaded', function (event, data, previewId, index) {
|
||||||
$("input[name='" + event.currentTarget.id + "']").val(data.response.url)
|
files.push({"key": data.response.fileKey,"name": data.response.fileName, "url":data.response.url});
|
||||||
|
// $("input[name='" + event.currentTarget.id + "']").val(data.response.url)
|
||||||
}).on('fileremoved', function (event, id, index) {
|
}).on('fileremoved', function (event, id, index) {
|
||||||
$("input[name='" + event.currentTarget.id + "']").val('')
|
$("input[name='" + event.currentTarget.id + "']").val('')
|
||||||
})
|
})
|
||||||
$(this).fileinput('_initFileActions');
|
$(this).fileinput('_initFileActions');
|
||||||
});
|
});
|
||||||
|
$("input[name='orderTime']").datetimepicker({
|
||||||
|
format: "yyyy-mm-dd",
|
||||||
|
minView: "month",
|
||||||
|
autoclose: true
|
||||||
|
});
|
||||||
|
|
||||||
|
$("input[name='deliveryDate']").datetimepicker({
|
||||||
|
format: "yyyy-mm-dd",
|
||||||
|
minView: "month",
|
||||||
|
autoclose: true
|
||||||
|
});
|
||||||
function submitCheckHandler() {
|
function submitCheckHandler() {
|
||||||
if ($.validate.form()) {
|
if ($.validate.form()) {
|
||||||
var data = $("#signupForm").serializeArray();
|
var data = $("#signupForm").serializeArray();
|
||||||
data.push({"name": "checkStatus", "value": 0});
|
for(var i=0;i<data.length;i++){
|
||||||
$.operate.saveTab("/system/leave/managerFinishTask", data);
|
if(data[i].name=='comment'&&(data[i].value==''||data[i].value==null)){
|
||||||
|
$.modal.alertError("请填写审批意见");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(files!=null||files!=''){
|
||||||
|
for(var i=0;i<files.length;i++){
|
||||||
|
data.push({"name": "files["+i+"].key", "value":files[i].key});
|
||||||
|
data.push({"name": "files["+i+"].name", "value":files[i].name});
|
||||||
|
data.push({"name": "files["+i+"].url", "value":files[i].url});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(data);
|
||||||
|
$.operate.saveTab("/system/purchaseOrder/restart", data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function submitHandler() {
|
|
||||||
if ($.validate.form()) {
|
|
||||||
var data = $("#signupForm").serializeArray();
|
|
||||||
data.push({"name": "checkStatus", "value": 1});
|
|
||||||
$.operate.saveTab("/system/leave/managerFinishTask", data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
var options = {
|
var options = {
|
||||||
data: [[${appFrom.purchaseOrderItemList}]],
|
data: [[${appFrom.purchaseOrderItemList}]],
|
||||||
|
@ -146,7 +168,9 @@
|
||||||
showToggle: false,
|
showToggle: false,
|
||||||
showColumns: false,
|
showColumns: false,
|
||||||
sidePagination: "client",
|
sidePagination: "client",
|
||||||
columns: [
|
columns: [{
|
||||||
|
checkbox: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
field: 'index',
|
field: 'index',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
|
@ -159,41 +183,81 @@
|
||||||
{
|
{
|
||||||
field: 'goodsNo',
|
field: 'goodsNo',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '货物编号'
|
title: '货物编号',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].goodsNo' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'goodsName',
|
field: 'goodsName',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '名称'
|
title: '名称',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].goodsName' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'goodsSize',
|
field: 'goodsSize',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '规格'
|
title: '规格',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].goodsSize' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'goodsQuantity',
|
field: 'goodsQuantity',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '数量'
|
title: '数量',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].goodsQuantity' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'goodsPrice',
|
field: 'goodsPrice',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '单价'
|
title: '单价',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].goodsPrice' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'totalPrice',
|
field: 'totalPrice',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '总价'
|
title: '总价',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].totalPrice' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'remark',
|
field: 'remark',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
title: '备注'
|
title: '备注',
|
||||||
|
formatter: function(value, row, index) {
|
||||||
|
var html = $.common.sprintf("<input class='form-control' type='text' name='purchaseOrderItemList[%s].remark' value='%s'>", index, value);
|
||||||
|
return html;
|
||||||
|
}
|
||||||
}]
|
}]
|
||||||
};
|
};
|
||||||
$.table.init(options);
|
$.table.init(options);
|
||||||
});
|
});
|
||||||
|
function addColumn() {
|
||||||
|
var row = {
|
||||||
|
goodsNo: "",
|
||||||
|
goodsName: "",
|
||||||
|
goodsSize: "",
|
||||||
|
goodsQuantity: "",
|
||||||
|
goodsPrice: "",
|
||||||
|
totalPrice: "",
|
||||||
|
remark: ""
|
||||||
|
};
|
||||||
|
sub.addColumn(row);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -55,9 +55,6 @@ public class CompleteTaskDTO implements Serializable {
|
||||||
private Map<String,Object> paramMap;
|
private Map<String,Object> paramMap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private String attachments;
|
|
||||||
|
|
||||||
public final static String IS_PASS="isPass";
|
public final static String IS_PASS="isPass";
|
||||||
|
|
||||||
public final static String IS_START="isStart";
|
public final static String IS_START="isStart";
|
||||||
|
|
|
@ -6,6 +6,8 @@ import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @program: snow
|
* @program: snow
|
||||||
|
@ -19,18 +21,41 @@ import java.io.Serializable;
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class FinishTaskDTO implements Serializable {
|
public class FinishTaskDTO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务ID
|
||||||
|
*/
|
||||||
private String taskId;
|
private String taskId;
|
||||||
|
|
||||||
private String suggestion;
|
|
||||||
|
|
||||||
private String suggestionFileUrl;
|
|
||||||
/**
|
/**
|
||||||
* 0通过,1--驳回
|
* 完成任务人
|
||||||
*/
|
*/
|
||||||
private Integer checkStatus;
|
private String userId;
|
||||||
/**
|
/**
|
||||||
* 业务参数
|
* 是否通过
|
||||||
*/
|
*/
|
||||||
private String businessKey;
|
private Boolean isPass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否通过
|
||||||
|
*/
|
||||||
|
private Boolean isStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批意见
|
||||||
|
*/
|
||||||
|
private String comment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批节点的相关文件(只在审批节点展示)
|
||||||
|
*/
|
||||||
|
private List<FileEntry> files;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public final static String IS_PASS="isPass";
|
||||||
|
|
||||||
|
public final static String IS_START="isStart";
|
||||||
|
|
||||||
|
public final static String FILES="files";
|
||||||
|
|
||||||
|
public final static String COMMENT="comment";
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
package com.snow.flowable.domain.purchaseOrder;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.snow.common.core.domain.BaseEntity;
|
||||||
|
import com.snow.flowable.domain.FileEntry;
|
||||||
|
import com.snow.system.domain.PurchaseOrderItem;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author qimingjin
|
||||||
|
* @Title:
|
||||||
|
* @Description:
|
||||||
|
* @date 2021/1/13 13:47
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PurchaseOrderMainTask extends BaseEntity implements Serializable {
|
||||||
|
/** id */
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
/** 订单号 */
|
||||||
|
private String orderNo;
|
||||||
|
|
||||||
|
/** 总数量 */
|
||||||
|
private BigDecimal totalQuantity;
|
||||||
|
|
||||||
|
/** 采购总金额 */
|
||||||
|
private BigDecimal totalPrice;
|
||||||
|
|
||||||
|
/** 采购标题 */
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/** 供应商名称 */
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
/** 订货日期 */
|
||||||
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||||
|
private Date orderTime;
|
||||||
|
|
||||||
|
/** 交货日期 */
|
||||||
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
|
||||||
|
private Date deliveryDate;
|
||||||
|
|
||||||
|
/** 审批状态 */
|
||||||
|
private Long processStatus;
|
||||||
|
|
||||||
|
/** 采购人 */
|
||||||
|
private String belongUser;
|
||||||
|
|
||||||
|
|
||||||
|
private Long isDelete;
|
||||||
|
|
||||||
|
private List<PurchaseOrderItem> purchaseOrderItemList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务ID
|
||||||
|
*/
|
||||||
|
private String taskId;
|
||||||
|
/**
|
||||||
|
* 完成任务人
|
||||||
|
*/
|
||||||
|
private String userId;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否通过
|
||||||
|
*/
|
||||||
|
private Boolean isStart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审批意见
|
||||||
|
*/
|
||||||
|
private String comment;
|
||||||
|
/**
|
||||||
|
* 审批节点的相关文件(只在审批节点展示)
|
||||||
|
*/
|
||||||
|
|
||||||
|
private List<FileEntry> files;
|
||||||
|
|
||||||
|
}
|
|
@ -126,6 +126,13 @@ public interface FlowableService {
|
||||||
*/
|
*/
|
||||||
void completeTask(CompleteTaskDTO completeTaskDTO);
|
void completeTask(CompleteTaskDTO completeTaskDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 完成任务
|
||||||
|
* @param completeTaskDTO
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
<T extends CompleteTaskDTO> void submitTask(T completeTaskDTO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取流程图
|
* 获取流程图
|
||||||
* @param httpServletResponse
|
* @param httpServletResponse
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.snow.flowable.service;
|
||||||
|
|
||||||
|
import com.snow.flowable.domain.CompleteTaskDTO;
|
||||||
|
import com.snow.flowable.domain.FinishTaskDTO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author qimingjin
|
||||||
|
* @Title: flowable 任务相关接口
|
||||||
|
* @Description:
|
||||||
|
* @date 2021/1/13 15:54
|
||||||
|
*/
|
||||||
|
public interface FlowableTaskService {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 完成任务
|
||||||
|
* @param finishTaskDTO
|
||||||
|
* @param <T>
|
||||||
|
*/
|
||||||
|
<T extends FinishTaskDTO> void submitTask(T finishTaskDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转办任务
|
||||||
|
* @param taskId 任务ID
|
||||||
|
* @param curUserId 当前人ID
|
||||||
|
* @param targetUserId 目标人ID
|
||||||
|
*/
|
||||||
|
void transferTask(String taskId,String curUserId,String targetUserId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 委派任务
|
||||||
|
* @param taskId 任务ID
|
||||||
|
* @param curUserId 当前人ID
|
||||||
|
* @param targetUserId 目标人ID
|
||||||
|
*/
|
||||||
|
void delegateTask(String taskId,String curUserId,String targetUserId);
|
||||||
|
|
||||||
|
void suspendOrActiveApply(String instanceId, String suspendState);
|
||||||
|
|
||||||
|
}
|
|
@ -492,7 +492,11 @@ public class FlowableServiceImpl implements FlowableService {
|
||||||
taskService.complete(task.getId(),paramMap,true);
|
taskService.complete(task.getId(),paramMap,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends CompleteTaskDTO> void submitTask(T completeTaskDTO) {
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void getProcessDiagram(HttpServletResponse httpServletResponse, String processId) {
|
public void getProcessDiagram(HttpServletResponse httpServletResponse, String processId) {
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
package com.snow.flowable.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.snow.common.exception.BusinessException;
|
||||||
|
import com.snow.flowable.common.constants.FlowConstants;
|
||||||
|
import com.snow.flowable.domain.CompleteTaskDTO;
|
||||||
|
import com.snow.flowable.domain.FileEntry;
|
||||||
|
import com.snow.flowable.domain.FinishTaskDTO;
|
||||||
|
import com.snow.flowable.service.FlowableService;
|
||||||
|
import com.snow.flowable.service.FlowableTaskService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.flowable.common.engine.impl.identity.Authentication;
|
||||||
|
import org.flowable.engine.RuntimeService;
|
||||||
|
import org.flowable.engine.TaskService;
|
||||||
|
import org.flowable.task.api.Task;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author qimingjin
|
||||||
|
* @Title:
|
||||||
|
* @Description:
|
||||||
|
* @date 2021/1/13 15:54
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class FlowableTaskServiceImpl implements FlowableTaskService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TaskService taskService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuntimeService runtimeService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FlowableService flowableService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends FinishTaskDTO> void submitTask(T finishTaskDTO) {
|
||||||
|
Task task = flowableService.getTask(finishTaskDTO.getTaskId());
|
||||||
|
if(StringUtils.isEmpty(task)){
|
||||||
|
log.info("完成任务时,该任务ID:%不存在",finishTaskDTO.getTaskId());
|
||||||
|
throw new BusinessException(String.format("该任务ID:%不存在",finishTaskDTO.getTaskId()));
|
||||||
|
}
|
||||||
|
////设置审批人,若不设置则数据表userid字段为null
|
||||||
|
Authentication.setAuthenticatedUserId(finishTaskDTO.getUserId());
|
||||||
|
if(!StringUtils.isEmpty(finishTaskDTO.getComment())){
|
||||||
|
taskService.addComment(task.getId(),task.getProcessInstanceId(),FlowConstants.OPINION,finishTaskDTO.getComment());
|
||||||
|
}else {
|
||||||
|
taskService.addComment(task.getId(),task.getProcessInstanceId(),FlowConstants.OPINION,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<FileEntry> files = finishTaskDTO.getFiles();
|
||||||
|
if(!CollectionUtils.isEmpty(files)){
|
||||||
|
files.stream().forEach(t->
|
||||||
|
taskService.createAttachment("url",task.getId(),task.getProcessInstanceId(),t.getName(),t.getKey(),t.getUrl())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Map<String, Object> paramMap = BeanUtil.beanToMap(finishTaskDTO);
|
||||||
|
paramMap.remove(FinishTaskDTO.COMMENT);
|
||||||
|
paramMap.remove(FinishTaskDTO.FILES);
|
||||||
|
if(!CollectionUtils.isEmpty(paramMap)){
|
||||||
|
Set<Map.Entry<String, Object>> entries = paramMap.entrySet();
|
||||||
|
entries.stream().forEach(t->
|
||||||
|
runtimeService.setVariable(task.getExecutionId(),t.getKey(),t.getValue())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if(!StringUtils.isEmpty(finishTaskDTO.getIsPass())){
|
||||||
|
runtimeService.setVariable(task.getExecutionId(),CompleteTaskDTO.IS_PASS,finishTaskDTO.getIsPass());
|
||||||
|
paramMap.put(CompleteTaskDTO.IS_PASS,finishTaskDTO.getIsPass());
|
||||||
|
}
|
||||||
|
if(!StringUtils.isEmpty(finishTaskDTO.getIsStart())){
|
||||||
|
runtimeService.setVariable(task.getExecutionId(),CompleteTaskDTO.IS_START,finishTaskDTO.getIsStart());
|
||||||
|
paramMap.put(CompleteTaskDTO.IS_START,finishTaskDTO.getIsStart());
|
||||||
|
}
|
||||||
|
|
||||||
|
//claim the task,当任务分配给了某一组人员时,需要该组人员进行抢占。抢到了就将该任务给谁处理,其他人不能处理。认领任务
|
||||||
|
taskService.claim(task.getId(),finishTaskDTO.getUserId());
|
||||||
|
taskService.complete(task.getId(),paramMap,true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void transferTask(String taskId, String curUserId, String targetUserId) {
|
||||||
|
try {
|
||||||
|
taskService.setOwner(taskId, curUserId);
|
||||||
|
taskService.setAssignee(taskId,targetUserId);
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.error(e.getMessage(),e.getCause());
|
||||||
|
throw new RuntimeException("转办任务失败,请联系管理员");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delegateTask(String taskId, String curUserId, String targetUserId) {
|
||||||
|
try {
|
||||||
|
taskService.setOwner(taskId, curUserId);
|
||||||
|
taskService.delegateTask(taskId,targetUserId);
|
||||||
|
}catch (Exception e) {
|
||||||
|
log.error(e.getMessage(),e.getCause());
|
||||||
|
throw new RuntimeException("转办任务失败,请联系管理员");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void suspendOrActiveApply(String instanceId, String suspendState) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import java.util.Date;
|
||||||
import com.snow.common.annotation.Excel;
|
import com.snow.common.annotation.Excel;
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.snow.common.core.domain.BaseEntity;
|
import com.snow.common.core.domain.BaseEntity;
|
||||||
|
import lombok.Data;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
|
@ -15,6 +16,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
* @author snow
|
* @author snow
|
||||||
* @date 2021-01-07
|
* @date 2021-01-07
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
public class PurchaseOrderMain extends BaseEntity
|
public class PurchaseOrderMain extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
@ -65,137 +67,4 @@ public class PurchaseOrderMain extends BaseEntity
|
||||||
|
|
||||||
/** $table.subTable.functionName信息 */
|
/** $table.subTable.functionName信息 */
|
||||||
private List<PurchaseOrderItem> purchaseOrderItemList;
|
private List<PurchaseOrderItem> purchaseOrderItemList;
|
||||||
|
|
||||||
public void setId(Integer id)
|
|
||||||
{
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getId()
|
|
||||||
{
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
public void setOrderNo(String orderNo)
|
|
||||||
{
|
|
||||||
this.orderNo = orderNo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getOrderNo()
|
|
||||||
{
|
|
||||||
return orderNo;
|
|
||||||
}
|
|
||||||
public void setTotalQuantity(BigDecimal totalQuantity)
|
|
||||||
{
|
|
||||||
this.totalQuantity = totalQuantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getTotalQuantity()
|
|
||||||
{
|
|
||||||
return totalQuantity;
|
|
||||||
}
|
|
||||||
public void setTotalPrice(BigDecimal totalPrice)
|
|
||||||
{
|
|
||||||
this.totalPrice = totalPrice;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal getTotalPrice()
|
|
||||||
{
|
|
||||||
return totalPrice;
|
|
||||||
}
|
|
||||||
public void setTitle(String title)
|
|
||||||
{
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTitle()
|
|
||||||
{
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
public void setSupplierName(String supplierName)
|
|
||||||
{
|
|
||||||
this.supplierName = supplierName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSupplierName()
|
|
||||||
{
|
|
||||||
return supplierName;
|
|
||||||
}
|
|
||||||
public void setOrderTime(Date orderTime)
|
|
||||||
{
|
|
||||||
this.orderTime = orderTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getOrderTime()
|
|
||||||
{
|
|
||||||
return orderTime;
|
|
||||||
}
|
|
||||||
public void setDeliveryDate(Date deliveryDate)
|
|
||||||
{
|
|
||||||
this.deliveryDate = deliveryDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Date getDeliveryDate()
|
|
||||||
{
|
|
||||||
return deliveryDate;
|
|
||||||
}
|
|
||||||
public void setProcessStatus(Long processStatus)
|
|
||||||
{
|
|
||||||
this.processStatus = processStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getProcessStatus()
|
|
||||||
{
|
|
||||||
return processStatus;
|
|
||||||
}
|
|
||||||
public void setBelongUser(String belongUser)
|
|
||||||
{
|
|
||||||
this.belongUser = belongUser;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBelongUser()
|
|
||||||
{
|
|
||||||
return belongUser;
|
|
||||||
}
|
|
||||||
public void setIsDelete(Long isDelete)
|
|
||||||
{
|
|
||||||
this.isDelete = isDelete;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getIsDelete()
|
|
||||||
{
|
|
||||||
return isDelete;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<PurchaseOrderItem> getPurchaseOrderItemList()
|
|
||||||
{
|
|
||||||
return purchaseOrderItemList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPurchaseOrderItemList(List<PurchaseOrderItem> purchaseOrderItemList)
|
|
||||||
{
|
|
||||||
this.purchaseOrderItemList = purchaseOrderItemList;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
|
||||||
.append("id", getId())
|
|
||||||
.append("orderNo", getOrderNo())
|
|
||||||
.append("totalQuantity", getTotalQuantity())
|
|
||||||
.append("totalPrice", getTotalPrice())
|
|
||||||
.append("title", getTitle())
|
|
||||||
.append("supplierName", getSupplierName())
|
|
||||||
.append("orderTime", getOrderTime())
|
|
||||||
.append("deliveryDate", getDeliveryDate())
|
|
||||||
.append("processStatus", getProcessStatus())
|
|
||||||
.append("belongUser", getBelongUser())
|
|
||||||
.append("isDelete", getIsDelete())
|
|
||||||
.append("createTime", getCreateTime())
|
|
||||||
.append("createBy", getCreateBy())
|
|
||||||
.append("updateTime", getUpdateTime())
|
|
||||||
.append("updateBy", getUpdateBy())
|
|
||||||
.append("remark", getRemark())
|
|
||||||
.append("purchaseOrderItemList", getPurchaseOrderItemList())
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue