Merge remote-tracking branch 'origin/dev' into dev

dev
wanghao 1 month ago
commit fa85f7f2bc

@ -50,7 +50,6 @@ public class BaseMaterialInfoBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "单位ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long unitId;
/**

@ -136,4 +136,16 @@ public class ErpProjectChangeController extends BaseController {
return toAjax(erpProjectChangeService.projectChangeSubmitAndFlowStart(bo));
}
/**
*
*
* @param projectPlanId ID
*/
@SaCheckPermission("oa/erp:erpProjectChange:query")
@GetMapping("/queryByProjectPlanId/{projectPlanId}")
public R<List<ErpProjectChangeVo>> queryByProjectPlanId(@NotNull(message = "项目计划ID不能为空")
@PathVariable("projectPlanId") Long projectPlanId) {
return R.ok(erpProjectChangeService.queryByProjectPlanId(projectPlanId));
}
}

@ -127,14 +127,4 @@ public class ErpProjectInfoController extends BaseController {
List<ErpProjectInfoVo> list = erpProjectInfoService.queryList(bo);
return R.ok(list);
}
/**
* id
*/
@SaCheckPermission("oa/erp:projectInfo:listByDept")
@GetMapping("/listByDept")
public TableDataInfo<ErpProjectInfoVo> listByDept(ErpProjectInfoBo bo, PageQuery pageQuery) {
bo.setDeptId(LoginHelper.getDeptId());
return erpProjectInfoService.queryPageList(bo, pageQuery);
}
}

@ -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);
}
}

@ -29,9 +29,9 @@ public class ErpContractMaterial extends TenantEntity {
private Long contractMaterialId;
/**
* 1 2
* 1 2
*/
private String planFlag;
private String materialFlag;
/**
* ID

@ -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;
}

@ -28,9 +28,9 @@ public class ErpContractMaterialBo extends BaseEntity {
private Long contractMaterialId;
/**
* 1 2
* 1 2
*/
private String planFlag;
private String materialFlag;
/**
* ID

@ -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;
}

@ -36,11 +36,11 @@ public class ErpContractMaterialVo implements Serializable {
private Long contractMaterialId;
/**
* 1 2
* 1 2
*/
@ExcelProperty(value = "计划标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "plan_flag")
private String planFlag;
@ExcelProperty(value = "标准物料标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "material_flag")
private String materialFlag;
/**
* ID

@ -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;
}

@ -111,6 +111,34 @@ public class ErpProjectReportVo implements Serializable {
*/
@ExcelProperty(value = "项目编码")
private String projectCode;
/**
*
*/
@ExcelProperty(value = "项目类型名称")
private String typeName;
/**
*
*/
@ExcelProperty(value = "部门名称")
private String deptName;
/**
*
*/
@ExcelProperty(value = "项目经理名称")
private String managerName;
/**
*
*/
@ExcelProperty(value = "部门负责人名称")
private String chargeName;
/**
*
*/
@ExcelProperty(value = "分管副总名称")
private String deputyName;
}

@ -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);
}

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.oa.erp.domain.ErpProjectReport;
import org.dromara.oa.erp.domain.vo.ErpProjectReportVo;
@ -25,6 +27,10 @@ public interface ErpProjectReportMapper extends BaseMapperPlus<ErpProjectReport,
* @param queryWrapper
* @return
*/
@DataPermission({
@DataColumn(key = "deptName", value = "t.dept_id"),
@DataColumn(key = "userName", value = "t.create_by")
})
public Page<ErpProjectReportVo> selectCustomErpProjectReportVoList(@Param("page") Page<ErpProjectReportVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectReport> queryWrapper);
/**
@ -33,6 +39,10 @@ public interface ErpProjectReportMapper extends BaseMapperPlus<ErpProjectReport,
* @param queryWrapper
* @return
*/
@DataPermission({
@DataColumn(key = "deptName", value = "t.dept_id"),
@DataColumn(key = "userName", value = "t.create_by")
})
public List<ErpProjectReportVo> selectCustomErpProjectReportVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpProjectReport> queryWrapper);
}

@ -81,5 +81,13 @@ public interface IErpProjectChangeService {
* @param bo
* @return
*/
ErpProjectChangeVo projectChangeSubmitAndFlowStart(ErpProjectChangeBo bo);
Boolean projectChangeSubmitAndFlowStart(ErpProjectChangeBo bo);
/**
*
*
* @param projectPlanId ID
* @return
*/
List<ErpProjectChangeVo> queryByProjectPlanId(Long projectPlanId);
}

@ -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);
}

@ -73,7 +73,7 @@ public class ErpContractMaterialServiceImpl implements IErpContractMaterialServi
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractMaterial> lqw = JoinWrappers.lambda(ErpContractMaterial.class)
.selectAll(ErpContractMaterial.class)
.eq(StringUtils.isNotBlank(bo.getPlanFlag()), ErpContractMaterial::getPlanFlag, bo.getPlanFlag())
.eq(StringUtils.isNotBlank(bo.getMaterialFlag()), ErpContractMaterial::getMaterialFlag, bo.getMaterialFlag())
.eq(bo.getContractId() != null, ErpContractMaterial::getContractId, bo.getContractId())
.like(StringUtils.isNotBlank(bo.getProductName()), ErpContractMaterial::getProductName, bo.getProductName())
.eq(StringUtils.isNotBlank(bo.getSpecificationDescription()), ErpContractMaterial::getSpecificationDescription, bo.getSpecificationDescription())

