Browse Source

[feat] 采购计划生成采购单,添加后审核通过,计算物料合计单价,计算物料合计不含税单价。

dev
zhangsiqi 8 months ago
parent
commit
9b4fcb409c
  1. 4
      ruoyi-admin/src/main/java/com/ruoyi/produce/service/impl/MaterialRequisitionHeadServiceImpl.java
  2. 292
      ruoyi-admin/src/main/java/com/ruoyi/purchase/controller/PurchaseOrderController.java
  3. 318
      ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseOrder.java
  4. 122
      ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseOrderVo.java
  5. 13
      ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseOrderMapper.java
  6. 19
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/IPurchaseOrderService.java
  7. 407
      ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java
  8. 20
      ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderChildMapper.xml
  9. 125
      ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml
  10. 2
      ruoyi-admin/src/main/resources/templates/purchase/purchaseOrder/addPurchaseStorage.html
  11. 108
      ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html
  12. 4
      ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html

4
ruoyi-admin/src/main/java/com/ruoyi/produce/service/impl/MaterialRequisitionHeadServiceImpl.java

@ -75,7 +75,7 @@ public class MaterialRequisitionHeadServiceImpl implements IMaterialRequisitionH
materialRequisitionHead.setEndFlag("0");
materialRequisitionHead.setGetFlag("0");
StockInfo stockInfo = new StockInfo();
stockInfo.setStockname(materialRequisitionHead.getStockName());
stockInfo.setStockName(materialRequisitionHead.getStockName());
stockInfo = stockInfoMapper.selectStockInfoList(stockInfo).get(0);
materialRequisitionHead.setStockNo(stockInfo.getStockNO());
return materialRequisitionHeadMapper.insertMaterialRequisitionHead(materialRequisitionHead);
@ -99,7 +99,7 @@ public class MaterialRequisitionHeadServiceImpl implements IMaterialRequisitionH
materialRequisitionListMapper.insertMaterialRequisitionList(each);
}
StockInfo stockInfo = new StockInfo();
stockInfo.setStockname(materialRequisitionHead.getStockName());
stockInfo.setStockName(materialRequisitionHead.getStockName());
stockInfo = stockInfoMapper.selectStockInfoList(stockInfo).get(0);
materialRequisitionHead.setStockNo(stockInfo.getStockNO());
return materialRequisitionHeadMapper.updateMaterialRequisitionHead(materialRequisitionHead);

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

