Browse Source

[feat]

采购订单前端列表页面新增:工作流js方法,引入审批流程相关字段;设置采购计划单号隐藏部分内容;新增申请实际字段;操作栏新增 作废恢复、审批、审批历史、进度查看方法和按钮
采购Vo类,新增taskStatus当前状态字段
采购订单Controller新增 发起审批采购订单后端接口
采购订单后端分页查询新增根据创建实际倒叙排列;新增审核通过和审核拒绝状态;新增审批后端方法;新增 启动流程实例后端方法;新增角色校验后端方法
按照万材新增采购订单审批流程:目前没有采购经理这个职位,直接由副总审批即可,以后有此岗位之后,管理员可以修改审批流程为:采购员-采购经理-副总
dev
liuxiaoxu 3 months ago
parent
commit
76c613ef7b
  1. 17
      ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java
  2. 14
      ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseOrderVo.java
  3. 8
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseOrderService.java
  4. 42
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java
  5. 1
      ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml
  6. 78
      ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html

17
ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java

@ -93,7 +93,6 @@ public class PurchaseOrderController extends BaseController
@ResponseBody
public TableDataInfo list(PurchaseOrder purchaseOrder)
{
// 采购角色只能看到自己创建的数据
startPage();
List<PurchaseOrderVo> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrder);
return getDataTable(list);
@ -101,7 +100,7 @@ public class PurchaseOrderController extends BaseController
/**
* 导出全部采购订单子表列表
* 导出全部采购订单列表
*/
@RequiresPermissions("purchase:purchaseOrderChild:export")
@Log(title = "采购订单子表", businessType = BusinessType.EXPORT)
@ -117,7 +116,7 @@ public class PurchaseOrderController extends BaseController
/**
* 导出采购订单子表列表
* 导出采购订单列表
*/
@RequiresPermissions("purchase:purchaseOrderChild:export")
@Log(title = "采购订单子表", businessType = BusinessType.EXPORT)
@ -209,17 +208,11 @@ public class PurchaseOrderController extends BaseController
@PostMapping("/addPurchaseOrder")
@ResponseBody
public AjaxResult addPurchasePlanToPurchaseOrder(@RequestBody AddPurchaseOrder addPurchaseOrder) {
// purchaseOrder.setAuditStatus("0");
// purchaseOrder.setUseStatus("0");
// purchaseOrder.setDelFlag("0");
// purchaseOrderService.submitApply(purchaseOrder);
// purchaseOrderService.insertPurchaseOrder(purchaseOrder);
// purchaseOrderService.addPurchaseOrderPayable(purchaseOrder);
// 数据校验,确保前端传入数据格式正确
// 执行主表插入操作
return toAjax(purchaseOrderService.addPurchasePlanToPurchaseOrder(addPurchaseOrder));
purchaseOrderService.submitApply(addPurchaseOrder);
return AjaxResult.success();
}
/**

14
ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseOrderVo.java

@ -17,6 +17,10 @@ public class PurchaseOrderVo extends PurchaseOrder {
private String taskId;
/** 任务名称 */
private String taskName;
// 当前状态
private String taskStatus;
/** 办理时间 */
private Date doneTime;
/** 创建人 */
@ -104,12 +108,22 @@ public class PurchaseOrderVo extends PurchaseOrder {
this.keyword = keyword;
}
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
@Override
public String toString() {
return "PurchaseOrderVo{" +
"applyUserName='" + applyUserName + '\'' +
", taskId='" + taskId + '\'' +
", taskName='" + taskName + '\'' +
", taskStatus='" + taskStatus + '\'' +
", doneTime=" + doneTime +
", createUserName='" + createUserName + '\'' +
", suspendState='" + suspendState + '\'' +

8
ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseOrderService.java

@ -104,7 +104,7 @@ public interface IPurchaseOrderService
Integer addPurchaseOrderPayable(PurchaseOrder purchaseOrder);
ProcessInstance submitApply(PurchaseOrder purchaseOrder);
ProcessInstance submitApply(AddPurchaseOrder addPurchaseOrder);
@Transactional(rollbackFor = Exception.class)
public ProcessInstance cancelPurchaseOrderById(Long id);
@ -122,10 +122,4 @@ public interface IPurchaseOrderService
AjaxResult uploadSingleFile(MultipartFile file,String purchaseOrderCode);
/**
* 采购计划添加采购订单
* */
int addPurchasePlanToPurchaseOrder(AddPurchaseOrder addPurchaseOrder);
}

42
ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java

