1.0.35 初始化采购信息

dev
yinq 3 months ago
parent 996528861b
commit f08d730fc7

@ -0,0 +1,127 @@
package org.dromara.oa.erp.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseVo;
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseBo;
import org.dromara.oa.erp.service.IErpProjectPurchaseService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/oa/erp/projectPurchase
*
* @author Yinq
* @date 2025-11-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/erp/projectPurchase")
public class ErpProjectPurchaseController extends BaseController {
private final IErpProjectPurchaseService erpProjectPurchaseService;
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchase:list")
@GetMapping("/list")
public TableDataInfo<ErpProjectPurchaseVo> list(ErpProjectPurchaseBo bo, PageQuery pageQuery) {
return erpProjectPurchaseService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchase:export")
@Log(title = "项目采购信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ErpProjectPurchaseBo bo, HttpServletResponse response) {
List<ErpProjectPurchaseVo> list = erpProjectPurchaseService.queryList(bo);
ExcelUtil.exportExcel(list, "项目采购信息", ErpProjectPurchaseVo.class, response);
}
/**
*
*
* @param projectPurchaseId
*/
@SaCheckPermission("oa/erp:projectPurchase:query")
@GetMapping("/{projectPurchaseId}")
public R<ErpProjectPurchaseVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("projectPurchaseId") Long projectPurchaseId) {
return R.ok(erpProjectPurchaseService.queryById(projectPurchaseId));
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchase:add")
@Log(title = "项目采购信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpProjectPurchaseBo bo) {
return toAjax(erpProjectPurchaseService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchase:add")
@Log(title = "项目采购信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/submitAndFlowStart")
public R<ErpProjectPurchaseVo> submitAndFlowStart(@Validated(AddGroup.class) @RequestBody ErpProjectPurchaseBo bo) {
return R.ok(erpProjectPurchaseService.projectPurchaseSubmitAndFlowStart(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchase:edit")
@Log(title = "项目采购信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpProjectPurchaseBo bo) {
return toAjax(erpProjectPurchaseService.updateByBo(bo));
}
/**
*
*
* @param projectPurchaseIds
*/
@SaCheckPermission("oa/erp:projectPurchase:remove")
@Log(title = "项目采购信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{projectPurchaseIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("projectPurchaseIds") Long[] projectPurchaseIds) {
return toAjax(erpProjectPurchaseService.deleteWithValidByIds(List.of(projectPurchaseIds), true));
}
/**
*
*/
@GetMapping("/getErpProjectPurchaseList")
public R<List<ErpProjectPurchaseVo>> getErpProjectPurchaseList(ErpProjectPurchaseBo bo) {
List<ErpProjectPurchaseVo> list = erpProjectPurchaseService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,116 @@
package org.dromara.oa.erp.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseMaterialVo;
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseMaterialBo;
import org.dromara.oa.erp.service.IErpProjectPurchaseMaterialService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/oa/erp/projectPurchaseMaterial
*
* @author Yinq
* @date 2025-11-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/erp/projectPurchaseMaterial")
public class ErpProjectPurchaseMaterialController extends BaseController {
private final IErpProjectPurchaseMaterialService erpProjectPurchaseMaterialService;
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchaseMaterial:list")
@GetMapping("/list")
public TableDataInfo<ErpProjectPurchaseMaterialVo> list(ErpProjectPurchaseMaterialBo bo, PageQuery pageQuery) {
return erpProjectPurchaseMaterialService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchaseMaterial:export")
@Log(title = "项目采购物料", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(ErpProjectPurchaseMaterialBo bo, HttpServletResponse response) {
List<ErpProjectPurchaseMaterialVo> list = erpProjectPurchaseMaterialService.queryList(bo);
ExcelUtil.exportExcel(list, "项目采购物料", ErpProjectPurchaseMaterialVo.class, response);
}
/**
*
*
* @param purchaseMaterialId
*/
@SaCheckPermission("oa/erp:projectPurchaseMaterial:query")
@GetMapping("/{purchaseMaterialId}")
public R<ErpProjectPurchaseMaterialVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("purchaseMaterialId") Long purchaseMaterialId) {
return R.ok(erpProjectPurchaseMaterialService.queryById(purchaseMaterialId));
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchaseMaterial:add")
@Log(title = "项目采购物料", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody ErpProjectPurchaseMaterialBo bo) {
return toAjax(erpProjectPurchaseMaterialService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:projectPurchaseMaterial:edit")
@Log(title = "项目采购物料", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody ErpProjectPurchaseMaterialBo bo) {
return toAjax(erpProjectPurchaseMaterialService.updateByBo(bo));
}
/**
*
*
* @param purchaseMaterialIds
*/
@SaCheckPermission("oa/erp:projectPurchaseMaterial:remove")
@Log(title = "项目采购物料", businessType = BusinessType.DELETE)
@DeleteMapping("/{purchaseMaterialIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("purchaseMaterialIds") Long[] purchaseMaterialIds) {
return toAjax(erpProjectPurchaseMaterialService.deleteWithValidByIds(List.of(purchaseMaterialIds), true));
}
/**
*
*/
@GetMapping("/getErpProjectPurchaseMaterialList")
public R<List<ErpProjectPurchaseMaterialVo>> getErpProjectPurchaseMaterialList(ErpProjectPurchaseMaterialBo bo) {
List<ErpProjectPurchaseMaterialVo> list = erpProjectPurchaseMaterialService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,123 @@
package org.dromara.oa.erp.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* erp_project_purchase
*
* @author Yinq
* @date 2025-11-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_project_purchase")
public class ErpProjectPurchase extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "project_purchase_id", type = IdType.AUTO)
private Long projectPurchaseId;
/**
* ID
*/
private Long projectId;
/**
*
*/
private String projectCode;
/**
*
*/
private Long managerId;
/**
*
*/
private Long chargeId;
/**
*
*/
private Long deputyId;
/**
*
*/
@Version
private Long version;
/**
*
*/
private Long reporterId;
/**
*
*/
private String consigneeUser;
/**
*
*/
private String consigneeAddress;
/**
*
*/
private String consigneeContact;
/**
* (1 2 3 4 5 6 7)
*/
private String projectPurchaseStatus;
/**
*
*/
private String flowStatus;
/**
*
*/
private Long sortOrder;
/**
* /ID
*/
private Long relationId;
/**
*
*/
private String remark;
/**
* 1 0
*/
private String spareFlag;
/**
* 1 0
*/
private String activeFlag;
/**
* 0 1
*/
@TableLogic
private String delFlag;
}

@ -0,0 +1,125 @@
package org.dromara.oa.erp.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* erp_project_purchase_material
*
* @author Yinq
* @date 2025-11-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("erp_project_purchase_material")
public class ErpProjectPurchaseMaterial extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "purchase_material_id", type = IdType.AUTO)
private Long purchaseMaterialId;
/**
* ID
*/
private Long projectPurchaseId;
/**
* ID
*/
private Long relationDetailsId;
/**
* 1 0
*/
private String spareFlag;
/**
* 1 2
*/
private String purchasePlanFlag;
/**
* 1 2
*/
private String materialFlag;
/**
* ID
*/
private Long materialId;
/**
* ID
*/
private Long relationMaterialId;
/**
*
*/
private String materialCode;
/**
*
*/
private String materialName;
/**
*
*/
private String specificationDescription;
/**
* ID
*/
private Long unitId;
/**
*
*/
private BigDecimal needPurchaseAmount;
/**
*
*/
private BigDecimal purchaseAmount;
/**
*
*/
private Date arrivalTime;
/**
*
*/
private Long serialNumber;
/**
*
*/
private String remark;
/**
* 1 0
*/
private String activeFlag;
/**
* 0 1
*/
@TableLogic
private String delFlag;
}

@ -0,0 +1,130 @@
package org.dromara.oa.erp.domain.bo;
import org.dromara.oa.erp.domain.ErpProjectPurchase;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt;
import java.util.Map;
/**
* erp_project_purchase
*
* @author Yinq
* @date 2025-11-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ErpProjectPurchase.class, reverseConvertGenerate = false)
public class ErpProjectPurchaseBo extends BaseEntity {
/**
* ID
*/
private Long projectPurchaseId;
/**
* ID
*/
private Long projectId;
/**
*
*/
@NotBlank(message = "项目号不能为空", groups = { AddGroup.class, EditGroup.class })
private String projectCode;
/**
*
*/
private Long managerId;
/**
*
*/
private Long chargeId;
/**
*
*/
private Long deputyId;
/**
*
*/
private Long reporterId;
/**
*
*/
@NotBlank(message = "收货人不能为空", groups = { AddGroup.class, EditGroup.class })
private String consigneeUser;
/**
*
*/
@NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String consigneeAddress;
/**
*
*/
private String consigneeContact;
/**
* (1 2 3 4 5 6 7)
*/
private String projectPurchaseStatus;
/**
*
*/
private String flowStatus;
/**
*
*/
private Long sortOrder;
/**
* /ID
*/
private Long relationId;
/**
*
*/
private String remark;
/**
* 1 0
*/
private String spareFlag;
/**
* 1 0
*/
private String activeFlag;
/**
*
*/
private String flowCode;
/**
*
*/
private Map<String, Object> variables;
/**
*
*/
private RemoteFlowInstanceBizExt bizExt;
}

@ -0,0 +1,119 @@
package org.dromara.oa.erp.domain.bo;
import org.dromara.oa.erp.domain.ErpProjectPurchaseMaterial;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* erp_project_purchase_material
*
* @author Yinq
* @date 2025-11-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = ErpProjectPurchaseMaterial.class, reverseConvertGenerate = false)
public class ErpProjectPurchaseMaterialBo extends BaseEntity {
/**
* ID
*/
private Long purchaseMaterialId;
/**
* ID
*/
private Long projectPurchaseId;
/**
* ID
*/
private Long relationDetailsId;
/**
* 1 0
*/
private String spareFlag;
/**
* 1 2
*/
private String purchasePlanFlag;
/**
* 1 2
*/
@NotBlank(message = "标准物料标识1标准物料 2非标物料不能为空", groups = { AddGroup.class, EditGroup.class })
private String materialFlag;
/**
* ID
*/
private Long materialId;
/**
* ID
*/
private Long relationMaterialId;
/**
*
*/
private String materialCode;
/**
*
*/
@NotBlank(message = "采购物料名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String materialName;
/**
*
*/
private String specificationDescription;
/**
* ID
*/
private Long unitId;
/**
*
*/
private BigDecimal needPurchaseAmount;
/**
*
*/
private BigDecimal purchaseAmount;
/**
*
*/
private Date arrivalTime;
/**
*
*/
private Long serialNumber;
/**
*
*/
private String remark;
/**
* 1 0
*/
private String activeFlag;
}

@ -0,0 +1,147 @@
package org.dromara.oa.erp.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.oa.erp.domain.ErpProjectPurchaseMaterial;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* erp_project_purchase_material
*
* @author Yinq
* @date 2025-11-13
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ErpProjectPurchaseMaterial.class)
public class ErpProjectPurchaseMaterialVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "项目采购ID")
private Long purchaseMaterialId;
/**
* ID
*/
@ExcelProperty(value = "项目采购ID")
private Long projectPurchaseId;
/**
* ID
*/
@ExcelProperty(value = "关联明细ID")
private Long relationDetailsId;
/**
* 1 0
*/
@ExcelProperty(value = "是否备件类", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "spare_flag")
private String spareFlag;
/**
* 1 2
*/
@ExcelProperty(value = "计划标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "purchase_plan_flag")
private String purchasePlanFlag;
/**
* 1 2
*/
@ExcelProperty(value = "标准物料标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "material_flag")
private String materialFlag;
/**
* ID
*/
@ExcelProperty(value = "物料ID")
private Long materialId;
/**
* ID
*/
@ExcelProperty(value = "销售物料ID")
private Long relationMaterialId;
/**
*
*/
@ExcelProperty(value = "采购物料编码")
private String materialCode;
/**
*
*/
@ExcelProperty(value = "采购物料名称")
private String materialName;
/**
*
*/
@ExcelProperty(value = "详细参数")
private String specificationDescription;
/**
* ID
*/
@ExcelProperty(value = "单位ID")
private Long unitId;
/**
*
*/
@ExcelProperty(value = "需采购总数量")
private BigDecimal needPurchaseAmount;
/**
*
*/
@ExcelProperty(value = "本次采购数量")
private BigDecimal purchaseAmount;
/**
*
*/
@ExcelProperty(value = "需求到货时间")
private Date arrivalTime;
/**
*
*/
@ExcelProperty(value = "序号")
private Long serialNumber;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
}

@ -0,0 +1,137 @@
package org.dromara.oa.erp.domain.vo;
import org.dromara.oa.erp.domain.ErpProjectPurchase;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* erp_project_purchase
*
* @author Yinq
* @date 2025-11-13
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = ErpProjectPurchase.class)
public class ErpProjectPurchaseVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "项目采购ID")
private Long projectPurchaseId;
/**
* ID
*/
@ExcelProperty(value = "项目ID")
private Long projectId;
/**
*
*/
@ExcelProperty(value = "项目号")
private String projectCode;
/**
*
*/
@ExcelProperty(value = "项目经理")
private Long managerId;
/**
*
*/
@ExcelProperty(value = "部门负责人")
private Long chargeId;
/**
*
*/
@ExcelProperty(value = "分管副总")
private Long deputyId;
/**
*
*/
@ExcelProperty(value = "提报人")
private Long reporterId;
/**
*
*/
@ExcelProperty(value = "收货人")
private String consigneeUser;
/**
*
*/
@ExcelProperty(value = "收货地址")
private String consigneeAddress;
/**
*
*/
@ExcelProperty(value = "收货人联系方式")
private String consigneeContact;
/**
* (1 2 3 4 5 6 7)
*/
@ExcelProperty(value = "项目采购状态(1暂存 2审批中 3审批完成 4作废 5已发货 6已收货 7已完成)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "project_purchase_status")
private String projectPurchaseStatus;
/**
*
*/
@ExcelProperty(value = "流程状态")
private String flowStatus;
/**
*
*/
@ExcelProperty(value = "排序号")
private Long sortOrder;
/**
* /ID
*/
@ExcelProperty(value = "合同/预算ID")
private Long relationId;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 1 0
*/
@ExcelProperty(value = "是否备件类", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "spare_flag")
private String spareFlag;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
}

@ -0,0 +1,37 @@
package org.dromara.oa.erp.mapper;
import java.util.List;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.oa.erp.domain.ErpProjectPurchase;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author Yinq
* @date 2025-11-13
*/
public interface ErpProjectPurchaseMapper extends BaseMapperPlus<ErpProjectPurchase, ErpProjectPurchaseVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpProjectPurchaseVo> selectCustomErpProjectPurchaseVoList(@Param("page") Page<ErpProjectPurchaseVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectPurchase> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpProjectPurchaseVo> selectCustomErpProjectPurchaseVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectPurchase> queryWrapper);
}

@ -0,0 +1,37 @@
package org.dromara.oa.erp.mapper;
import java.util.List;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.oa.erp.domain.ErpProjectPurchaseMaterial;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseMaterialVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author Yinq
* @date 2025-11-13
*/
public interface ErpProjectPurchaseMaterialMapper extends BaseMapperPlus<ErpProjectPurchaseMaterial, ErpProjectPurchaseMaterialVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpProjectPurchaseMaterialVo> selectCustomErpProjectPurchaseMaterialVoList(@Param("page") Page<ErpProjectPurchaseMaterialVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectPurchaseMaterial> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpProjectPurchaseMaterialVo> selectCustomErpProjectPurchaseMaterialVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectPurchaseMaterial> queryWrapper);
}

@ -0,0 +1,69 @@
package org.dromara.oa.erp.service;
import org.dromara.oa.erp.domain.ErpProjectPurchaseMaterial;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseMaterialVo;
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseMaterialBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author Yinq
* @date 2025-11-13
*/
public interface IErpProjectPurchaseMaterialService {
/**
*
*
* @param purchaseMaterialId
* @return
*/
ErpProjectPurchaseMaterialVo queryById(Long purchaseMaterialId);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<ErpProjectPurchaseMaterialVo> queryPageList(ErpProjectPurchaseMaterialBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpProjectPurchaseMaterialVo> queryList(ErpProjectPurchaseMaterialBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(ErpProjectPurchaseMaterialBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(ErpProjectPurchaseMaterialBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

@ -0,0 +1,77 @@
package org.dromara.oa.erp.service;
import org.dromara.oa.erp.domain.ErpProjectPurchase;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseVo;
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author Yinq
* @date 2025-11-13
*/
public interface IErpProjectPurchaseService {
/**
*
*
* @param projectPurchaseId
* @return
*/
ErpProjectPurchaseVo queryById(Long projectPurchaseId);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<ErpProjectPurchaseVo> queryPageList(ErpProjectPurchaseBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpProjectPurchaseVo> queryList(ErpProjectPurchaseBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(ErpProjectPurchaseBo bo);
/**
*
*
* @param bo
* @return
*/
ErpProjectPurchaseVo projectPurchaseSubmitAndFlowStart(ErpProjectPurchaseBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(ErpProjectPurchaseBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

@ -0,0 +1,147 @@
package org.dromara.oa.erp.service.impl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseMaterialBo;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseMaterialVo;
import org.dromara.oa.erp.domain.ErpProjectPurchaseMaterial;
import org.dromara.oa.erp.mapper.ErpProjectPurchaseMaterialMapper;
import org.dromara.oa.erp.service.IErpProjectPurchaseMaterialService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* Service
*
* @author Yinq
* @date 2025-11-13
*/
@RequiredArgsConstructor
@Service
public class ErpProjectPurchaseMaterialServiceImpl implements IErpProjectPurchaseMaterialService {
private final ErpProjectPurchaseMaterialMapper baseMapper;
/**
*
*
* @param purchaseMaterialId
* @return
*/
@Override
public ErpProjectPurchaseMaterialVo queryById(Long purchaseMaterialId) {
return baseMapper.selectVoById(purchaseMaterialId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpProjectPurchaseMaterialVo> queryPageList(ErpProjectPurchaseMaterialBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpProjectPurchaseMaterial> lqw = buildQueryWrapper(bo);
Page<ErpProjectPurchaseMaterialVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpProjectPurchaseMaterialVo> queryList(ErpProjectPurchaseMaterialBo bo) {
MPJLambdaWrapper<ErpProjectPurchaseMaterial> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpProjectPurchaseMaterial> buildQueryWrapper(ErpProjectPurchaseMaterialBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpProjectPurchaseMaterial> lqw = JoinWrappers.lambda(ErpProjectPurchaseMaterial.class)
.selectAll(ErpProjectPurchaseMaterial.class)
.eq(ErpProjectPurchaseMaterial::getDelFlag, "0")
.eq(bo.getProjectPurchaseId() != null, ErpProjectPurchaseMaterial::getProjectPurchaseId, bo.getProjectPurchaseId())
.eq(bo.getRelationDetailsId() != null, ErpProjectPurchaseMaterial::getRelationDetailsId, bo.getRelationDetailsId())
.eq(StringUtils.isNotBlank(bo.getSpareFlag()), ErpProjectPurchaseMaterial::getSpareFlag, bo.getSpareFlag())
.eq(StringUtils.isNotBlank(bo.getPurchasePlanFlag()), ErpProjectPurchaseMaterial::getPurchasePlanFlag, bo.getPurchasePlanFlag())
.eq(StringUtils.isNotBlank(bo.getMaterialFlag()), ErpProjectPurchaseMaterial::getMaterialFlag, bo.getMaterialFlag())
.eq(bo.getMaterialId() != null, ErpProjectPurchaseMaterial::getMaterialId, bo.getMaterialId())
.eq(bo.getRelationMaterialId() != null, ErpProjectPurchaseMaterial::getRelationMaterialId, bo.getRelationMaterialId())
.eq(StringUtils.isNotBlank(bo.getMaterialCode()), ErpProjectPurchaseMaterial::getMaterialCode, bo.getMaterialCode())
.like(StringUtils.isNotBlank(bo.getMaterialName()), ErpProjectPurchaseMaterial::getMaterialName, bo.getMaterialName())
.eq(StringUtils.isNotBlank(bo.getSpecificationDescription()), ErpProjectPurchaseMaterial::getSpecificationDescription, bo.getSpecificationDescription())
.eq(bo.getUnitId() != null, ErpProjectPurchaseMaterial::getUnitId, bo.getUnitId())
.eq(bo.getNeedPurchaseAmount() != null, ErpProjectPurchaseMaterial::getNeedPurchaseAmount, bo.getNeedPurchaseAmount())
.eq(bo.getPurchaseAmount() != null, ErpProjectPurchaseMaterial::getPurchaseAmount, bo.getPurchaseAmount())
.eq(bo.getArrivalTime() != null, ErpProjectPurchaseMaterial::getArrivalTime, bo.getArrivalTime())
.eq(bo.getSerialNumber() != null, ErpProjectPurchaseMaterial::getSerialNumber, bo.getSerialNumber())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectPurchaseMaterial::getActiveFlag, bo.getActiveFlag());
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(ErpProjectPurchaseMaterialBo bo) {
ErpProjectPurchaseMaterial add = MapstructUtils.convert(bo, ErpProjectPurchaseMaterial.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setPurchaseMaterialId(add.getPurchaseMaterialId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(ErpProjectPurchaseMaterialBo bo) {
ErpProjectPurchaseMaterial update = MapstructUtils.convert(bo, ErpProjectPurchaseMaterial.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(ErpProjectPurchaseMaterial entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -0,0 +1,237 @@
package org.dromara.oa.erp.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.seata.spring.annotation.GlobalTransactional;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.enums.OAStatusEnum;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.oa.erp.domain.ErpProjectPurchase;
import org.dromara.oa.erp.domain.bo.ErpProjectPurchaseBo;
import org.dromara.oa.erp.domain.vo.ErpProjectPurchaseVo;
import org.dromara.oa.erp.mapper.ErpProjectPurchaseMapper;
import org.dromara.oa.erp.service.IErpProjectPurchaseService;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteFlowInstanceBizExt;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.event.ProcessEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Service
*
* @author Yinq
* @date 2025-11-13
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class ErpProjectPurchaseServiceImpl implements IErpProjectPurchaseService {
private final ErpProjectPurchaseMapper baseMapper;
@DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService;
/**
*
*
* @param projectPurchaseId
* @return
*/
@Override
public ErpProjectPurchaseVo queryById(Long projectPurchaseId) {
return baseMapper.selectVoById(projectPurchaseId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<ErpProjectPurchaseVo> queryPageList(ErpProjectPurchaseBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpProjectPurchase> lqw = buildQueryWrapper(bo);
Page<ErpProjectPurchaseVo> result = baseMapper.selectCustomErpProjectPurchaseVoList(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpProjectPurchaseVo> queryList(ErpProjectPurchaseBo bo) {
MPJLambdaWrapper<ErpProjectPurchase> lqw = buildQueryWrapper(bo);
return baseMapper.selectCustomErpProjectPurchaseVoList(lqw);
}
private MPJLambdaWrapper<ErpProjectPurchase> buildQueryWrapper(ErpProjectPurchaseBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpProjectPurchase> lqw = JoinWrappers.lambda(ErpProjectPurchase.class)
.selectAll(ErpProjectPurchase.class)
.eq(ErpProjectPurchase::getDelFlag, "0")
.eq(bo.getProjectId() != null, ErpProjectPurchase::getProjectId, bo.getProjectId())
.eq(StringUtils.isNotBlank(bo.getProjectCode()), ErpProjectPurchase::getProjectCode, bo.getProjectCode())
.eq(bo.getManagerId() != null, ErpProjectPurchase::getManagerId, bo.getManagerId())
.eq(bo.getChargeId() != null, ErpProjectPurchase::getChargeId, bo.getChargeId())
.eq(bo.getDeputyId() != null, ErpProjectPurchase::getDeputyId, bo.getDeputyId())
.eq(bo.getReporterId() != null, ErpProjectPurchase::getReporterId, bo.getReporterId())
.eq(StringUtils.isNotBlank(bo.getConsigneeUser()), ErpProjectPurchase::getConsigneeUser, bo.getConsigneeUser())
.eq(StringUtils.isNotBlank(bo.getConsigneeAddress()), ErpProjectPurchase::getConsigneeAddress, bo.getConsigneeAddress())
.eq(StringUtils.isNotBlank(bo.getConsigneeContact()), ErpProjectPurchase::getConsigneeContact, bo.getConsigneeContact())
.eq(StringUtils.isNotBlank(bo.getProjectPurchaseStatus()), ErpProjectPurchase::getProjectPurchaseStatus, bo.getProjectPurchaseStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpProjectPurchase::getFlowStatus, bo.getFlowStatus())
.eq(bo.getSortOrder() != null, ErpProjectPurchase::getSortOrder, bo.getSortOrder())
.eq(bo.getRelationId() != null, ErpProjectPurchase::getRelationId, bo.getRelationId())
.eq(StringUtils.isNotBlank(bo.getSpareFlag()), ErpProjectPurchase::getSpareFlag, bo.getSpareFlag())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpProjectPurchase::getActiveFlag, bo.getActiveFlag());
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(ErpProjectPurchaseBo bo) {
ErpProjectPurchase add = MapstructUtils.convert(bo, ErpProjectPurchase.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setProjectPurchaseId(add.getProjectPurchaseId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public ErpProjectPurchaseVo projectPurchaseSubmitAndFlowStart(ErpProjectPurchaseBo bo) {
ErpProjectPurchase entity = MapstructUtils.convert(bo, ErpProjectPurchase.class);
validEntityBeforeSave(entity);
if (bo.getProjectPurchaseId() == null) {
this.insertByBo(bo);
} else {
this.updateByBo(bo);
}
if (bo.getVariables() == null) {
bo.setVariables(new HashMap<>());
}
bo.getVariables().put("ignore", true);
if (StringUtils.isBlank(bo.getFlowCode())) {
throw new ServiceException("流程编码不能为空");
}
RemoteFlowInstanceBizExt bizExt = bo.getBizExt();
if (bizExt == null) {
bizExt = new RemoteFlowInstanceBizExt();
bo.setBizExt(bizExt);
}
RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(String.valueOf(bo.getProjectPurchaseId()));
startProcess.setFlowCode(bo.getFlowCode());
startProcess.setVariables(bo.getVariables());
bizExt.setBusinessId(startProcess.getBusinessId());
startProcess.setBizExt(bizExt);
boolean started = remoteWorkflowService.startCompleteTask(startProcess);
if (!started) {
throw new ServiceException("流程发起异常");
}
// 更新状态为审批中
ErpProjectPurchase updateStatus = new ErpProjectPurchase();
updateStatus.setProjectPurchaseId(bo.getProjectPurchaseId());
updateStatus.setFlowStatus(BusinessStatusEnum.WAITING.getStatus());
updateStatus.setProjectPurchaseStatus("2");
baseMapper.updateById(updateStatus);
return queryById(bo.getProjectPurchaseId());
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(ErpProjectPurchaseBo bo) {
ErpProjectPurchase update = MapstructUtils.convert(bo, ErpProjectPurchase.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(ErpProjectPurchase entity) {
//TODO 做一些数据校验,如唯一约束
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
*
*
* @param processEvent
*/
@EventListener(condition = "#processEvent.flowCode =='xmcg'")
public void processHandler(ProcessEvent processEvent) {
TenantHelper.dynamic(processEvent.getTenantId(), () -> {
Long businessId = Convert.toLong(processEvent.getBusinessId());
ErpProjectPurchase purchase = baseMapper.selectById(businessId);
purchase.setFlowStatus(processEvent.getStatus());
if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.WAITING.getStatus())) {
purchase.setProjectPurchaseStatus(OAStatusEnum.APPROVING.getStatus());
} else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.FINISH.getStatus())) {
purchase.setProjectPurchaseStatus(OAStatusEnum.COMPLETED.getStatus());
} else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.INVALID.getStatus())
|| Objects.equals(processEvent.getStatus(), BusinessStatusEnum.TERMINATION.getStatus())) {
purchase.setProjectPurchaseStatus(OAStatusEnum.INVALID.getStatus());
} else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.BACK.getStatus())
|| Objects.equals(processEvent.getStatus(), BusinessStatusEnum.CANCEL.getStatus())) {
purchase.setProjectPurchaseStatus(OAStatusEnum.DRAFT.getStatus());
}
baseMapper.updateById(purchase);
});
}
}

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpProjectPurchaseMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpProjectPurchaseVo" id="ErpProjectPurchaseResult">
</resultMap>
<select id="selectCustomErpProjectPurchaseVoList" resultMap="ErpProjectPurchaseResult">
select project_purchase_id,
tenant_id,
project_id,
project_code,
manager_id,
charge_id,
deputy_id,
version,
reporter_id,
consignee_user,
consignee_address,
consignee_contact,
project_purchase_status,
flow_status,
sort_order,
relation_id,
remark,
spare_flag,
active_flag,
del_flag,
create_dept,
create_by,
create_time,
update_by,
update_time
from erp_project_purchase t
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpProjectPurchaseMaterialMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpProjectPurchaseMaterialVo" id="ErpProjectPurchaseMaterialResult">
</resultMap>
<select id="selectCustomErpProjectPurchaseMaterialVoList" resultMap="ErpProjectPurchaseMaterialResult">
select purchase_material_id, tenant_id, project_purchase_id, relation_details_id, spare_flag, purchase_plan_flag, material_flag, material_id, relation_material_id, material_code, material_name, specification_description, unit_id, need_purchase_amount, purchase_amount, arrival_time, serial_number, remark, active_flag, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_project_purchase_material t
${ew.getCustomSqlSegment}
</select>
</mapper>
Loading…
Cancel
Save