@ -12,12 +12,15 @@ import com.ruoyi.ck.utils.Result;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.erp.domain.ErpMaterialVo;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.purchase.domain.*;
import com.ruoyi.purchase.domain.exportDto.PurchaseMaterialDto;
import com.ruoyi.purchase.domain.exportDto.PurchaseOrderDto;
@ -28,7 +31,14 @@ import com.ruoyi.purchase.service.IPurchaseOrderService;
import com.ruoyi.purchase.service.IPurchasePlanService;
import com.ruoyi.quality.domain.QualityOrderDetail;
import com.ruoyi.storehouse.utils.CustomRowWriteCellHandler;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
@ -38,7 +48,9 @@ import org.springframework.ui.ModelMap;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
@ -71,6 +83,20 @@ public class PurchaseOrderController extends BaseController
@Autowired
private RedisCache redisCache;
@Autowired
private ISysUserService sysUserService;
@Autowired
private ISysRoleService roleService;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private IProcessService processService;
@RequiresPermissions("purchase:purchaseOrder:view")
@GetMapping()
public String purchaseOrder()
@ -84,10 +110,14 @@ public class PurchaseOrderController extends BaseController
@RequiresPermissions("purchase:purchaseOrder:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(PurchaseOrder purchaseOrder)
public TableDataInfo list(PurchaseOrderVo purchaseOrderVo)
{
SysUser curUser = ShiroUtils.getSysUser();
Long userId = curUser.getUserId();
Set<String> roleKeys = roleService.selectRoleKeys(userId);
// 采购角色只能看到自己创建的数据
startPage();
List<PurchaseOrder> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrder);
List<PurchaseOrderVo> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrderVo);
return getDataTable(list);
}
@ -98,10 +128,10 @@ public class PurchaseOrderController extends BaseController
@Log(title = "采购订单", businessType = BusinessType.EXPORT)
@PostMapping("/export")
@ResponseBody
public AjaxResult export(PurchaseOrder purchaseOrder)
public AjaxResult export(PurchaseOrderVo purchaseOrder)
{
List<PurchaseOrder> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrder);
ExcelUtil<PurchaseOrder> util = new ExcelUtil<PurchaseOrder>(PurchaseOrder.class);
List<PurchaseOrderVo> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrder);
ExcelUtil<PurchaseOrderVo> util = new ExcelUtil<PurchaseOrderVo>(PurchaseOrderVo.class);
return util.exportExcel(list, "采购订单数据");
}
@ -122,176 +152,27 @@ public class PurchaseOrderController extends BaseController
@PostMapping("/add")
@ResponseBody
public AjaxResult addSave( @RequestBody PurchaseOrder purchaseOrder) {
purchaseOrder.setAuditStatus("0");
purchaseOrder.setUseStatus("0");
purchaseOrder.setDelFlag("0");
// 数据校验,确保前端传入数据格式正确
// 生成采购订单编号
// 执行主表插入操作
return toAjax(purchaseOrderService.insertPurchaseOrder(purchaseOrder)); // 假设toAjax方法处理成功逻辑
purchaseOrderService.insertPurchaseOrder(purchaseOrder);
return AjaxResult.success(); // 假设toAjax方法处理成功逻辑
}
@RequiresPermissions("purchase:purchaseOrder:add")
@Log(title = "采购订单", businessType = BusinessType.INSERT)
@PostMapping("/addPurchaseOrder")
@ResponseBody
public AjaxResult addPurchasePlanToPurchaseOrder(@RequestBody PurchaseOrder purchaseOrder) {
purchaseOrder.setAuditStatus("0");
purchaseOrder.setUseStatus("0");
purchaseOrder.setDelFlag("0");
purchaseOrderService.insertPurchaseOrder(purchaseOrder);
// 数据校验,确保前端传入数据格式正确
// 生成采购订单编号
purchaseOrder.setPurchaseOrderCode(redisCache.generateBillNo("CG"));
// 初始化累加变量
BigDecimal materialNoRmb = BigDecimal.ZERO;
BigDecimal materialRmb = BigDecimal.ZERO;
BigDecimal materialNoRmbSum = BigDecimal.ZERO;
BigDecimal materialRmbSum = BigDecimal.ZERO;
Long materialNum = 0L;
int supplierNum = 0;
if (!CollectionUtils.isEmpty(purchaseOrder.getPurchaseOrderChildList())) {
supplierNum = purchaseOrder.getPurchaseOrderChildList().size();
}
if (purchaseOrder.getPurchaseOrderChildList() != null) {
for (PurchaseOrderChild child : purchaseOrder.getPurchaseOrderChildList()) {
if (child.getCorrelationCode().contains(",")) {
String[] correlationCodes = child.getCorrelationCode().split(",");
String[] planCodes = child.getPurchasePlanCode().split(",");
String[] purchaseQuoteCodes = child.getPurchaseQuoteCode().split(",");
for (int i = 0; i < planCodes.length - 1; i++) {
String planCode = planCodes[i];
String correlationCode = correlationCodes[i];
if (planCode != null) {
PurchaseOrderChild material = new PurchaseOrderChild();
child.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode());
// 累加物料数量和金额
//获取物料供应商采购价格
BigDecimal suplierMaterialNoRmb = child.getMaterialNoRmb();
// 获取物料供应商采购价格
BigDecimal suplierMaterialRmb = child.getMaterialRmb();
// 获取物料数量
Long suplierMaterialNum = child.getMaterialNum();
if (suplierMaterialNum == null) {suplierMaterialNum = 0L;}
if (suplierMaterialRmb == null) {suplierMaterialRmb = BigDecimal.ZERO;}
if (suplierMaterialNoRmb == null) {suplierMaterialNoRmb = BigDecimal.ZERO;}
// 累加物料数量
materialNum += suplierMaterialNum;
// 累加不含税物料价格
materialNoRmb = materialNoRmb.add(suplierMaterialNoRmb);
// 累加含税物料价格
materialRmb = materialRmb.add(suplierMaterialRmb);
// 计算不含税物料总价
BigDecimal suplierMaterialNoRmbSumLocal = suplierMaterialNoRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 计算物料含税总价
BigDecimal suplierMaterialRmbSumLocal = suplierMaterialRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 累加物料总价
materialNoRmbSum = materialNoRmbSum.add(suplierMaterialNoRmbSumLocal);
// 累加物料含税总价
materialRmbSum = materialRmbSum.add(suplierMaterialRmbSumLocal);
// 设置采购报价单编号和供应商信息到QuoteChild
material.setPurchaseQuoteCode(purchaseOrder.getPurchaseOrderCode());
material.setSupplierCode(child.getSupplierCode());
material.setMaterialUnit(child.getMaterialUnit());
material.setWarehouseDept(child.getWarehouseDept());
material.setSupplierName(child.getSupplierName());
material.setMaterialCode(child.getMaterialCode());
material.setMaterialName(child.getMaterialName());
material.setMaterialBrand(child.getMaterialBrand());
material.setMaterialDescribe(child.getMaterialDescribe());
material.setMaterialPhotoUrl(child.getMaterialPhotoUrl());
material.setMaterialProcessMethod(child.getMaterialProcessMethod());
material.setMaterialNoRmb(child.getMaterialNoRmb());
material.setMaterialRmb(child.getMaterialRmb());
material.setMaterialNum(child.getMaterialNum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setMaterialRmbSum(child.getMaterialRmbSum());
material.setMaterialRealNum(child.getMaterialRealNum());
material.setMaterialRealNoRmb(child.getMaterialRealNoRmb());
material.setMaterialRealRmb(child.getMaterialRealRmb());
material.setMaterialRealRmbSum(child.getMaterialRealRmbSum());
material.setMaterialRealNoRmbSum(child.getMaterialRealNoRmbSum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setCorrelationCode(correlationCode);
material.setPurchasePlanCode(planCode);
material.setPurchaseQuoteCode(child.getPurchaseQuoteCode());
material.setEceiptStatus("0");
material.setPaymentStatus("0");
material.setDelFlag("0");
// 执行子表插入操作
purchaseOrderChildService.insertPurchaseOrderChild(child);
PurchasePlan plan = new PurchasePlan();
plan.setPurchasePlanCode(child.getPurchasePlanCode());
plan.setPurchasePlanStatus("1");
int result = purchasePlanService.updatePurchasePlan(plan);
}
}
child.setMaterialNoRmb(BigDecimal.ZERO);
}
else if ((child.getCorrelationCode().contains(",")==false)
&& child.getPurchasePlanCode() != null) {
PurchaseOrderChild material = new PurchaseOrderChild();
child.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode());
//获取物料供应商采购价格
BigDecimal suplierMaterialNoRmb = child.getMaterialNoRmb();
// 获取物料供应商采购价格
BigDecimal suplierMaterialRmb = child.getMaterialRmb();
// 获取物料数量
Long suplierMaterialNum = child.getMaterialNum();
// 累加物料数量
materialNum += suplierMaterialNum;
if(suplierMaterialNoRmb == null){suplierMaterialNoRmb = BigDecimal.ZERO;}
if(suplierMaterialRmb == null){suplierMaterialRmb = BigDecimal.ZERO;}
if(suplierMaterialNum == null){suplierMaterialNum = 0L;}
// 累加不含税物料价格
materialNoRmb = materialNoRmb.add(suplierMaterialNoRmb);
// 累加含税物料价格
materialRmb = materialRmb.add(suplierMaterialRmb);
// 计算不含税物料总价
BigDecimal suplierMaterialNoRmbSumLocal = suplierMaterialNoRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 计算物料含税总价
BigDecimal suplierMaterialRmbSumLocal = suplierMaterialRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 累加物料总价
materialNoRmbSum = materialNoRmbSum.add(suplierMaterialNoRmbSumLocal);
// 累加物料含税总价
materialRmbSum = materialRmbSum.add(suplierMaterialRmbSumLocal);
// 设置采购报价单编号和供应商信息到QuoteChild
material.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode());
material.setSupplierCode(child.getSupplierCode());
material.setMaterialUnit(child.getMaterialUnit());
material.setWarehouseDept(child.getWarehouseDept());
material.setSupplierName(child.getSupplierName());
material.setMaterialCode(child.getMaterialCode());
material.setMaterialName(child.getMaterialName());
material.setMaterialBrand(child.getMaterialBrand());
material.setMaterialDescribe(child.getMaterialDescribe());
material.setMaterialPhotoUrl(child.getMaterialPhotoUrl());
material.setMaterialProcessMethod(child.getMaterialProcessMethod());
material.setMaterialNoRmb(child.getMaterialNoRmb());
material.setMaterialRmb(child.getMaterialRmb());
material.setMaterialNum(child.getMaterialNum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setMaterialRmbSum(child.getMaterialRmbSum());
material.setMaterialRealNum(child.getMaterialRealNum());
material.setMaterialRealNoRmb(child.getMaterialRealNoRmb());
material.setMaterialRealRmb(child.getMaterialRealRmb());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setCorrelationCode(child.getCorrelationCode());
material.setPurchasePlanCode(child.getPurchasePlanCode());
material.setPurchaseQuoteCode(child.getPurchaseQuoteCode());
material.setEceiptStatus("0");
material.setPaymentStatus("0");
material.setDelFlag("0");
// 执行子表插入操作
purchaseOrderChildService.insertPurchaseOrderChild(child);
PurchasePlan plan = new PurchasePlan();
plan.setPurchasePlanCode(child.getPurchasePlanCode());
plan.setPurchasePlanStatus("1");
int result = purchasePlanService.updatePurchasePlan(plan);
}
}
}
// 遍历处理采购订单子表
// 设置累加的物料信息到子表
purchaseOrder.setMaterialSum(Math.toIntExact(materialNum));
purchaseOrder.setNoRmbSum(materialNoRmbSum);
purchaseOrder.setRmbSum(materialRmbSum);
// 设置主表的供应商数量
purchaseOrder.setSupplierNum(supplierNum);
// 执行主表插入操作
return toAjax(purchaseOrderService.insertPurchaseOrder(purchaseOrder)); // 假设toAjax方法处理成功逻辑
return AjaxResult.success(); // 假设toAjax方法处理成功逻辑
}
/**
@ -357,7 +238,82 @@ public class PurchaseOrderController extends BaseController
{
return toAjax(purchaseOrderService.updatePurchaseOrder(purchaseOrder));
}
/**
* 加载审批弹窗
* @param taskId
* @param mmap
* @return
*/
@GetMapping("/showVerifyDialog/{taskId}")
public String showVerifyDialog(@PathVariable("taskId") String taskId, ModelMap mmap) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
String processInstanceId = task.getProcessInstanceId();
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
PurchaseOrderVo purchaseOrderVo = purchaseOrderService.selectPurchaseOrderById(new Long(processInstance.getBusinessKey()));
mmap.put("formData", purchaseOrderVo);
mmap.put("taskId", taskId);
String verifyName = task.getTaskDefinitionKey().substring(0, 1).toUpperCase() + task.getTaskDefinitionKey().substring(1);
return prefix + "/task" + verifyName;
}
/**
* 完成任务
*
* @return
*/
@RequestMapping(value = "/complete/{taskId}", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public AjaxResult complete(@PathVariable("taskId") String taskId, @RequestParam(value = "saveEntity", required = false) String saveEntity,
@ModelAttribute("preloadObj") PurchaseOrderVo purchaseOrderVo, HttpServletRequest request) {
boolean saveEntityBoolean = BooleanUtils.toBoolean(saveEntity);
String instanceId = purchaseOrderVo.getInstanceId();
String instanceType = purchaseOrderVo.getInstanceType();
boolean approvedFlag = processService.complete(taskId, instanceId, purchaseOrderVo.getApplyTitle(), purchaseOrderVo.getPurchaseOrderCode(),
"purchaseOrder", new HashMap<String, Object>(), request);
if(!approvedFlag){
// 审核状态-审核拒绝
purchaseOrderVo.setAuditStatus("2");
}
// 如果任务已结束更新业务表状态
boolean processIsFinish = processService.judgeProcessIsFinish(instanceId);
if (processIsFinish) {
// 审核通过
purchaseOrderVo.setAuditStatus("1");
// 提交
if("submit".equals(instanceType)){
// 使用状态-是
purchaseOrderVo.setUseStatus("1");
}
// 作废
else if("cancel".equals(instanceType)){
// 使用状态-已作废
purchaseOrderVo.setUseStatus("2");
}
// 恢复
else if("restore".equals(instanceType)){
// 使用状态-是
purchaseOrderVo.setUseStatus("1");
}
}
purchaseOrderService.updatePurchaseOrder(purchaseOrderVo);
// 驳回申请后继续申请,可能修改表单
if (saveEntityBoolean) {
purchaseOrderService.updatePurchaseOrder(purchaseOrderVo);
}
return success("任务已完成");
}
/**
* 自动绑定页面字段
*/
@ModelAttribute("/preloadObj")
public PurchaseOrderVo getObj(@RequestParam(value = "id", required = false) Long id, HttpSession session) {
if (id != null) {
return purchaseOrderService.selectPurchaseOrderById(id);
}
return new PurchaseOrderVo();
}
/**
* 删除采购订单
*/
@ -503,4 +459,12 @@ public class PurchaseOrderController extends BaseController
public Result getId() throws Exception {
return Result.getSuccessResult(purchaseOrderService.getId());
}
@GetMapping ("/getEngineerList")
@ResponseBody
public TableDataInfo getEngineerList(){
startPage();
List<SysUser> list = sysUserService.selectRoleToUserList("cgyRole,cgjlRole,cgzgRole,fzjlRole");
return getDataTable(list);
}
}

318
ruoyi-admin/src/main/java/com/ruoyi/purchase/domain/PurchaseOrder.java