@ -220,6 +220,12 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
} else {
purchaseOrderVo.setTaskName("未启动");
}
purchaseOrderVo.setTaskStatus(purchaseOrderVo.getTaskName());
if(purchaseOrderVo.getAuditStatus()!=null && purchaseOrderVo.getAuditStatus().equals("1")){
purchaseOrderVo.setTaskStatus("审核通过");
}else if(purchaseOrderVo.getAuditStatus()!=null && purchaseOrderVo.getAuditStatus().equals("2")){
purchaseOrderVo.setTaskStatus("审核拒绝");
}
returnList.add(purchaseOrderVo);
}
returnList.setTotal(CollectionUtils.isEmpty(list) ? 0 : list.getTotal());
@ -323,9 +329,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
/**
* 采购计划添加采购订单
* */
@Transactional(rollbackFor = Exception.class)
@Override
public int addPurchasePlanToPurchaseOrder(AddPurchaseOrder addPurchaseOrder) {
public int addPurchasePlanToPurchaseOrder(AddPurchaseOrder addPurchaseOrder,PurchaseOrder purchaseOrder) {
String loginName = ShiroUtils.getLoginName();
PurchasePlanTwo purchasePlanTwo = addPurchaseOrder.getPurchasePlanTwo();
PurchasePlanOne purchasePlanOne = addPurchaseOrder.getPurchasePlanOne();
@ -339,7 +343,6 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
throw new BusinessException("请填写本次采购数量");
}
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setPurchaseOrderCode(redisCache.generateBillNo("CG"));
purchaseOrder.setPurchasePlanCode(purchasePlanOne.getPurchasePlanCodes());
purchaseOrder.setPaymentStatus("0");
@ -367,11 +370,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
updatePurchasePlanByAddPurchaseOrder(addPurchaseOrder,purchasePlanChildList);
buildPurchaseChild(purchasePlanSelectMaterialVoList, purchaseOrder);
int result = purchaseOrderMapper.insertPurchaseOrder(purchaseOrder);
if (result <= 0){
throw new BusinessException("添加采购订单数据失败");
}
return result;
return purchaseOrderMapper.insertPurchaseOrder(purchaseOrder);
}
//处理采购计划子表
@ -750,13 +749,14 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
}
@Transactional(rollbackFor = Exception.class)
@Override
public ProcessInstance submitApply(PurchaseOrder purchaseOrder) {
public ProcessInstance submitApply(AddPurchaseOrder addPurchaseOrder) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setAuditStatus("0");
purchaseOrder.setUseStatus("0");
SysUser user = ShiroUtils.getSysUser();
purchaseOrder.setApplyUser(user.getLoginName());
purchaseOrder.setApplyTime(DateUtils.getNowDate());
if(purchaseOrder.getPurchaseOrderId()==null) {
insertPurchaseOrder(purchaseOrder);
}
addPurchasePlanToPurchaseOrder(addPurchaseOrder,purchaseOrder);
// 启动流程
String applyTitle = user.getUserName()+"发起了采购订单信息提交审批-"+DateUtils.dateTimeNow();
String instanceType = "submit";
@ -993,9 +993,12 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
}
/**
* 启动流程实例
* */
private ProcessInstance startProcessInstance(String applyTitle, String instanceType, PurchaseOrder purchaseOrder, SysUser user) {
Long materialId = purchaseOrder.getPurchaseOrderId();
String businessKey = materialId.toString(); // 实体类 ID,作为流程的业务 key
Long purchaseOrderId = purchaseOrder.getPurchaseOrderId();
String businessKey = purchaseOrderId.toString(); // 实体类 ID,作为流程的业务 key
String key = "purchaseOrder";
Map<String,Object> variables = new HashMap<>();
// 构造authority传参
@ -1010,14 +1013,19 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
return processInstance;
}
/**
* 角色校验
* */
private void buildAuthority(SysUser user, Map<String, Object> variables) {
Set<String> roleKeys = roleService.selectRoleKeys(user.getUserId());
variables.put("cgjlExist",false);
// 角色不同审核人不同
if(roleKeys.contains("cgyRole")){
variables.put("authority",1);
}else if(roleKeys.contains("cgjlRole")){
variables.put("authority",2);
}else if(roleKeys.contains("cgzgRole")|| roleKeys.contains("admin")){
variables.put("cgjlExist",true);
}else if(roleKeys.contains("admin")){
variables.put("authority",3);
}else if(roleKeys.contains("fzjlRole")){
variables.put("authority",4);

1
ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml

@ -59,6 +59,7 @@
<if test="supplierName != null and supplierName != ''"> and supplier_name like concat('%', #{supplierName}, '%')</if>
<if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
</where>
order by create_time desc
</select>
<select id="selectPurchaseOrderById" parameterType="Long" resultMap="PurchaseOrderResult">

78
ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/purchaseOrder.html

@ -66,6 +66,7 @@
</div>
</div>
<th:block th:include="include :: footer" />
<script th:src="@{/js/activiti.js}"></script>
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('purchase:purchaseOrder:edit')}]];
var removeFlag = [[${@permission.hasPermi('purchase:purchaseOrder:remove')}]];
@ -75,6 +76,8 @@
var paymentStatusDatas = [[${@dict.getType('sys_pay_close')}]];
var useStatusDatas = [[${@dict.getType('useStatus')}]];
var auditStatusDatas = [[${@dict.getType('auditStatus')}]];
var loginName = [[${@permission.getPrincipalProperty('loginName')}]];
var prefix = ctx + "purchase/purchaseOrder";
$(function() {
@ -97,6 +100,37 @@
field: 'purchaseOrderId',
visible: false
},
{title: '流程实例ID',field: 'instanceId',visible: false},
{ title: '流程提交实例ID',field: 'submitInstanceId',visible: false},
{ title:'流程作废实例ID',field: 'cancelInstanceId',visible: false},
{title: '流程恢复实例ID',field: 'restoreInstanceId', visible: false},
{ title: '流程实例类型', field: 'instanceTypeName',visible: false},
{title: '申请人ID',field: 'applyUser', visible: false},
{title: '当前任务ID',field: 'taskId',visible: false},
{ title: '待办用户ID',field: 'todoUserId', visible: false},
{ title: '当前任务名称',field: 'taskName',visible: false,
formatter: function(value, row, index) {
return '<span class="badge badge-primary">' + value + '</span>';
}
},
{title: '审核状态',field: 'auditStatus',visible: false,
formatter: function(value, row, index) {
return $.table.selectDictLabel(auditStatusDatas, value);}
},
{title: '当前状态',field: 'taskStatus', align: 'center',
formatter: function(value, row, index) {
if(row.auditStatus!="1"&&value != "未启动"){
return '<span class="badge badge-danger">' + value + '</span>';
}
if(value === "未启动"){
return '<span class="badge badge-primary">' + value + '</span>';
}
return '<span class="badge badge-primary">' + value + '</span>';}
},
{
title: '采购订购单号',
field: 'purchaseOrderCode',
@ -104,6 +138,9 @@
{
title: '采购计划单号',
field: 'purchasePlanCode',
formatter: function(value, row, index) {
return $.table.tooltip(value, 5, "open");
}
},
{
title: '采购入库状态',
@ -159,6 +196,9 @@
title: '采购员',
field: 'purchaseBuyer',
},
{field: 'applyTime',title: '申请时间', align: 'center',
},
{
title: '使用状态',
field: 'useStatus',
@ -194,6 +234,35 @@
align: 'center',
formatter: function(value, row, index) {
var actions = [];
if(row.auditStatus=="1" && row.useStatus=="1" && !row.cancelInstanceId) {
// 作废
actions.push('<a class=" ' + cancelFlag + ' " href="javascript:void(0)" onclick="cancel(\'' + row.purchaseOrderId + '\')"><i class="fa fa-remove"></i> 作废</a>');
// 已作废
}
// 有流程实例id
if(row.useStatus=="2" && !row.restoreInstanceId){
// 恢复
actions.push('<a class="" href="javascript:void(0)" onclick="$.operate.restore(\'' + row.purchaseOrderId + '\')"><i class="fa fa-window-restore"></i> 恢复</a> ');
}
// 有流程实例id
if (row.instanceId) {
// 有待办人展示审批按钮,
if (row.todoUserId) {
var todoUserIdList = row.todoUserId.split(",");
if(todoUserIdList.includes(loginName)){
var nodeName = row.taskName=='驳回调整'?' 调整申请':' 审批';
actions.push('<a href="javascript:void(0)" onclick="showVerifyDialog(\'' + prefix + '\',\'' + row.taskId + '\', \'' + row.taskName+"-"+ row.instanceTypeName +"申请" + '\')"><i class="fa fa-edit"></i> '+nodeName+'</a> ');
}
}
// 审批历史
actions.push('<a href="javascript:void(0)" onclick="showHistoryDialog(\'' + row.instanceId + '\')"><i class="fa fa-list"></i> 审批历史</a> ');
// 进度查看
actions.push('<a href="javascript:void(0)" onclick="showProcessImgDialog(\'' + row.instanceId + '\')"><i class="fa fa-image"></i> 进度查看</a> ');
}
actions.push('<a class="' + editFlag + '" href="javascript:void(0)" onclick="openAudit(\'' + row.purchaseOrderId + '\')"><i class="fa fa-edit"></i>审核</a> ');
var actionLinks = actions.join('');
return $.table.dropdownToggle(actionLinks);
@ -267,6 +336,15 @@
};
// 作废
function cancel(purchaseOrderId) {
$.modal.confirm("确定作废该采购订单吗?", function() {
var url = prefix + "/cancel/" + purchaseOrderId;
$.modal.open("作废", url);
})
}
</script>
</body>

Loading…
Cancel
Save