@ -189,6 +189,18 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
// 权限校验:只有项目经理才能提交
validateProjectManager(bo.getProjectManagerId());
Long projectId = bo.getProjectId();
ErpProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
if (projectInfo == null) {
throw new ServiceException("项目不存在");
}
// 验证项目状态
/*
if (!OAStatusEnum.COMPLETED.getStatus().equals(projectInfo.getProjectStatus())) {
throw new ServiceException("项目未审批通过");
}
*/
ErpProjectChange add = MapstructUtils.convert(bo, ErpProjectChange.class);
validEntityBeforeSave(add);
@ -558,6 +570,61 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
//TODO 做一些数据校验,如唯一约束
}
/**
*
* ErpProjectChange project_id project_plan_id
* ID
*
* @param projectPlanId ID
* @return
*/
@Override
public List<ErpProjectChangeVo> queryByProjectPlanId(Long projectPlanId) {
if (projectPlanId == null) {
return new ArrayList<>();
}
// 第一步通过项目计划ID查询项目计划信息获取项目ID
ErpProjectPlan projectPlan = projectPlanMapper.selectById(projectPlanId);
if (projectPlan == null || projectPlan.getProjectId() == null) {
return new ArrayList<>();
}
Long projectId = projectPlan.getProjectId();
// 第二步通过项目ID查询该项目的所有变更记录
LambdaQueryWrapper<ErpProjectChange> lqw = Wrappers.lambdaQuery(ErpProjectChange.class)
.eq(ErpProjectChange::getProjectId, projectId)
.eq(ErpProjectChange::getDelFlag, "0")
.orderByDesc(ErpProjectChange::getCreateTime);
List<ErpProjectChange> list = baseMapper.selectList(lqw);
// 第三步转换为VO并关联子表数据
List<ErpProjectChangeVo> voList = new ArrayList<>();
for (ErpProjectChange entity : list) {
ErpProjectChangeVo vo = MapstructUtils.convert(entity, ErpProjectChangeVo.class);
// 关联子表数据
vo.setBudgetList(changeBudgetMapper.selectList(
Wrappers.lambdaQuery(ErpProjectChangeBudget.class)
.eq(ErpProjectChangeBudget::getProjectChangeId, entity.getProjectChangeId())
.eq(ErpProjectChangeBudget::getDelFlag, "0")
));
vo.setProgressList(changeProgressMapper.selectList(
Wrappers.lambdaQuery(ErpProjectChangeProgress.class)
.eq(ErpProjectChangeProgress::getProjectChangeId, entity.getProjectChangeId())
.eq(ErpProjectChangeProgress::getDelFlag, "0")
.orderByAsc(ErpProjectChangeProgress::getSortOrder)
));
voList.add(vo);
}
return voList;
}
/**
*
*

@ -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);
});
}
}

@ -52,7 +52,7 @@ public class ErpProjectReportServiceImpl implements IErpProjectReportService {
@Override
public TableDataInfo<ErpProjectReportVo> queryPageList(ErpProjectReportBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpProjectReport> lqw = buildQueryWrapper(bo);
Page<ErpProjectReportVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
Page<ErpProjectReportVo> result = baseMapper.selectCustomErpProjectReportVoList(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}

@ -9,7 +9,7 @@
<select id="selectCustomErpContractMaterialVoList" resultMap="ErpContractMaterialResult">
select t.contract_material_id,
t.tenant_id,
t.plan_flag,
t.material_flag,
t.contract_id,
t.product_name,
t.specification_description,

@ -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>

@ -7,7 +7,36 @@
</resultMap>
<select id="selectCustomErpProjectReportVoList" resultMap="ErpProjectReportResult">
select report_id, tenant_id, project_id, project_name, milestone_plan, manager_id, dept_id, charge_id, deputy_id, information_note, sort_order, oss_id, remark, active_flag, del_flag, create_dept, create_by, create_time, update_by, update_time, project_code from erp_project_report t
select t.report_id,
t.tenant_id,
t.project_id,
t.project_name,
t.milestone_plan,
t.manager_id,
t.dept_id,
t.charge_id,
t.deputy_id,
t.information_note,
t.sort_order,
t.oss_id,
t.remark,
t.active_flag,
t.del_flag,
t.create_dept,
t.create_by,
t.create_time,
t.update_by,
t.update_time,
t.project_code,
d.dept_name deptName,
u1.nick_name managerName,
u2.nick_name chargeName,
u3.nick_name deputyName
from erp_project_report t
left join sys_dept d on d.dept_id = t.dept_id
left join sys_user u1 on u1.user_id = t.manager_id
left join sys_user u2 on u2.user_id = t.charge_id
left join sys_user u3 on u3.user_id = t.deputy_id
${ew.getCustomSqlSegment}
</select>

Loading…
Cancel
Save