@ -127,41 +127,6 @@ public class PurchaseOrder extends BaseEntity
@Excel(name = "结案时间")
private String closeCaseTime;
/** 确认否 */
@Excel(name = "确认否")
private String confirmNo;
/** 确认人 */
@Excel(name = "确认人")
private String confirmName;
/** 确认时间 */
@Excel(name = "确认时间")
private String confirmTime;
/** 审核否 */
@Excel(name = "审核否")
private String auditNo;
/** 审核人 */
@Excel(name = "审核人")
private String auditName;
/** 审核时间 */
@Excel(name = "审核时间")
private String auditTime;
/** 核准否 */
@Excel(name = "核准否")
private String approveNo;
/** 核准人 */
@Excel(name = "核准人")
private String approveName;
/** 核准时间 */
@Excel(name = "核准时间")
private String approveTime;
/** 对账否 */
@Excel(name = "对账否")
@ -175,12 +140,6 @@ public class PurchaseOrder extends BaseEntity
@Excel(name = "对账时间")
private String accountReconciliationTime;
/** 录入时间 */
@Excel(name = "录入时间")
private String firstAddTime;
/** 修改时间 */
@Excel(name = "修改时间")
private String updateInfoTime;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
@ -202,63 +161,38 @@ public class PurchaseOrder extends BaseEntity
/** 备用二 */
private String standbyTwo;
private List<PurchaseOrderChild> purchaseOrderChildList;
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getStockNo() {
return stockNo;
}
/** 流程实例ID */
private String instanceId;
public void setStockNo(String stockNo) {
this.stockNo = stockNo;
}
/** 流程实例类型 */
private String instanceType;
public String getStockName() {
return stockName;
}
/** 提交流程实例ID */
private String submitInstanceId;
public void setStockName(String stockName) {
this.stockName = stockName;
}
/** 作废流程实例ID */
private String cancelInstanceId;
public String getStockAddress() {
return stockAddress;
}
/** 恢复流程实例ID */
private String restoreInstanceId;
public void setStockAddress(String stockAddress) {
this.stockAddress = stockAddress;
}
/** 申请人 */
private String applyTitle;
public String getStockPhone() {
return stockPhone;
}
/** 申请人 */
private String applyUser;
public void setStockPhone(String stockPhone) {
this.stockPhone = stockPhone;
}
/** 申请时间 */
private Date applyTime;
public String getStockContact() {
return stockContact;
}
private Long photoAttachId;
public void setStockContact(String stockContact) {
this.stockContact = stockContact;
}
private String fileIdStr;
public List<PurchaseOrderChild> getPurchaseOrderChildList() {
return purchaseOrderChildList;
}
private String removeFileIdStr;
public void setPurchaseOrderChildList(List<PurchaseOrderChild> purchaseOrderChildList) {
this.purchaseOrderChildList = purchaseOrderChildList;
}
/** 子表信息 */
private List<PurchaseOrderChild> purchaseOrderChildList;
public Long getPurchaseOrderId() {
return purchaseOrderId;
@ -372,6 +306,22 @@ public class PurchaseOrder extends BaseEntity
this.supplierName = supplierName;
}
public String getEceiptType() {
return eceiptType;
}
public void setEceiptType(String eceiptType) {
this.eceiptType = eceiptType;
}
public Date getArrivedTime() {
return arrivedTime;
}
public void setArrivedTime(Date arrivedTime) {
this.arrivedTime = arrivedTime;
}
public String getCustomerContact() {
return customerContact;
}
@ -508,149 +458,188 @@ public class PurchaseOrder extends BaseEntity
this.closeCaseTime = closeCaseTime;
}
public String getConfirmNo() {
return confirmNo;
public String getAccountReconciliationFlag() {
return accountReconciliationFlag;
}
public void setConfirmNo(String confirmNo) {
this.confirmNo = confirmNo;
public void setAccountReconciliationFlag(String accountReconciliationFlag) {
this.accountReconciliationFlag = accountReconciliationFlag;
}
public String getConfirmName() {
return confirmName;
public String getAccountReconciliationPerson() {
return accountReconciliationPerson;
}
public void setConfirmName(String confirmName) {
this.confirmName = confirmName;
public void setAccountReconciliationPerson(String accountReconciliationPerson) {
this.accountReconciliationPerson = accountReconciliationPerson;
}
public String getConfirmTime() {
return confirmTime;
public String getAccountReconciliationTime() {
return accountReconciliationTime;
}
public void setConfirmTime(String confirmTime) {
this.confirmTime = confirmTime;
public void setAccountReconciliationTime(String accountReconciliationTime) {
this.accountReconciliationTime = accountReconciliationTime;
}
public String getAuditNo() {
return auditNo;
public String getDelFlag() {
return delFlag;
}
public void setAuditNo(String auditNo) {
this.auditNo = auditNo;
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getAuditName() {
return auditName;
public String getStockNo() {
return stockNo;
}
public void setAuditName(String auditName) {
this.auditName = auditName;
public void setStockNo(String stockNo) {
this.stockNo = stockNo;
}
public String getAuditTime() {
return auditTime;
public String getStockName() {
return stockName;
}
public void setAuditTime(String auditTime) {
this.auditTime = auditTime;
public void setStockName(String stockName) {
this.stockName = stockName;
}
public String getApproveNo() {
return approveNo;
public String getStockAddress() {
return stockAddress;
}
public void setApproveNo(String approveNo) {
this.approveNo = approveNo;
public void setStockAddress(String stockAddress) {
this.stockAddress = stockAddress;
}
public String getApproveName() {
return approveName;
public String getStockPhone() {
return stockPhone;
}
public void setApproveName(String approveName) {
this.approveName = approveName;
public void setStockPhone(String stockPhone) {
this.stockPhone = stockPhone;
}
public String getApproveTime() {
return approveTime;
public String getStockContact() {
return stockContact;
}
public void setApproveTime(String approveTime) {
this.approveTime = approveTime;
public void setStockContact(String stockContact) {
this.stockContact = stockContact;
}
public String getAccountReconciliationFlag() {
return accountReconciliationFlag;
public String getStandbyOne() {
return standbyOne;
}
public void setAccountReconciliationFlag(String accountReconciliationFlag) {
this.accountReconciliationFlag = accountReconciliationFlag;
public void setStandbyOne(String standbyOne) {
this.standbyOne = standbyOne;
}
public String getAccountReconciliationPerson() {
return accountReconciliationPerson;
public String getStandbyTwo() {
return standbyTwo;
}
public void setAccountReconciliationPerson(String accountReconciliationPerson) {
this.accountReconciliationPerson = accountReconciliationPerson;
public void setStandbyTwo(String standbyTwo) {
this.standbyTwo = standbyTwo;
}
public String getAccountReconciliationTime() {
return accountReconciliationTime;
public String getInstanceId() {
return instanceId;
}
public void setAccountReconciliationTime(String accountReconciliationTime) {
this.accountReconciliationTime = accountReconciliationTime;
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
}
public String getFirstAddTime() {
return firstAddTime;
public String getInstanceType() {
return instanceType;
}
public void setFirstAddTime(String firstAddTime) {
this.firstAddTime = firstAddTime;
public void setInstanceType(String instanceType) {
this.instanceType = instanceType;
}
public String getUpdateInfoTime() {
return updateInfoTime;
public String getSubmitInstanceId() {
return submitInstanceId;
}
public void setUpdateInfoTime(String updateInfoTime) {
this.updateInfoTime = updateInfoTime;
public void setSubmitInstanceId(String submitInstanceId) {
this.submitInstanceId = submitInstanceId;
}
public String getStandbyOne() {
return standbyOne;
public String getCancelInstanceId() {
return cancelInstanceId;
}
public void setStandbyOne(String standbyOne) {
this.standbyOne = standbyOne;
public void setCancelInstanceId(String cancelInstanceId) {
this.cancelInstanceId = cancelInstanceId;
}
public String getStandbyTwo() {
return standbyTwo;
public String getRestoreInstanceId() {
return restoreInstanceId;
}
public void setStandbyTwo(String standbyTwo) {
this.standbyTwo = standbyTwo;
public void setRestoreInstanceId(String restoreInstanceId) {
this.restoreInstanceId = restoreInstanceId;
}
public String getApplyTitle() {
return applyTitle;
}
public Date getArrivedTime() {
return arrivedTime;
public void setApplyTitle(String applyTitle) {
this.applyTitle = applyTitle;
}
public void setArrivedTime(Date arrivedTime) {
this.arrivedTime = arrivedTime;
public String getApplyUser() {
return applyUser;
}
public String getEceiptType() {
return eceiptType;
public void setApplyUser(String applyUser) {
this.applyUser = applyUser;
}
public void setEceiptType(String eceiptType) {
this.eceiptType = eceiptType;
public Date getApplyTime() {
return applyTime;
}
public void setApplyTime(Date applyTime) {
this.applyTime = applyTime;
}
public Long getPhotoAttachId() {
return photoAttachId;
}
public void setPhotoAttachId(Long photoAttachId) {
this.photoAttachId = photoAttachId;
}
public String getFileIdStr() {
return fileIdStr;
}
public void setFileIdStr(String fileIdStr) {
this.fileIdStr = fileIdStr;
}
public String getRemoveFileIdStr() {
return removeFileIdStr;
}
public void setRemoveFileIdStr(String removeFileIdStr) {
this.removeFileIdStr = removeFileIdStr;
}
public List<PurchaseOrderChild> getPurchaseOrderChildList() {
return purchaseOrderChildList;
}
public void setPurchaseOrderChildList(List<PurchaseOrderChild> purchaseOrderChildList) {
this.purchaseOrderChildList = purchaseOrderChildList;
}
@Override
@ -677,20 +666,9 @@ public class PurchaseOrder extends BaseEntity
.append("closeCaseNo", getCloseCaseNo())
.append("closeCaseName", getCloseCaseName())
.append("closeCaseTime", getCloseCaseTime())
.append("confirmNo", getConfirmNo())
.append("confirmName", getConfirmName())
.append("confirmTime", getConfirmTime())
.append("auditNo", getAuditNo())
.append("auditName", getAuditName())
.append("auditTime", getAuditTime())
.append("approveNo", getApproveNo())
.append("approveName", getApproveName())
.append("approveTime", getApproveTime())
.append("accountReconciliationFlag", getAccountReconciliationFlag())
.append("accountReconciliationPerson", getAccountReconciliationPerson())
.append("accountReconciliationTime", getAccountReconciliationTime())
.append("firstAddTime", getFirstAddTime())
.append("updateInfoTime", getUpdateInfoTime())
.append("standbyOne", getStandbyOne())
.append("standbyTwo", getStandbyTwo())
.toString();

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

@ -0,0 +1,122 @@
package com.ruoyi.purchase.domain;
import com.ruoyi.erp.domain.ErpBom;
import java.util.Date;
/**
*
* @Description 采购订单审核信息Vo
*/
public class PurchaseOrderVo extends PurchaseOrder {
private static final long serialVersionUID = 1L;
/** 申请人姓名 */
private String applyUserName;
/** 任务ID */
private String taskId;
/** 任务名称 */
private String taskName;
/** 办理时间 */
private Date doneTime;
/** 创建人 */
private String createUserName;
/** 流程实例状态 1 激活 2 挂起 */
private String suspendState;
/** 待办用户id */
private String todoUserId;
/** 流程实例类型名称 */
private String instanceTypeName;
/**
* 关键词
*/
private String keyword;
public String getApplyUserName() {
return applyUserName;
}
public void setApplyUserName(String applyUserName) {
this.applyUserName = applyUserName;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public Date getDoneTime() {
return doneTime;
}
public void setDoneTime(Date doneTime) {
this.doneTime = doneTime;
}
public String getCreateUserName() {
return createUserName;
}
public void setCreateUserName(String createUserName) {
this.createUserName = createUserName;
}
public String getSuspendState() {
return suspendState;
}
public void setSuspendState(String suspendState) {
this.suspendState = suspendState;
}
public String getTodoUserId() {
return todoUserId;
}
public void setTodoUserId(String todoUserId) {
this.todoUserId = todoUserId;
}
public String getInstanceTypeName() {
return instanceTypeName;
}
public void setInstanceTypeName(String instanceTypeName) {
this.instanceTypeName = instanceTypeName;
}
public String getKeyword() {
return keyword;
}
public void setKeyword(String keyword) {
this.keyword = keyword;
}
@Override
public String toString() {
return "PurchaseOrderVo{" +
"applyUserName='" + applyUserName + '\'' +
", taskId='" + taskId + '\'' +
", taskName='" + taskName + '\'' +
", doneTime=" + doneTime +
", createUserName='" + createUserName + '\'' +
", suspendState='" + suspendState + '\'' +
", todoUserId='" + todoUserId + '\'' +
", instanceTypeName='" + instanceTypeName + '\'' +
", keyword='" + keyword + '\'' +
"} " + super.toString();
}
}

13
ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseOrderMapper.java

@ -1,6 +1,7 @@
package com.ruoyi.purchase.mapper;
import com.ruoyi.purchase.domain.PurchaseOrder;
import com.ruoyi.purchase.domain.PurchaseOrderVo;
import java.util.List;
@ -18,7 +19,7 @@ public interface PurchaseOrderMapper
* @param purchaseOrderId 采购订单ID
* @return 采购订单
*/
public PurchaseOrder selectPurchaseOrderById(Long purchaseOrderId);
public PurchaseOrderVo selectPurchaseOrderById(Long purchaseOrderId);
/**
* 查询采购订单列表
@ -26,7 +27,7 @@ public interface PurchaseOrderMapper
* @param purchaseOrder 采购订单
* @return 采购订单集合
*/
public List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);
public List<PurchaseOrderVo> selectPurchaseOrderList(PurchaseOrder purchaseOrder);
/**
* 新增采购订单
@ -60,7 +61,11 @@ public interface PurchaseOrderMapper
*/
public int deletePurchaseOrderByIds(String[] purchaseOrderIds);
public List<PurchaseOrder> selectOrderByIdDesc();
//查询关联类型为生产订单的采购订单列表
public List<PurchaseOrderVo> selectOrderByIdDesc();
PurchaseOrder selectPurchaseOrderByOrderCode(String purchaseOrderCode);
//根据采购订单编号查询采购订单
PurchaseOrderVo selectPurchaseOrderByOrderCode(String purchaseOrderCode);
//校验采购订单编号是否唯一
public Integer checkPurchaseOrderCodeUnique(String purchaseOrderCode);
}

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

@ -1,7 +1,10 @@
package com.ruoyi.purchase.service;
import com.ruoyi.purchase.domain.PurchaseOrder;
import com.ruoyi.purchase.domain.PurchaseOrderVo;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -15,19 +18,19 @@ public interface IPurchaseOrderService
{
/**
* 查询采购订单
*
*
* @param purchaseOrderId 采购订单ID
* @return 采购订单
*/
public PurchaseOrder selectPurchaseOrderById(Long purchaseOrderId);
public PurchaseOrderVo selectPurchaseOrderById(Long purchaseOrderId);
/**
* 查询采购订单列表
*
*
* @param purchaseOrder 采购订单
* @return 采购订单集合
*/
public List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);
public List<PurchaseOrderVo> selectPurchaseOrderList(PurchaseOrderVo purchaseOrder);
/**
* 新增采购订单
@ -70,4 +73,12 @@ public interface IPurchaseOrderService
* */
int addPurchaseOrderStorage(WarehouseStorageOrder warehouseStorageOrder);
@Transactional(rollbackFor = Exception.class)
ProcessInstance submitApply(PurchaseOrder purchaseOrder);
@Transactional(rollbackFor = Exception.class)
ProcessInstance cancelPurchaseOrderById(Long id);
ProcessInstance restorePurchaseOrderById(Long id);
}

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

@ -1,26 +1,50 @@
package com.ruoyi.purchase.service.impl;
import com.github.pagehelper.Page;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.service.ICommonService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper;
import com.ruoyi.purchase.domain.PurchaseOrder;
import com.ruoyi.purchase.domain.PurchaseOrderChild;
import com.ruoyi.purchase.domain.PurchaseOrderVo;
import com.ruoyi.purchase.domain.PurchasePlan;
import com.ruoyi.purchase.mapper.PurchaseOrderChildMapper;
import com.ruoyi.purchase.mapper.PurchaseOrderMapper;
import com.ruoyi.purchase.mapper.PurchasePlanMapper;
import com.ruoyi.purchase.service.IPurchaseOrderService;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysAttachFileService;
import com.ruoyi.system.service.ISysAttachService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder;
import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail;
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderDetailMapper;
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.persistence.entity.TaskEntityImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.text.SimpleDateFormat;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 采购订单Service业务层处理
@ -44,28 +68,66 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
@Autowired
private WarehouseStorageOrderDetailMapper storageOrderDetailMapper;
@Autowired
private ISysAttachService attachService;
@Autowired
private ISysAttachFileService attachFileService;
@Autowired
private ICommonService commonService;
@Autowired
private SysUserMapper userMapper;
@Autowired
private TaskService taskService;
@Autowired
private BizTodoItemMapper todoItemMapper;
@Autowired
private IProcessService processService;
@Autowired
private ISysRoleService roleService;
@Autowired
private PurchaseOrderChildMapper purchaseOrderChildService;
@Autowired
private PurchasePlanMapper purchasePlanService;
/**
* 查询采购订单
*
*
* @param purchaseOrderId 采购订单ID
* @return 采购订单
*/
@Override
public PurchaseOrder selectPurchaseOrderById(Long purchaseOrderId)
public PurchaseOrderVo selectPurchaseOrderById(Long purchaseOrderId)
{
return purchaseOrderMapper.selectPurchaseOrderById(purchaseOrderId);
PurchaseOrderVo purchaseOrderVo = purchaseOrderMapper.selectPurchaseOrderById(purchaseOrderId);
SysUser sysUser = userMapper.selectUserByLoginName(purchaseOrderVo.getApplyUser());
if (sysUser != null) {
purchaseOrderVo.setApplyUserName(sysUser.getUserName());
}
return purchaseOrderVo ;
}
/**
* 查询采购订单列表
*
* @param purchaseOrder 采购订单
*
* @param purchaseOrderVo 采购订单
* @return 采购订单
*/
@Override
public List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder)
public List<PurchaseOrderVo> selectPurchaseOrderList(PurchaseOrderVo purchaseOrderVo)
{
return purchaseOrderMapper.selectPurchaseOrderList(purchaseOrder);
// PageHelper 仅对第一个 List 分页
List<PurchaseOrderVo> list = purchaseOrderMapper.selectPurchaseOrderList(purchaseOrderVo);
return list;
}
/**
@ -81,7 +143,166 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
//根据上传的物料信息做采购订单子项
purchaseOrder.setCreateTime(DateUtils.getNowDate());
purchaseOrder.setCreateBy(ShiroUtils.getLoginName());
//
// 生成采购订单编号
purchaseOrder.setPurchaseOrderCode(redisCache.generateBillNo("CG"));
// 初始化累加变量
BigDecimal materialNoRmb = BigDecimal.ZERO;
BigDecimal materialRmb = BigDecimal.ZERO;
BigDecimal materialNoRmbSum = BigDecimal.ZERO;
BigDecimal materialRmbSum = BigDecimal.ZERO;
Long materialNum = 0L;
int supplierNum = 0;
if (!CollectionUtils.isEmpty(purchaseOrder.getPurchaseOrderChildList())) {
supplierNum = purchaseOrder.getPurchaseOrderChildList().size();
}
if (purchaseOrder.getPurchaseOrderChildList() != null) {
for (PurchaseOrderChild child : purchaseOrder.getPurchaseOrderChildList()) {
if (child.getCorrelationCode().contains(",")) {
String[] correlationCodes = child.getCorrelationCode().split(",");
String[] planCodes = child.getPurchasePlanCode().split(",");
String[] purchaseQuoteCodes = child.getPurchaseQuoteCode().split(",");
for (int i = 0; i < planCodes.length - 1; i++) {
String planCode = planCodes[i];
String correlationCode = correlationCodes[i];
if (planCode != null) {
PurchaseOrderChild material = new PurchaseOrderChild();
child.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode());
// 累加物料数量和金额
//获取物料供应商采购价格
BigDecimal suplierMaterialNoRmb = child.getMaterialNoRmb();
// 获取物料供应商采购价格
BigDecimal suplierMaterialRmb = child.getMaterialRmb();
// 获取物料数量
Long suplierMaterialNum = child.getMaterialNum();
if (suplierMaterialNum == null) {suplierMaterialNum = 0L;}
if (suplierMaterialRmb == null) {suplierMaterialRmb = BigDecimal.ZERO;}
if (suplierMaterialNoRmb == null) {suplierMaterialNoRmb = BigDecimal.ZERO;}
// 累加物料数量
materialNum += suplierMaterialNum;
// 累加不含税物料价格
materialNoRmb = materialNoRmb.add(suplierMaterialNoRmb);
// 累加含税物料价格
materialRmb = materialRmb.add(suplierMaterialRmb);
// 计算不含税物料总价
BigDecimal suplierMaterialNoRmbSumLocal = suplierMaterialNoRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 计算物料含税总价
BigDecimal suplierMaterialRmbSumLocal = suplierMaterialRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 累加物料总价
materialNoRmbSum = materialNoRmbSum.add(suplierMaterialNoRmbSumLocal);
// 累加物料含税总价
materialRmbSum = materialRmbSum.add(suplierMaterialRmbSumLocal);
// 设置采购报价单编号和供应商信息到QuoteChild
material.setPurchaseQuoteCode(purchaseOrder.getPurchaseOrderCode());
material.setSupplierCode(child.getSupplierCode());
material.setMaterialUnit(child.getMaterialUnit());
material.setWarehouseDept(child.getWarehouseDept());
material.setSupplierName(child.getSupplierName());
material.setMaterialCode(child.getMaterialCode());
material.setMaterialName(child.getMaterialName());
material.setMaterialBrand(child.getMaterialBrand());
material.setMaterialDescribe(child.getMaterialDescribe());
material.setMaterialPhotoUrl(child.getMaterialPhotoUrl());
material.setMaterialProcessMethod(child.getMaterialProcessMethod());
material.setMaterialNoRmb(child.getMaterialNoRmb());
material.setMaterialRmb(child.getMaterialRmb());
material.setMaterialNum(child.getMaterialNum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setMaterialRmbSum(child.getMaterialRmbSum());
material.setMaterialRealNum(child.getMaterialRealNum());
material.setMaterialRealNoRmb(child.getMaterialRealNoRmb());
material.setMaterialRealRmb(child.getMaterialRealRmb());
material.setMaterialRealRmbSum(child.getMaterialRealRmbSum());
material.setMaterialRealNoRmbSum(child.getMaterialRealNoRmbSum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setCorrelationCode(correlationCode);
material.setPurchasePlanCode(planCode);
material.setPurchaseQuoteCode(child.getPurchaseQuoteCode());
material.setEceiptStatus("0");
material.setPaymentStatus("0");
material.setDelFlag("0");
// 执行子表插入操作
purchaseOrderChildService.insertPurchaseOrderChild(child);
PurchasePlan plan = new PurchasePlan();
plan.setPurchasePlanCode(child.getPurchasePlanCode());
plan.setPurchasePlanStatus("1");
int result = purchasePlanService.updatePurchasePlan(plan);
}
}
child.setMaterialNoRmb(BigDecimal.ZERO);
}
else if ((child.getCorrelationCode().contains(",")==false)
&& child.getPurchasePlanCode() != null) {
PurchaseOrderChild material = new PurchaseOrderChild();
child.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode());
//获取物料供应商采购价格
BigDecimal suplierMaterialNoRmb = child.getMaterialNoRmb();
// 获取物料供应商采购价格
BigDecimal suplierMaterialRmb = child.getMaterialRmb();
// 获取物料数量
Long suplierMaterialNum = child.getMaterialNum();
// 累加物料数量
materialNum += suplierMaterialNum;
if(suplierMaterialNoRmb == null){suplierMaterialNoRmb = BigDecimal.ZERO;}
if(suplierMaterialRmb == null){suplierMaterialRmb = BigDecimal.ZERO;}
if(suplierMaterialNum == null){suplierMaterialNum = 0L;}
// 累加不含税物料价格
materialNoRmb = materialNoRmb.add(suplierMaterialNoRmb);
// 累加含税物料价格
materialRmb = materialRmb.add(suplierMaterialRmb);
// 计算不含税物料总价
BigDecimal suplierMaterialNoRmbSumLocal = suplierMaterialNoRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 计算物料含税总价
BigDecimal suplierMaterialRmbSumLocal = suplierMaterialRmb.multiply(BigDecimal.valueOf(suplierMaterialNum));
// 累加物料总价
materialNoRmbSum = materialNoRmbSum.add(suplierMaterialNoRmbSumLocal);
// 累加物料含税总价
materialRmbSum = materialRmbSum.add(suplierMaterialRmbSumLocal);
// 设置采购报价单编号和供应商信息到QuoteChild
material.setPurchaseOrderCode(purchaseOrder.getPurchaseOrderCode());
material.setSupplierCode(child.getSupplierCode());
material.setMaterialUnit(child.getMaterialUnit());
material.setWarehouseDept(child.getWarehouseDept());
material.setSupplierName(child.getSupplierName());
material.setMaterialCode(child.getMaterialCode());
material.setMaterialName(child.getMaterialName());
material.setMaterialBrand(child.getMaterialBrand());
material.setMaterialDescribe(child.getMaterialDescribe());
material.setMaterialPhotoUrl(child.getMaterialPhotoUrl());
material.setMaterialProcessMethod(child.getMaterialProcessMethod());
material.setMaterialNoRmb(child.getMaterialNoRmb());
material.setMaterialRmb(child.getMaterialRmb());
material.setMaterialNum(child.getMaterialNum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setMaterialRmbSum(child.getMaterialRmbSum());
material.setMaterialRealNum(child.getMaterialRealNum());
material.setMaterialRealNoRmb(child.getMaterialRealNoRmb());
material.setMaterialRealRmb(child.getMaterialRealRmb());
material.setMaterialRealRmbSum(child.getMaterialRmbSum());
material.setMaterialRealNoRmbSum(child.getMaterialRealNoRmbSum());
material.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
material.setCorrelationCode(child.getCorrelationCode());
material.setPurchasePlanCode(child.getPurchasePlanCode());
material.setPurchaseQuoteCode(child.getPurchaseQuoteCode());
material.setEceiptStatus("0");
material.setPaymentStatus("0");
material.setDelFlag("0");
// 执行子表插入操作
purchaseOrderChildService.insertPurchaseOrderChild(child);
PurchasePlan plan = new PurchasePlan();
plan.setPurchasePlanCode(child.getPurchasePlanCode());
plan.setPurchasePlanStatus("1");
int result = purchasePlanService.updatePurchasePlan(plan);
}
}
}
// 遍历处理采购订单子表
// 设置累加的物料信息到子表
purchaseOrder.setMaterialSum(Math.toIntExact(materialNum));
purchaseOrder.setNoRmbSum(materialNoRmbSum);
purchaseOrder.setRmbSum(materialRmbSum);
// 设置主表的供应商数量
purchaseOrder.setSupplierNum(supplierNum);
return purchaseOrderMapper.insertPurchaseOrder(purchaseOrder);
}
@ -137,26 +358,168 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService
* 采购订单创建采购入库通知单
* */
@Override
@Transactional(rollbackFor = Exception.class)
public int addPurchaseOrderStorage(WarehouseStorageOrder warehouseStorageOrder){
WarehouseStorageOrder warehouseStorageOrder1 = new WarehouseStorageOrder();
warehouseStorageOrder1.setRelatedOrderCode(warehouseStorageOrder.getRelatedOrderCode());
List<WarehouseStorageOrder> warehouseStorageOrderList = warehouseStorageOrderMapper.selectWarehouseStorageOrderList(warehouseStorageOrder1);
List<WarehouseStorageOrderDetail> list = warehouseStorageOrder.getWarehouseStorageOrderDetailList();
String warehouseStorageCode = redisCache.generateBillNo("RK");
if(CollectionUtils.isEmpty(warehouseStorageOrderList)){
for (WarehouseStorageOrderDetail warehouseStorageOrderDetail : list) {
//查询暂收(采购入库)物料表中是否存在该物料
warehouseStorageOrderDetail.setWarehouseStorageCode(warehouseStorageCode);
if(CollectionUtils.isEmpty(warehouseStorageOrderList)) {
//根据物料入库部门划分入库单,入库单类型:0 仓库,1 采购,生成入库单号
List<WarehouseStorageOrderDetail> list1 = list.stream().filter(e -> e.getMaterialDeptType().equals("0")).collect(Collectors.toList());
List<WarehouseStorageOrderDetail> list2 = list.stream().filter(e -> e.getMaterialDeptType().equals("1")).collect(Collectors.toList());
//WarehouseStorageStatus 仓库入库状态(0待暂收、1已暂收、2待入库、3部分入库、4全部入库),
//WarehouseStorageType 仓库入库类型(0采购入库、1供应商补货、2委内入库、3公司退货、4委外入库、5生产入库),
//setWarehouseOrderType仓库订单类型(0采购订单、1生产订单、2退换货订单、3委外订单),
//WarehouseDeptType 仓库入库部门类型(0仓库,1采购 ),
if(!CollectionUtils.isEmpty(list1)) {
//采购入库单,物料入库列表信息读取,放入生成的入库订单号
String warehouseStorageCode = redisCache.generateBillNo("RK");
for (WarehouseStorageOrderDetail warehouseStorageOrderDetail: list1) {
warehouseStorageOrderDetail.setWarehouseStorageCode(warehouseStorageCode);
warehouseStorageOrderDetail.setWarehouseStorageType("0");
warehouseStorageOrderDetail.setMaterialDeptType("0");
warehouseStorageOrderDetail.setWarehouseDeptType("0");
storageOrderDetailMapper.insertWarehouseStorageOrderDetail(warehouseStorageOrderDetail);
}
//入库代表为采购部分的入库单
warehouseStorageOrder.setWarehouseStorageCode(warehouseStorageCode);
warehouseStorageOrder.setWarehouseStorageType("0");
warehouseStorageOrder.setWarehouseDeptType("0");
warehouseStorageOrder.setWarehouseStorageStatus("0");
warehouseStorageOrderMapper.insertWarehouseStorageOrder(warehouseStorageOrder);
}
if(!CollectionUtils.isEmpty(list2)) {
String warehouseStorageCode1 = redisCache.generateBillNo("RK");
//仓库入库单
for (WarehouseStorageOrderDetail warehouseStorageOrderDetail: list2) {
warehouseStorageOrderDetail.setWarehouseStorageCode(warehouseStorageCode1);
warehouseStorageOrderDetail.setWarehouseStorageType("1");
warehouseStorageOrderDetail.setMaterialDeptType("0");
warehouseStorageOrderDetail.setWarehouseDeptType("0");
storageOrderDetailMapper.insertWarehouseStorageOrderDetail(warehouseStorageOrderDetail);
}
//入库代表为仓库部分的入库单
warehouseStorageOrder.setWarehouseStorageCode(warehouseStorageCode1);
warehouseStorageOrder.setWarehouseStorageStatus("0");
warehouseStorageOrder.setWarehouseStorageType("1");
warehouseStorageOrder.setWarehouseOrderType("0");
warehouseStorageOrder.setWarehouseDeptType("1");
warehouseStorageOrder.setWarehouseStorageOrderDetailList(list2);
warehouseStorageOrderMapper.insertWarehouseStorageOrder(warehouseStorageOrder);
storageOrderDetailMapper.insertWarehouseStorageOrderDetail(warehouseStorageOrderDetail);
}
}
warehouseStorageOrder.setWarehouseStorageStatus("0");
warehouseStorageOrder.setWarehouseQualityStatus("0");
warehouseStorageOrder.setWarehouseStorageType("0");
warehouseStorageOrder.setWarehouseOrderType("0");
warehouseStorageOrder.setWarehouseStorageCode(warehouseStorageCode);
return warehouseStorageOrderMapper.insertWarehouseStorageOrder(warehouseStorageOrder);
return 0;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ProcessInstance submitApply(PurchaseOrder purchaseOrder) {
SysUser user = ShiroUtils.getSysUser();
purchaseOrder.setApplyUser(user.getLoginName());
purchaseOrder.setApplyTime(DateUtils.getNowDate());
insertPurchaseOrder(purchaseOrder);
// 启动流程
String applyTitle = user.getUserName()+"发起了采购订单信息提交审批-"+DateUtils.dateTimeNow();
String instanceType = "submit";
ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseOrder, user);
String processInstanceId = processInstance.getProcessInstanceId();
// 提交实例id
purchaseOrder.setSubmitInstanceId(processInstanceId);
// 存在提交完就流程结束的情况
boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId);
if(processIsFinish){
// 审核状态-审核通过
purchaseOrder.setAuditStatus("1");
// 使用状态-是
purchaseOrder.setUseStatus("1");
}
purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
return processInstance;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ProcessInstance cancelPurchaseOrderById(Long id) {
PurchaseOrderVo purchaseOrderVo = purchaseOrderMapper.selectPurchaseOrderById(id);
// 审核状态-待审核
purchaseOrderVo.setAuditStatus("0");
SysUser user = ShiroUtils.getSysUser();
// 启动流程
String applyTitle = user.getUserName()+"发起了物料信息作废审批-"+DateUtils.dateTimeNow();
String instanceType = "cancel";
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderVo,purchaseOrder);
ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseOrder, user);
String processInstanceId = processInstance.getProcessInstanceId();
// 作废实例id
purchaseOrder.setCancelInstanceId(processInstanceId);
// 存在提交完就流程结束的情况
boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId);
if(processIsFinish){
// 审核状态-审核通过
purchaseOrder.setAuditStatus("1");
// 使用状态-已作废
purchaseOrder.setUseStatus("2");
}
purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
return processInstance;
}
@Override
public ProcessInstance restorePurchaseOrderById(Long id) {
PurchaseOrderVo purchaseOrderVo = purchaseOrderMapper.selectPurchaseOrderById(id);
// 审核状态-待审核
purchaseOrderVo.setAuditStatus("0");
SysUser user = ShiroUtils.getSysUser();
// 启动流程
String applyTitle = user.getUserName()+"发起了物料信息恢复审批-"+DateUtils.dateTimeNow();
String instanceType = "restore";
PurchaseOrder purchaseOrder = new PurchaseOrder();
BeanUtils.copyProperties(purchaseOrderVo,purchaseOrder);
ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,purchaseOrder, user);
String processInstanceId = processInstance.getProcessInstanceId();
// 恢复实例id
purchaseOrder.setRestoreInstanceId(processInstanceId);
// 存在提交完就流程结束的情况
boolean processIsFinish = processService.judgeProcessIsFinish(processInstanceId);
if(processIsFinish){
// 审核状态-审核通过
purchaseOrder.setAuditStatus("1");
// 使用状态-是
purchaseOrder.setUseStatus("1");
}
purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
return processInstance;
}
private ProcessInstance startProcessInstance(String applyTitle, String instanceType, PurchaseOrder purchaseOrder, SysUser user) {
Long materialId = purchaseOrder.getPurchaseOrderId();
String businessKey = materialId.toString(); // 实体类 ID,作为流程的业务 key
String key = "material";
Map<String,Object> variables = new HashMap<>();
// 构造authority传参
buildAuthority(user, variables);
purchaseOrder.setApplyTitle(applyTitle);
// 启动流程
ProcessInstance processInstance = processService.submitApply(user.getLoginName(), businessKey,
applyTitle, purchaseOrder.getPurchaseOrderCode(), key, variables);
String processInstanceId = processInstance.getId();
purchaseOrder.setInstanceId(processInstanceId); // 建立双向关系
purchaseOrder.setInstanceType(instanceType);
return processInstance;
}
private void buildAuthority(SysUser user, Map<String, Object> variables) {
Set<String> roleKeys = roleService.selectRoleKeys(user.getUserId());
// 角色不同审核人不同
if(roleKeys.contains("fzjlRole") || roleKeys.contains("admin")){
variables.put("authority",4);
}else if(roleKeys.contains("cgzgRole")){
variables.put("authority",3);
}else if(roleKeys.contains("cgjlRole")){
variables.put("authority",2);
}else if(roleKeys.contains("cgyRole")){
variables.put("authority",1);
}
}
}

20
ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderChildMapper.xml

@ -48,16 +48,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectPurchaseOrderChildVo">
select purchase_order_child_id, purchase_order_code, purchase_plan_code,purchase_plan_correlation_code,
supplier_code, supplier_name,
material_code, material_name,material_type, material_describe,material_brand,
material_photoUrl, material_process_method,material_unit,warehouseDept,
material_no_rmb, material_rmb, material_num,
material_amount, material_sum, material_no_rmb_sum, material_rmb_sum,
material_real_num, material_real_no_rmb, material_real_rmb, material_real_no_rmb_sum,
material_real_rmb_sum,delivery_time,eceipt_status, payment_status, tax_rate, create_by,
create_time, update_by, update_time,del_flag, standby_one, standby_two
from purchase_order_child
select purchase_order_child_id, purchase_order_code, purchase_plan_code, purchase_plan_correlation_code, supplier_code, supplier_name, material_code, material_name, material_type, material_brand, material_
`describe`, material_photoUrl, warehouseDept, material_process_method, material_unit, has_storage_num, notify_arrived_num, material_no_rmb, material_rmb, material_num, material_amount,
material_sum, material_no_rmb_sum, material_rmb_sum, material_real_num, material_real_no_rmb, material_real_rmb, material_real_no_rmb_sum, material_real_rmb_sum, delivery_time, eceipt_status, payment_status, tax_
rate, create_by, create_time, update_by, update_time, del_flag, standby_one, standby_two from purchase_order_child
</sql>
<select id="selectPurchaseOrderChildList" parameterType="PurchaseOrderChild" resultMap="PurchaseOrderChildResult">
@ -239,14 +233,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectPurhcaseOrderStorageByPurchaseOrderCode" parameterType="String" resultMap="PurchaseOrderChildResult">
select p.purchase_order_child_id,p.purchase_order_code,p.purchase_plan_code,p.purchase_plan_correlation_code,
select p.purchase_order_code,p.purchase_plan_code,p.purchase_plan_correlation_code,
p.supplier_code,p.supplier_name,p.material_code,p.material_name,p.material_type,p.material_describe,
p.material_brand,p.material_photo_url,p.material_process_method,p.material_unit,p.warehouse_dept,p.material_no_rmb,
p.material_brand,p.material_photoUrl,p.material_process_method,p.material_unit,p.warehouse_dept,p.material_no_rmb,
p.material_rmb,p.material_num,p.material_amount,p.material_sum,p.material_no_rmb_sum,p.material_rmb_sum,
p.material_real_num,p.material_real_no_rmb,p.material_real_rmb,p.material_real_no_rmb_sum,p.material_real_rmb_sum,
p.delivery_time,p.eceipt_status,p.payment_status,p.tax_rate,p.create_by,p.create_time,p.update_by,p.update_time,p.del_flag,
(select sum(w.has_storage_num) from warehouse_storage_order_detail as w where w.material_no = p.material_code and w.related_order_code = p.purchase_order_code and w.supplier_code = p.supplier_code) as has_storage_num,
(select sum(w.notify_has_arrived_num) from warehouse_storage_order_detail as w where w.material_no = p.material_code and w.related_order_code = p.purchase_order_code and w.supplier_code = p.supplier_code) as notify_has_arrived_num
(select sum(w.notify_arrived_num) from warehouse_storage_order_detail as w where w.material_no = p.material_code and w.related_order_code = p.purchase_order_code and w.supplier_code = p.supplier_code) as notify_has_arrived_num
from purchase_order_child as p where p.purchase_order_code = #{purchaseOrderCode};
</select>
</mapper>

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

@ -3,8 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.purchase.mapper.PurchaseOrderMapper">
<resultMap type="PurchaseOrder" id="PurchaseOrderResult">
<resultMap type="PurchaseOrderVo" id="PurchaseOrderResult">
<result property="purchaseOrderId" column="purchase_order_id" />
<result property="purchaseOrderCode" column="purchase_order_code" />
<result property="purchaseBuyer" column="purchase_buyer" />
@ -38,17 +37,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="closeCaseNo" column="close_case_no" />
<result property="closeCaseName" column="close_case_name" />
<result property="closeCaseTime" column="close_case_time" />
<result property="confirmNo" column="confirm_no" />
<result property="confirmName" column="confirm_name" />
<result property="confirmTime" column="confirm_time" />
<result property="auditNo" column="audit_no" />
<result property="auditName" column="audit_name" />
<result property="auditTime" column="audit_time" />
<result property="approveNo" column="approve_no" />
<result property="approveName" column="approve_name" />
<result property="approveTime" column="approve_time" />
<result property="firstAddTime" column="first_add_time" />
<result property="updateInfoTime" column="update_info_time" />
<result property="standbyOne" column="standby_one" />
<result property="standbyTwo" column="standby_two" />
<result property="delFlag" column="del_flag" />
@ -57,6 +45,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="stockAddress" column="stock_address" />
<result property="stockContact" column="stock_contact" />
<result property="stockPhone" column="stock_phone" />
<result property="instanceId" column="instance_id" />
<result property="instanceType" column="instance_type" />
<result property="instanceTypeName" column="instance_type_name" />
<result property="submitInstanceId" column="submit_instance_id" />
<result property="cancelInstanceId" column="cancel_instance_id" />
<result property="restoreInstanceId" column="restore_instance_id" />
<result property="applyTitle" column="apply_title" />
<result property="applyUser" column="apply_user" />
<result property="applyTime" column="apply_time" />
<result property="createTime" column="create_time" />
<result property="createBy" column="create_by" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
</resultMap>
<sql id="selectPurchaseOrderVo">
@ -65,21 +66,54 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
customer_contact, contact_number, customer_fax, delivery_address, payment_terms,
delivery_conditions, delivery_method, purchase_name, billing_date, tax_rate,
purchase_category, purchase_commander, customer_order_number, remark_content,
close_case_no, close_case_name, close_case_time, confirm_no, confirm_name,
confirm_time, audit_no, audit_name, audit_time, approve_no, approve_name,
close_case_no, close_case_name, close_case_time,
del_flag, stock_no, stock_name, stock_address, stock_contact, stock_phone,
approve_time, standby_one, standby_two from purchase_order
approve_time, standby_one, standby_two, instance_id, instance_type, instance_type_name,
submit_instance_id, cancel_instance_id, restore_instance_id, apply_title, apply_user, apply_time,
create_time, create_by, update_time, update_by from purchase_order
</sql>
<select id="selectPurchaseOrderList" parameterType="PurchaseOrder" resultMap="PurchaseOrderResult">
<include refid="selectPurchaseOrderVo"/>
select s.purchaesse_order_id, s.purchase_order_code, s.supplier_code, s.supplier_name,
s.arrived_time, s.eceipt_type,
s.customer_contact, s.contact_number, s.customer_fax, s.delivery_address, s.payment_terms,
s.delivery_conditions, s.delivery_method, s.purchase_name, s.billing_date, s.tax_rate,
s.purchase_category, s.purchase_commander, s.customer_order_number, s.remark_content,
s.close_case_no, s.close_case_name, s.close_case_time,
s.del_flag, s.stock_no, s.stock_name, s.stock_address, s.stock_contact, s.stock_phone,
s.approve_time, s.standby_one, s.standby_two, s.instance_id, s.instance_type, p.dict_label as instance_type_name,
s.submit_instance_id, s.cancel_instance_id, s.restore_instance_id, s.apply_title, s.apply_user, s.apply_time,
s.create_time, s.create_by, s.update_time, s.update_by
from purchase_order as s
left join(
select dict_value,dict_label from sys_dict_data where dict_type = 'processType'
) as p
on s.instance_type = p.dict_value
<where>
<if test="purchaseOrderCode != null and purchaseOrderCode != ''"> and purchase_order_code like concat('%', #{purchaseOrderCode}, '%')</if>
<if test="supplierCode != null and supplierCode != ''"> and supplier_code like concat('%', #{supplierCode}, '%')</if>
<if test="supplierName != null and supplierName != ''"> and supplier_name like concat('%', #{supplierName}, '%')</if>
<if test="purchaseOrderCode != null and purchaseOrderCode != ''"> and s.purchase_order_code like concat('%', #{purchaseOrderCode}, '%')</if>
<if test="purchaseBuyer != null and purchaseBuyer != ''"> and s.purchase_buyer = #{purchaseBuyer}</if>
<if test="supplierCode != null and supplierCode != ''">
and s.purchase_order_code in ( select purchase_order_code from purchase_order_child where supplier_code = #{supplierCode})
</if>
<if test="supplierName != null and supplierName != ''">
and s.purchase_order_code in ( select purchase_order_code from purchase_order_child where supplier_name = #{supplierName})
</if>
<if test="useStatus != null and useStatus != ''">and s.use_status = #{useStatus}</if>
<if test="eceiptStatus != null ">and s.eceipt_status = #{eceiptStatus}</if>
<if test="paymentStatus != null">and s.payment_status = #{paymentStatus}</if>
<if test="instanceId != null and instanceId != ''"> and s.instance_id = #{instanceId}</if>
<if test="instanceType != null and instanceType != ''"> and s.instance_type = #{instanceType}</if>
<if test="submitInstanceId != null and submitInstanceId != ''"> and s.submit_instance_id = #{submitInstanceId}</if>
<if test="cancelInstanceId != null and cancelInstanceId != ''"> and s.cancel_instance_id = #{cancelInstanceId}</if>
<if test="restoreInstanceId != null and restoreInstanceId != ''"> and s.restore_instance_id = #{restoreInstanceId}</if>
<if test="applyTitle != null and applyTitle != ''"> and s.apply_title = #{applyTitle}</if>
<if test="applyUser != null and applyUser != ''"> and s.apply_user = #{applyUser}</if>
<if test="applyTime != null "> and s.apply_time = #{applyTime}</if>
<if test="keyword != null and keyword != ''"> and (s.purchaseOrderCode like concat('%',#{keyword},'%') or s.purchase_order_id like concat('%',#{keyword},'%'))</if>
<if test="params.beginBillingDate != null and params.beginBillingDate != '' and params.endBillingDate != null and params.endBillingDate != ''"> and billing_date between #{params.beginBillingDate} and #{params.endBillingDate}</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
order by s.create_time desc
</select>
<select id="selectPurchaseOrderById" parameterType="Long" resultMap="PurchaseOrderResult">
@ -108,8 +142,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="customerOrderNumber != null">customer_order_number,</if>
<if test="standbyOne != null">standby_one,</if>
<if test="standbyTwo != null">standby_two,</if>
<if test="createTime != null" >create_time,</if>
<if test="createBy != null" >create_by,</if>
<if test="delFlag != null" >del_flag,</if>
<if test="stockNo!= null">stock_no,</if>
<if test="stockName!= null">stock_name,</if>
@ -118,6 +150,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stockPhone!= null">stock_phone,</if>
<if test="arrivedTime != null">arrived_time,</if>
<if test="eceiptType != null">eceipt_type,</if>
<if test="instanceId != null">instance_id,</if>
<if test="instanceType != null">instance_type,</if>
<if test="submitInstanceId != null">submit_instance_id,</if>
<if test="cancelInstanceId != null">cancel_instance_id,</if>
<if test="restoreInstanceId != null">restore_instance_id,</if>
<if test="applyTitle != null">apply_title,</if>
<if test="applyUser != null">apply_user,</if>
<if test="applyTime != null">apply_time,</if>
<if test="useStatus != null">use_status,</if>
<if test="auditStatus != null">audit_status,</if>
<if test="createTime != null">create_time,</if>
<if test="createBy != null">create_by,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="purchaseOrderCode != null">#{purchaseOrderCode},</if>
@ -149,6 +193,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stockPhone!= null">#{stockPhone},</if>
<if test="arrivedTime != null">#{arrivedTime},</if>
<if test="eceiptType != null">#{eceiptType},</if>
<if test="instanceId != null">#{instanceId},</if>
<if test="instanceType != null">#{instanceType},</if>
<if test="submitInstanceId != null">#{submitInstanceId},</if>
<if test="cancelInstanceId != null">#{cancelInstanceId},</if>
<if test="restoreInstanceId != null">#{restoreInstanceId},</if>
<if test="applyTitle != null">#{applyTitle},</if>
<if test="applyUser != null">#{applyUser},</if>
<if test="applyTime != null">#{applyTime},</if>
<if test="useStatus != null">#{useStatus},</if>
<if test="auditStatus != null">#{auditStatus},</if>
</trim>
</insert>
@ -175,15 +229,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="closeCaseNo != null">close_case_no = #{closeCaseNo},</if>
<if test="closeCaseName != null">close_case_name = #{closeCaseName},</if>
<if test="closeCaseTime != null">close_case_time = #{closeCaseTime},</if>
<if test="confirmNo != null">confirm_no = #{confirmNo},</if>
<if test="confirmName != null">confirm_name = #{confirmName},</if>
<if test="confirmTime != null">confirm_time = #{confirmTime},</if>
<if test="auditNo != null">audit_no = #{auditNo},</if>
<if test="auditName != null">audit_name = #{auditName},</if>
<if test="auditTime != null">audit_time = #{auditTime},</if>
<if test="approveNo != null">approve_no = #{approveNo},</if>
<if test="approveName != null">approve_name = #{approveName},</if>
<if test="approveTime != null">approve_time = #{approveTime},</if>
<if test="standbyOne != null">standby_one = #{standbyOne},</if>
<if test="standbyTwo != null">standby_two = #{standbyTwo},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
@ -194,6 +239,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="stockPhone!= null">stock_phone = #{stockPhone},</if>
<if test="arrivedTime != null">arrived_time = #{arrivedTime},</if>
<if test="eceiptType != null">eceipt_type = #{eceiptType},</if>
<if test="instanceId != null">instance_id = #{instanceId},</if>
<if test="instanceType != null">instance_type = #{instanceType},</if>
<if test="submitInstanceId != null">submit_instance_id = #{submitInstanceId},</if>
<if test="cancelInstanceId != null">cancel_instance_id = #{cancelInstanceId},</if>
<if test="restoreInstanceId != null">restore_instance_id = #{restoreInstanceId},</if>
<if test="applyTitle != null">apply_title = #{applyTitle},</if>
<if test="applyUser != null">apply_user = #{applyUser},</if>
<if test="applyTime != null">apply_time = #{applyTime},</if>
<if test="useStatus != null">use_status = #{useStatus},</if>
<if test="auditStatus != null">audit_status = #{auditStatus},</if>
<if test="updateTime !=null">update_time = #{updateTime},</if>
<if test="updateBy !=null">update_by = #{updateBy},</if>
</trim>
where purchase_order_id = #{purchaseOrderId}
</update>
@ -201,7 +258,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<delete id="deletePurchaseOrderById" parameterType="Long">
delete from purchase_order where purchase_order_id = #{purchaseOrderId}
</delete>
<select id="checkPurchaseOrderCodeUnique" resultType="java.lang.Integer">
select count(1) from purchase_order where purchase_ordre_code = #{purchaseOrderCode} limit 1
</select>
<delete id="deletePurchaseOrderByIds" parameterType="String">
delete from purchase_order where purchase_order_id in
<foreach item="purchaseOrderId" collection="array" open="(" separator="," close=")">

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

@ -4,9 +4,7 @@
<th:block th:include="include :: header('暂收-采购单(采购入库)')" />
<th:block th:include="include :: datetimepicker-css" />
<style>
.supplier-value span {margin-right: 10px;}
</style>
</head>
<body class="white-bg">

108
ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/addPurchaseOrder.html

@ -4,6 +4,7 @@
<th:block th:include="include :: header('新增采购计划单')" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: select2-css" />
<th:block th:include="include :: bootstrap-editable-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
@ -56,25 +57,25 @@
<div class="form-group">
<label for="purchaseMaterialSum" class="col-sm-2 col-form-label">物料合计:</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="purchaseMaterialSum">
<input type="text" class="form-control" value="0" id="purchaseMaterialSum">
</div>
</div>
<div class="form-group">
<label for="purchaseSum" class="col-sm-2 col-form-label">采购合计:</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="purchaseSum">
<input type="text" class="form-control" value="0" id="purchaseSum">
</div>
</div>
<div class="form-group">
<label for="purchaseNoRmbSum" class="col-sm-2 col-form-label">不含税采购总价:</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="purchaseNoRmbSum">
<input type="text" class="form-control" value="0" id="purchaseNoRmbSum">
</div>
</div>
<div class="form-group">
<label for="purchaseRmbSum" class="col-sm-2 col-form-label">含税采购总价:</label>
<div class="col-sm-4">
<input type="text" class="form-control" id="purchaseRmbSum">
<input type="text" class="form-control" value="0" id="purchaseRmbSum">
</div>
</div>
</div>
@ -188,7 +189,7 @@
'<div class="form-row">' +
'<label class="col-sm-2"> 实际采购数: </label>' +
'<div class ="col-sm-4">' +
'<input type="text" name="materialNum" class="form-control supplierMaterialNum_'+ supplierIndex +'"" id="actualPurchaseNum_' + tableId + '">' +
'<input type="text" name="materialNum" class="form-control supplierMaterialNum_'+ supplierIndex +'"" id="actualPurchaseNum_' + tableId + '">' +
'</div>' +
'</div>' +
'<div class="form-row">' +
@ -220,10 +221,15 @@
});
// 给实际采购数的输入框绑定事件处理器
$('.supplierMaterialNum').off('keyup').on('keyup', function(event,element) {
//实际采购数不能超过计划采购数
var tableId = $(element).closest('.table-materialCode').attr('id');
if (event.keyCode === 13) {
// 获取当前供应商的采购数量
var purchaseNum = parseFloat($(event).val()) || 0;
if (purchaseNum > parseFloat($(event).closest('.supplier-card').find('.supplierMaterialNum').text().trim())) {
$(event).val($(event).closest('.supplier-card').find('.supplierMaterialNum').text().trim());
purchaseNum = parseFloat($(event).val()) || 0;
}
// 获取当前供应商的采购价格
var noRmbPrice = parseFloat($(event).closest('.supplier-card').find('.supplierMaterialNoRmb').text().trim());
var rmbPrice = parseFloat($(event).closest('.supplier-card').find('.supplierMaterialRmb').text().trim());
@ -250,41 +256,45 @@
var actualPurchaseTotal = 0;
var materialNoRmbTotal = 0;
var materialRmbTotal = 0;
$('#' + 'supplier-' + tableId).find('.supplier-card').each(function(supplierIndex, supplierCard) {
var purchaseNum = parseFloat($(supplierCard).find('.supplierMaterialNum').val()) || 0;
var noRmbPrice = parseFloat($(supplierCard).find('.supplierMaterialNoRmb').text().trim());
var rmbPrice = parseFloat($(supplierCard).find('.supplierMaterialRmb').text().trim());
actualPurchaseTotal += purchaseNum;
materialNoRmbTotal += purchaseNum * noRmbPrice;
materialRmbTotal += purchaseNum * rmbPrice;
});
// 更新合计显示
$('#materialNoRmbSum_' + tableId).val(materialNoRmbTotal.toFixed(2)); // 格式化为两位小数
$('#materialRmbSum_' + tableId).val(materialRmbTotal.toFixed(2));
}
function calculateGlobalTotals() {
var totalMaterialSum = 0;
var totalPurchaseSum = 0;
var totalNoRmbSum = 0;
var totalRmbSum = 0;
tableIdList.forEach(function(tableId) {
var materialNoRmbTotal = parseFloat($('#materialNoRmbSum_' + tableId).val()) || 0;
var materialRmbTotal = parseFloat($('#materialRmbSum_' + tableId).val()) || 0;
totalMaterialSum += materialNoRmbTotal; // 假设物料合计就是不含税采购总价
totalPurchaseSum += materialNoRmbTotal; // 假设采购合计也是不含税采购总价(如果逻辑不同,请相应调整)
totalNoRmbSum += materialNoRmbTotal;
totalRmbSum += materialRmbTotal;
});
$('#' + 'supplier-' + tableId).find('.supplier-card').each(function (supplierIndex, supplierCard) {
var purchaseNum = parseFloat($(supplierCard).find('.supplierMaterialNum').val()) || 0;
var noRmbPrice = parseFloat($(supplierCard).find('.supplierMaterialNoRmb').text().trim());
var rmbPrice = parseFloat($(supplierCard).find('.supplierMaterialRmb').text().trim());
if (purchaseNum > 0) {
// 如果采购数量大于0,则显示供应商采购总价
$(supplierCard).find('.supplierPurchaseTotal').removeClass('hidden');
$(supplierCard).find('.supplierPurchaseTotalRmb').removeClass('hidden');
} else {
// 否则隐藏供应商采购总价
$(supplierCard).find('.supplierPurchaseTotal').addClass('hidden');
$(supplierCard).find('.supplierPurchaseTotalRmb').addClass('hidden');
}
//物料的供应商合计
totalMaterialSum += purchaseNum;
if (rmbPrice) {
totalPurchaseSum += purchaseNum * rmbPrice;
}
if (noRmbPrice) {
totalNoRmbSum += purchaseNum * noRmbPrice;
}
if (noRmbPrice) {
totalNoRmbSum += purchaseNum * noRmbPrice;
}
$('#purchaseMaterialSum').val(isNaN(totalMaterialSum) ? '' : totalMaterialSum.toFixed(2));
$('#purchaseSum').val(isNaN(totalPurchaseSum) ? '' : totalPurchaseSum.toFixed(2));
$('#purchaseNoRmbSum').val(isNaN(totalNoRmbSum) ? '' : totalNoRmbSum.toFixed(2));
})
})
// 设置合计值,确保处理NaN
$('#purchaseMaterialSum').val(isNaN(totalMaterialSum) ? '' : totalMaterialSum.toFixed(2));
$('#purchaseSum').val(isNaN(totalPurchaseSum) ? '' : totalPurchaseSum.toFixed(2));
$('#purchaseNoRmbSum').val(isNaN(totalNoRmbSum) ? '' : totalNoRmbSum.toFixed(2));
$('#purchaseRmbSum').val(isNaN(totalRmbSum) ? '' : totalRmbSum.toFixed(2));
}
function tableSetup(element, tableId) {
var $totalSection = $(
'<div class="card">' +
@ -350,22 +360,6 @@
],
});
}
function selectSupplierQuote(){
$('.table-materialCode').each(function(index, tableElement) {
var tableId = tableIdList[index];
let materialObj = materialList[index];
if (typeof materialObj === 'undefined') return;
$('#' + 'material-' + tableId).find('.supplier-card').each(function(supplierIndex, supplierCard) {
var supplierCode = $(supplierCard).find('.supplierCode').text().trim();
var supplierName = $(supplierCard).find('.supplierName').text().trim();
var materialRealNum = parseInt($(supplierCard).find('.supplierMaterialNum').val(), 10) || 0;
var materialRealRmb = parseInt($(supplierCard).find('.supplierMaterialRmb').val(), 10) || 0;
var materialRealNoRmb = parseInt($(supplierCard).find('.supplierMaterialNoRmb').val(), 10) || 0;
//计划供应商下面的采购数量
purchaseOrder.purchaseOrderChildList.push(materialData);
});
});
}
function submitHandler() {
if ($.validate.form()) {
var purchaseOrder = {
@ -454,14 +448,16 @@
processResults: function (data) {
var resultList = data;
var options = [];
for (var i = 0; i < resultList.length; i++) {
var result = resultList[i];
options.push({id: result.stockNo, text: result.stockNo});
for(var i= 0, len=resultList.length;i<len;i++){
var option = resultList[i];
option.id = resultList[i]["stockNo"];
option.text = resultList[i]["stockNo"];
options.push(option);
}
return {
results: options,
}
pagination: {}
};
},
escapeMarkup: function (markup) {return markup;},
}
@ -471,6 +467,14 @@
var data = e.params.data;
$("#stockName").val(data.stockName);
$("#stockAddress").val(data.stockAddr);
$("#stockContact").val(data.stockmanager);
});
$("input[name='deliveryTime']").datepicker({
language: 'zh-CN',
autoclose: true,
todayHighlight: true,
format: "yyyy-mm-dd"
});
</script>
</body>

4
ruoyi-admin/src/main/resources/templates/purchase/purchasePlan/purchasePlan.html

@ -103,9 +103,7 @@
},
{title: '采购计划单号',field: 'purchasePlanCode'},
{title: '关联单号', field: 'correlationCode',},
{title: '采购来源',field: 'purchasePlanType',
formatter: function(value, row, index) {return $.table.selectDictLabel(purchasePlanTypeDatas, value);}
},
{title: '采购来源',field: 'purchasePlanType',formatter: function(value, row, index) {return $.table.selectDictLabel(purchasePlanTypeDatas, value);}},
{title: '物料合计',field: 'materialAmount',},
{title: '数量总计', field: 'materialSum',},
{title: '不含税总价(RMB)',field: 'noRmbSum',},

Loading…
Cancel
Save