feat(purchaseorder): 添加申请采购功能并优化订单版本控制
- 在前端页面增加"申请采购"按钮及权限控制 - 实现采购单状态更新接口与业务逻辑 - 添加采购单版本号字段以支持历史记录追踪 - 完善采购单修改时的历史数据保存机制 - 增加申请采购确认弹窗提示用户体验 - 控制仅在待提交或驳回状态下可进行申请操作master
parent
4576eaf1df
commit
576475f46e
|
|
@ -35,6 +35,15 @@ export function updatePurchaseorder(data) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 申请采购单主表
|
||||||
|
export function applyPurchaseorder(data) {
|
||||||
|
return request({
|
||||||
|
url: '/sip/purchaseorder/apply',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 删除采购单主表
|
// 删除采购单主表
|
||||||
export function delPurchaseorder(id) {
|
export function delPurchaseorder(id) {
|
||||||
return request({
|
return request({
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
|
v-if="scope.row.approveStatus === 0 || scope.row.approveStatus === 3"
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-edit"
|
icon="el-icon-edit"
|
||||||
|
|
@ -129,6 +130,16 @@
|
||||||
>修改
|
>修改
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
v-if="scope.row.approveStatus === 0 || scope.row.approveStatus === 3"
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-s-promotion"
|
||||||
|
@click="handleApply(scope.row)"
|
||||||
|
v-hasPermi="['sip:purchaseorder:edit']"
|
||||||
|
>申请采购
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.approveStatus === 0 || scope.row.approveStatus === 3"
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-delete"
|
icon="el-icon-delete"
|
||||||
|
|
@ -168,7 +179,8 @@ import {
|
||||||
getPurchaseorder,
|
getPurchaseorder,
|
||||||
delPurchaseorder,
|
delPurchaseorder,
|
||||||
addPurchaseorder,
|
addPurchaseorder,
|
||||||
updatePurchaseorder
|
updatePurchaseorder,
|
||||||
|
applyPurchaseorder
|
||||||
} from "@/api/sip/purchaseorder";
|
} from "@/api/sip/purchaseorder";
|
||||||
import PurchaseOrderDetail from './components/PurchaseOrderDetail';
|
import PurchaseOrderDetail from './components/PurchaseOrderDetail';
|
||||||
|
|
||||||
|
|
@ -293,6 +305,18 @@ export default {
|
||||||
this.$modal.msgSuccess("删除成功");
|
this.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
/** 申请采购按钮操作 */
|
||||||
|
handleApply(row) {
|
||||||
|
this.$modal.confirm('是否确认申请采购编号为"' + row.purchaseNo + '"的数据项?').then(() => {
|
||||||
|
let form = {...row};
|
||||||
|
form.approveStatus = 1; // 设置审批状态为 1 (审批中)
|
||||||
|
return applyPurchaseorder(form);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("申请采购成功");
|
||||||
|
}).catch(() => {
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,17 @@ public class OmsPurchaseOrderController extends BaseController
|
||||||
return toAjax(omsPurchaseOrderService.updateOmsPurchaseOrder(omsPurchaseOrder));
|
return toAjax(omsPurchaseOrderService.updateOmsPurchaseOrder(omsPurchaseOrder));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 申请采购单主表
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("sip:purchaseorder:edit")
|
||||||
|
@Log(title = "采购单主表", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping("/apply")
|
||||||
|
public AjaxResult apply(@RequestBody OmsPurchaseOrder omsPurchaseOrder)
|
||||||
|
{
|
||||||
|
return toAjax(omsPurchaseOrderService.applyForPurchaseOrder(omsPurchaseOrder));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除采购单主表
|
* 删除采购单主表
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,9 @@ public class OmsPurchaseOrder extends BaseEntity
|
||||||
/** 删除标志(0正常 1删除) */
|
/** 删除标志(0正常 1删除) */
|
||||||
private Integer delFlag;
|
private Integer delFlag;
|
||||||
|
|
||||||
|
/** 版本号 */
|
||||||
|
private Integer version;
|
||||||
|
|
||||||
/** 采购单明细表信息 */
|
/** 采购单明细表信息 */
|
||||||
private List<OmsPurchaseOrderItem> omsPurchaseOrderItemList;
|
private List<OmsPurchaseOrderItem> omsPurchaseOrderItemList;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,4 +88,6 @@ public interface OmsPurchaseOrderMapper
|
||||||
int selectMaxOrderCode(String string);
|
int selectMaxOrderCode(String string);
|
||||||
|
|
||||||
List<OmsPurchaseOrderItem> listItemByPurchaseId(Long id);
|
List<OmsPurchaseOrderItem> listItemByPurchaseId(Long id);
|
||||||
|
|
||||||
|
int updateOmsPurchaseOrderStatus(OmsPurchaseOrder omsPurchaseOrder);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,14 @@ public interface IOmsPurchaseOrderService
|
||||||
*/
|
*/
|
||||||
public int updateOmsPurchaseOrder(OmsPurchaseOrder omsPurchaseOrder);
|
public int updateOmsPurchaseOrder(OmsPurchaseOrder omsPurchaseOrder);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 申请采购单
|
||||||
|
*
|
||||||
|
* @param omsPurchaseOrder 采购单主表
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int applyForPurchaseOrder(OmsPurchaseOrder omsPurchaseOrder);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除采购单主表
|
* 批量删除采购单主表
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -5,18 +5,18 @@ import java.util.List;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.DateUtils;
|
||||||
import com.ruoyi.sip.domain.Cnarea;
|
import com.ruoyi.sip.domain.*;
|
||||||
import com.ruoyi.sip.domain.VendorInfo;
|
import com.ruoyi.sip.mapper.OmsPurchaseOrderItemHistoryMapper;
|
||||||
|
import com.ruoyi.sip.mapper.OmsPurchaseOrderHistoryMapper;
|
||||||
import com.ruoyi.sip.service.ICnareaService;
|
import com.ruoyi.sip.service.ICnareaService;
|
||||||
import com.ruoyi.sip.service.IVendorInfoService;
|
import com.ruoyi.sip.service.IVendorInfoService;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import com.ruoyi.sip.domain.OmsPurchaseOrderItem;
|
|
||||||
import com.ruoyi.sip.mapper.OmsPurchaseOrderMapper;
|
import com.ruoyi.sip.mapper.OmsPurchaseOrderMapper;
|
||||||
import com.ruoyi.sip.domain.OmsPurchaseOrder;
|
|
||||||
import com.ruoyi.sip.service.IOmsPurchaseOrderService;
|
import com.ruoyi.sip.service.IOmsPurchaseOrderService;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
@ -32,6 +32,13 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService
|
||||||
{
|
{
|
||||||
@Resource
|
@Resource
|
||||||
private OmsPurchaseOrderMapper omsPurchaseOrderMapper;
|
private OmsPurchaseOrderMapper omsPurchaseOrderMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private OmsPurchaseOrderHistoryMapper omsPurchaseOrderHistoryMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private OmsPurchaseOrderItemHistoryMapper omsPurchaseOrderItemHistoryMapper;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ICnareaService cnareaService;
|
private ICnareaService cnareaService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -76,6 +83,8 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService
|
||||||
{
|
{
|
||||||
omsPurchaseOrder.setCreateTime(DateUtils.getNowDate());
|
omsPurchaseOrder.setCreateTime(DateUtils.getNowDate());
|
||||||
omsPurchaseOrder.setPurchaseNo(generatePurchaseNo(omsPurchaseOrder.getVendorId()));
|
omsPurchaseOrder.setPurchaseNo(generatePurchaseNo(omsPurchaseOrder.getVendorId()));
|
||||||
|
// 设置初始版本号为 1
|
||||||
|
omsPurchaseOrder.setVersion(1);
|
||||||
int rows = omsPurchaseOrderMapper.insertOmsPurchaseOrder(omsPurchaseOrder);
|
int rows = omsPurchaseOrderMapper.insertOmsPurchaseOrder(omsPurchaseOrder);
|
||||||
insertOmsPurchaseOrderItem(omsPurchaseOrder);
|
insertOmsPurchaseOrderItem(omsPurchaseOrder);
|
||||||
return rows;
|
return rows;
|
||||||
|
|
@ -84,7 +93,7 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService
|
||||||
/**
|
/**
|
||||||
* 生成订单编号
|
* 生成订单编号
|
||||||
*
|
*
|
||||||
* @param province 省份代码
|
* @param vendorId 制造商ID
|
||||||
* @return 订单编号
|
* @return 订单编号
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -123,12 +132,52 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService
|
||||||
@Override
|
@Override
|
||||||
public int updateOmsPurchaseOrder(OmsPurchaseOrder omsPurchaseOrder)
|
public int updateOmsPurchaseOrder(OmsPurchaseOrder omsPurchaseOrder)
|
||||||
{
|
{
|
||||||
|
// 1. 查询旧的订单信息
|
||||||
|
OmsPurchaseOrder oldOrder = omsPurchaseOrderMapper.selectOmsPurchaseOrderById(omsPurchaseOrder.getId());
|
||||||
|
if (oldOrder == null) {
|
||||||
|
throw new ServiceException("订单不存在");
|
||||||
|
}
|
||||||
|
// 2. 保存历史记录
|
||||||
|
saveOrderHistory(oldOrder);
|
||||||
|
|
||||||
|
// 3. 更新订单信息
|
||||||
omsPurchaseOrder.setUpdateTime(DateUtils.getNowDate());
|
omsPurchaseOrder.setUpdateTime(DateUtils.getNowDate());
|
||||||
|
// 版本号 +1
|
||||||
|
omsPurchaseOrder.setVersion(oldOrder.getVersion() + 1);
|
||||||
omsPurchaseOrderMapper.deleteOmsPurchaseOrderItemByPurchaseId(omsPurchaseOrder.getId());
|
omsPurchaseOrderMapper.deleteOmsPurchaseOrderItemByPurchaseId(omsPurchaseOrder.getId());
|
||||||
insertOmsPurchaseOrderItem(omsPurchaseOrder);
|
insertOmsPurchaseOrderItem(omsPurchaseOrder);
|
||||||
return omsPurchaseOrderMapper.updateOmsPurchaseOrder(omsPurchaseOrder);
|
return omsPurchaseOrderMapper.updateOmsPurchaseOrder(omsPurchaseOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int applyForPurchaseOrder(OmsPurchaseOrder omsPurchaseOrder) {
|
||||||
|
omsPurchaseOrder.setUpdateTime(DateUtils.getNowDate());
|
||||||
|
return omsPurchaseOrderMapper.updateOmsPurchaseOrderStatus(omsPurchaseOrder);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void saveOrderHistory(OmsPurchaseOrder oldOrder) {
|
||||||
|
// 复制主表信息到历史表
|
||||||
|
OmsPurchaseOrderHistory historyOrder = new OmsPurchaseOrderHistory();
|
||||||
|
BeanUtils.copyProperties(oldOrder, historyOrder);
|
||||||
|
historyOrder.setPurchaseId(oldOrder.getId()); // 设置原始订单ID
|
||||||
|
omsPurchaseOrderHistoryMapper.insertOmsPurchaseOrderHistory(historyOrder);
|
||||||
|
|
||||||
|
// 复制子表信息到历史表
|
||||||
|
List<OmsPurchaseOrderItem> oldItems = omsPurchaseOrderMapper.listItemByPurchaseId(oldOrder.getId());
|
||||||
|
if (CollUtil.isNotEmpty(oldItems)) {
|
||||||
|
List<OmsPurchaseOrderItemHistory> historyItems = new ArrayList<>();
|
||||||
|
for (OmsPurchaseOrderItem oldItem : oldItems) {
|
||||||
|
OmsPurchaseOrderItemHistory historyItem = new OmsPurchaseOrderItemHistory();
|
||||||
|
BeanUtils.copyProperties(oldItem, historyItem);
|
||||||
|
historyItem.setPurchaseHistoryId(historyOrder.getId()); // 设置历史主表ID
|
||||||
|
historyItem.setOriginalPurchaseId(oldOrder.getId()); // 设置原始订单ID
|
||||||
|
historyItems.add(historyItem);
|
||||||
|
}
|
||||||
|
omsPurchaseOrderItemHistoryMapper.batchOmsPurchaseOrderItemHistory(historyItems);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除采购单主表
|
* 批量删除采购单主表
|
||||||
*
|
*
|
||||||
|
|
@ -181,3 +230,4 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue