diff --git a/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsProjectsController.java b/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsProjectsController.java new file mode 100644 index 0000000..dc39ad7 --- /dev/null +++ b/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsProjectsController.java @@ -0,0 +1,147 @@ +package net.ferrum.web.controller.business; + +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import net.ferrum.business.domain.QsBatch; +import net.ferrum.business.domain.QsProjects; +import net.ferrum.business.domain.QsSpecAttributeTypes; +import net.ferrum.business.domain.QsSpecAttributeValues; +import net.ferrum.business.domain.bo.QsProjectAttributesBo; +import net.ferrum.business.domain.bo.QsSpecAttributeValuesBo; +import net.ferrum.business.domain.bo.QsUserSupplierBo; +import net.ferrum.business.domain.vo.QsProjectAttributesVo; +import net.ferrum.business.service.IQsBatchService; +import net.ferrum.business.service.IQsProjectAttributesService; +import net.ferrum.business.service.IQsSpecAttributeValuesService; +import net.ferrum.common.utils.BeanCopyUtils; +import org.apache.ibatis.executor.BaseExecutor; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import net.ferrum.common.annotation.RepeatSubmit; +import net.ferrum.common.annotation.Log; +import net.ferrum.common.core.controller.BaseController; +import net.ferrum.common.core.domain.PageQuery; +import net.ferrum.common.core.domain.R; +import net.ferrum.common.core.validate.AddGroup; +import net.ferrum.common.core.validate.EditGroup; +import net.ferrum.common.core.validate.QueryGroup; +import net.ferrum.common.enums.BusinessType; +import net.ferrum.common.utils.poi.ExcelUtil; +import net.ferrum.business.domain.vo.QsProjectsVo; +import net.ferrum.business.domain.bo.QsProjectsBo; +import net.ferrum.business.service.IQsProjectsService; +import net.ferrum.common.core.page.TableDataInfo; + +/** + * 项目管理 + * + * @author ruoyi + * @date 2025-07-19 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/business/projects") +public class QsProjectsController extends BaseController { + + private final IQsProjectsService iQsProjectsService; + private final IQsBatchService iQsBatchService; + private final IQsSpecAttributeValuesService iQsSpecAttributeValuesService; + private final IQsProjectAttributesService iQsProjectAttributesService; + + /** + * 查询项目管理列表 + */ + @SaCheckPermission("business:projects:list") + @GetMapping("/list") + public TableDataInfo list(QsProjects bo, PageQuery pageQuery) { + return iQsProjectsService.queryPageList(bo, pageQuery); + } + + /** + * 导出项目管理列表 + */ + @SaCheckPermission("business:projects:export") + @Log(title = "项目管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(QsProjectsBo bo, HttpServletResponse response) { + List list = iQsProjectsService.queryList(bo); + ExcelUtil.exportExcel(list, "项目管理", QsProjectsVo.class, response); + } + + /** + * 获取项目管理详细信息 + * + * @param projectId 主键 + */ + @SaCheckPermission("business:projects:query") + @GetMapping("/{projectId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long projectId) { + //return R.ok(iQsProjectsService.queryById(projectId)); + return R.ok(iQsProjectsService.selectById(projectId)); + } + + /** + * 新增项目管理 + */ + @SaCheckPermission("business:projects:add") + @Log(title = "项目管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + + public R add(@Validated(AddGroup.class) @RequestBody QsProjectsBo bo) { + return toAjax(iQsProjectsService.insertByBo(bo)); + } + + /** + * 修改项目管理 + */ + @SaCheckPermission("business:projects:edit") + @Log(title = "项目管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody QsProjectsBo bo) { + return toAjax(iQsProjectsService.updateByBo(bo)); + + } + + /** + * 删除项目管理 + * + * @param projectIds 主键串 + */ + @SaCheckPermission("business:projects:remove") + @Log(title = "项目管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{projectIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] projectIds) { + + String sRet = iQsProjectsService.deleteWithValidByIds(Arrays.asList(projectIds), true); + if (sRet.length()==0){ + return R.ok(); + }else{ + return R.fail(sRet); + } + + } + + /** + * 获取批次列表 + */ + @SaCheckPermission("business:projects:list") + @GetMapping("/batchList") + public R< List> selectBatchList(QsBatch type) { + return R.ok(iQsBatchService.selectBatchList(type)); + } +} diff --git a/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeTypesController.java b/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeTypesController.java index 46e85b4..3845f28 100644 --- a/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeTypesController.java +++ b/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeTypesController.java @@ -1,4 +1,4 @@ -package net.ferrum.business.controller; +package net.ferrum.web.controller.business; import java.util.List; import java.util.Arrays; diff --git a/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeValuesController.java b/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeValuesController.java index 22fb79b..2c65f61 100644 --- a/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeValuesController.java +++ b/quotation-admin/src/main/java/net/ferrum/web/controller/business/QsSpecAttributeValuesController.java @@ -1,4 +1,4 @@ -package net.ferrum.business.controller; +package net.ferrum.web.controller.business; import java.util.List; import java.util.Arrays; @@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import net.ferrum.business.domain.QsBatch; import net.ferrum.business.domain.QsSpecAttributeTypes; import net.ferrum.business.domain.QsSpecAttributeValues; import net.ferrum.business.service.IQsSpecAttributeTypesService; @@ -121,4 +122,26 @@ public class QsSpecAttributeValuesController extends BaseController { public R< List> selectSpecAttributeTypesList(QsSpecAttributeTypes type) { return R.ok(iQsSpecAttributeTypesService.selectSpecAttributeTypesList(type)); } + + /** + * 根据规格参数类型,获取这类参数下面的所有规格参数 + */ + @SaCheckPermission("business:specAttributeValues:list") + @GetMapping("/specAttributeValueListByTypeId") + public R< List> selectSpecAttributeValuesByTypesId(Long typeId) { + return R.ok(iQsSpecAttributeValuesService.selectSpecAttributeValuesByTypesId(typeId)); + } + + /** + * 得到所有据规格参数类型,每个参数类型包含本类中的所有规格参数 + */ + @SaCheckPermission("business:specAttributeValues:list") + @GetMapping("/specAttributeTypesWithValues") + public R< List> selectSpecAttributeTypesWithValues(){ + List typeList = iQsSpecAttributeTypesService.selectSpecAttributeTypesList(null); + for(QsSpecAttributeTypes type : typeList){ + type.setSpecValues(iQsSpecAttributeValuesService.selectSpecAttributeValuesByTypesId(type.getTypeId())); + } + return R.ok(typeList); + } } diff --git a/quotation-admin/src/test/java/net/ferrum/test/ServiceTest.java b/quotation-admin/src/test/java/net/ferrum/test/ServiceTest.java new file mode 100644 index 0000000..7434efb --- /dev/null +++ b/quotation-admin/src/test/java/net/ferrum/test/ServiceTest.java @@ -0,0 +1,33 @@ +package net.ferrum.test; + +import groovy.util.logging.Slf4j; +import net.ferrum.common.core.domain.PageQuery; +import net.ferrum.common.core.page.TableDataInfo; +import net.ferrum.flowable.core.domain.ProcessQuery; +import net.ferrum.workflow.domain.vo.WfTaskVo; +import net.ferrum.workflow.service.IWfProcessService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@Slf4j +@SpringBootTest +public class ServiceTest { + + + @Autowired + private IWfProcessService wfProcessService; + + @Test + void test1() { + ProcessQuery query = new ProcessQuery(); + //query.setSpecBatch("333"); + + PageQuery pageQuery = new PageQuery(); + pageQuery.setPageNum(1); + pageQuery.setPageSize(50); + TableDataInfo wfTaskVoTableDataInfo = wfProcessService.selectPageAllProcessList1(query, pageQuery); + System.out.println(wfTaskVoTableDataInfo); + } + +} diff --git a/quotation-common/src/main/java/net/ferrum/common/constant/UserConstants.java b/quotation-common/src/main/java/net/ferrum/common/constant/UserConstants.java index 9c721bd..c92b205 100644 --- a/quotation-common/src/main/java/net/ferrum/common/constant/UserConstants.java +++ b/quotation-common/src/main/java/net/ferrum/common/constant/UserConstants.java @@ -129,4 +129,10 @@ public interface UserConstants { */ Long ADMIN_ID = 1L; + + /** + * 项目起始阶段ID + */ + Long PROJECT_START_ID = 1L; + } diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/QsProjectAttributes.java b/quotation-system/src/main/java/net/ferrum/business/domain/QsProjectAttributes.java new file mode 100644 index 0000000..6ff9209 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/domain/QsProjectAttributes.java @@ -0,0 +1,51 @@ +package net.ferrum.business.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import net.ferrum.common.core.domain.BaseEntity; + +/** + * 项目规格对象 qs_project_attributes + * + * @author ruoyi + * @date 2025-07-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("qs_project_attributes") +public class QsProjectAttributes extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 项目属性关联Id + */ + private Long id; + /** + * + */ + private Long projectId; + /** + * + */ + private Long typeId; + /** + * + */ + private Long valueId; + /** + * 备注 + */ + private String remark; + /** + * 逻辑删除标志 + */ + @TableLogic + private String delFlag; + +} diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/QsProjects.java b/quotation-system/src/main/java/net/ferrum/business/domain/QsProjects.java new file mode 100644 index 0000000..c04e4c1 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/domain/QsProjects.java @@ -0,0 +1,109 @@ +package net.ferrum.business.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import net.ferrum.common.core.domain.BaseEntity; +import net.ferrum.common.core.domain.entity.SysDept; + +/** + * 项目管理对象 qs_projects + * + * @author ruoyi + * @date 2025-07-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("qs_projects") +public class QsProjects extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 项目ID + */ + @TableId(value = "project_id") + private Long projectId; + /** + * + */ + private Long batchId; + /** + * 项目名称 + */ + private String projectName; + /** + * 备注 + */ + private String remark; + /** + * 逻辑删除标志 + */ + @TableLogic + private String delFlag; + /** + * 项目当前所处阶段 + */ + private Long currentMasterStageId; + /** + * 项目完成情况 + */ + private String projectCompletion; + /** + * 项目开始时间 + */ + private Date startDate; + /** + * 结束时间 + */ + private Date endTime; + + /** + * 批次对象 + */ + @TableField(exist = false) + private QsBatch batch; + + /** + * 批次名称 + */ + @TableField(exist = false) + private String batchName; + + /** + * 规格参数 + */ + @TableField(exist = false) + private String specInfo; + + /** + * 阶段名称,内部使用 + */ + @TableField(exist = false) + private String stageName; + + /** + * 阶段显示名称,用户看到的 + */ + @TableField(exist = false) + private String stageDisplayName; + + /** + * 是否为并行阶段 + */ + @TableField(exist = false) + private String isParallelContainer; + + /** + * 并行阶段完成情况 + */ + @TableField(exist = false) + private String parallelProgress; + +} diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/QsSpecAttributeTypes.java b/quotation-system/src/main/java/net/ferrum/business/domain/QsSpecAttributeTypes.java index eadc24c..18ea116 100644 --- a/quotation-system/src/main/java/net/ferrum/business/domain/QsSpecAttributeTypes.java +++ b/quotation-system/src/main/java/net/ferrum/business/domain/QsSpecAttributeTypes.java @@ -6,8 +6,10 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.util.Date; import java.math.BigDecimal; +import java.util.List; import net.ferrum.common.core.domain.BaseEntity; +import net.ferrum.common.core.domain.entity.SysRole; /** * 规格类型对象 qs_spec_attribute_types @@ -41,4 +43,10 @@ public class QsSpecAttributeTypes extends BaseEntity { @TableLogic private String delFlag; + /** + * 角色对象 + */ + @TableField(exist = false) + private List specValues; + } diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsProjectAttributesBo.java b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsProjectAttributesBo.java new file mode 100644 index 0000000..056c1a9 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsProjectAttributesBo.java @@ -0,0 +1,68 @@ +package net.ferrum.business.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableField; +import net.ferrum.common.core.validate.AddGroup; +import net.ferrum.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import net.ferrum.common.core.domain.BaseEntity; + +/** + * 项目规格业务对象 qs_project_attributes + * + * @author ruoyi + * @date 2025-07-24 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class QsProjectAttributesBo extends BaseEntity { + + /** + * 项目属性关联Id + */ + @NotNull(message = "项目属性关联Id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long id; + + /** + * + */ + @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectId; + + /** + * + */ + @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long typeId; + + /** + * + */ + @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long valueId; + + /** + * 备注 + */ + private String remark; + + + + /** + * 规格参数具体值 + */ + @TableField(exist = false) + private String value; + + /** + * 规格参数类型的名称 + */ + @TableField(exist = false) + private String typeName; + +} diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsProjectsBo.java b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsProjectsBo.java new file mode 100644 index 0000000..d7f69b7 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsProjectsBo.java @@ -0,0 +1,86 @@ +package net.ferrum.business.domain.bo; + +import com.baomidou.mybatisplus.annotation.TableField; +import net.ferrum.common.core.validate.AddGroup; +import net.ferrum.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import net.ferrum.common.core.domain.BaseEntity; + +/** + * 项目管理业务对象 qs_projects + * + * @author ruoyi + * @date 2025-07-19 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class QsProjectsBo extends BaseEntity { + + /** + * 项目ID + */ + @NotNull(message = "项目ID不能为空", groups = { EditGroup.class }) + private Long projectId; + + /** + * + */ + @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long batchId; + + /** + * 项目名称 + */ + @NotBlank(message = "项目名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectName; + + /** + * 备注 + */ + private String remark; + + /** + * 项目当前所处阶段 + */ + private Long currentMasterStageId; + + /** + * 项目完成情况 + */ + private String projectCompletion; + + /** + * 项目开始时间 + */ + @NotNull(message = "项目开始时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date startDate; + + /** + * 结束时间 + */ + private Date endTime; + + /** + * 批次名称 + */ + @TableField(exist = false) + private String batchName; + + /** + * 规格参数列表 + */ + @TableField(exist = false) + private List specInfoList; + + +} diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeTypesBo.java b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeTypesBo.java index 96ee28c..09dcdac 100644 --- a/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeTypesBo.java +++ b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeTypesBo.java @@ -1,5 +1,6 @@ package net.ferrum.business.domain.bo; +import com.baomidou.mybatisplus.annotation.TableLogic; import net.ferrum.common.core.validate.AddGroup; import net.ferrum.common.core.validate.EditGroup; import lombok.Data; @@ -7,6 +8,7 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.*; import java.util.Date; +import java.util.List; import net.ferrum.common.core.domain.BaseEntity; diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeValuesBo.java b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeValuesBo.java index 241aa95..a5402d9 100644 --- a/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeValuesBo.java +++ b/quotation-system/src/main/java/net/ferrum/business/domain/bo/QsSpecAttributeValuesBo.java @@ -1,5 +1,6 @@ package net.ferrum.business.domain.bo; +import com.baomidou.mybatisplus.annotation.TableField; import net.ferrum.common.core.validate.AddGroup; import net.ferrum.common.core.validate.EditGroup; import lombok.Data; @@ -7,6 +8,7 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.*; import java.util.Date; +import java.util.List; import net.ferrum.common.core.domain.BaseEntity; @@ -45,4 +47,11 @@ public class QsSpecAttributeValuesBo extends BaseEntity { private String remark; + /** + * 批次名称 + */ + @TableField(exist = false) + private String batchName; + + } diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/vo/QsProjectAttributesVo.java b/quotation-system/src/main/java/net/ferrum/business/domain/vo/QsProjectAttributesVo.java new file mode 100644 index 0000000..5996e93 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/domain/vo/QsProjectAttributesVo.java @@ -0,0 +1,61 @@ +package net.ferrum.business.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import net.ferrum.common.annotation.ExcelDictFormat; +import net.ferrum.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 项目规格视图对象 qs_project_attributes + * + * @author ruoyi + * @date 2025-07-24 + */ +@Data +@ExcelIgnoreUnannotated +public class QsProjectAttributesVo { + + private static final long serialVersionUID = 1L; + + /** + * 项目属性关联Id + */ + @ExcelProperty(value = "项目属性关联Id") + private Long id; + + /** + * + */ + @ExcelProperty(value = "") + private Long projectId; + + /** + * + */ + @ExcelProperty(value = "") + private Long typeId; + + /** + * + */ + @ExcelProperty(value = "") + private Long valueId; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 规格设定值 + */ + @TableField(exist = false) + private String value; + +} diff --git a/quotation-system/src/main/java/net/ferrum/business/domain/vo/QsProjectsVo.java b/quotation-system/src/main/java/net/ferrum/business/domain/vo/QsProjectsVo.java new file mode 100644 index 0000000..bc462ed --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/domain/vo/QsProjectsVo.java @@ -0,0 +1,75 @@ +package net.ferrum.business.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import net.ferrum.common.annotation.ExcelDictFormat; +import net.ferrum.common.convert.ExcelDictConvert; +import lombok.Data; +import java.util.Date; + + + +/** + * 项目管理视图对象 qs_projects + * + * @author ruoyi + * @date 2025-07-19 + */ +@Data +@ExcelIgnoreUnannotated +public class QsProjectsVo { + + private static final long serialVersionUID = 1L; + + /** + * 项目ID + */ + @ExcelProperty(value = "项目ID") + private Long projectId; + + /** + * + */ + @ExcelProperty(value = "") + private Long batchId; + + /** + * 项目名称 + */ + @ExcelProperty(value = "项目名称") + private String projectName; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 项目当前所处阶段 + */ + @ExcelProperty(value = "项目当前所处阶段") + private Long currentMasterStageId; + + /** + * 项目完成情况 + */ + @ExcelProperty(value = "项目完成情况") + private String projectCompletion; + + /** + * 项目开始时间 + */ + @ExcelProperty(value = "项目开始时间") + private Date startDate; + + /** + * 结束时间 + */ + @ExcelProperty(value = "结束时间") + private Date endTime; + + +} diff --git a/quotation-system/src/main/java/net/ferrum/business/mapper/QsBatchMapper.java b/quotation-system/src/main/java/net/ferrum/business/mapper/QsBatchMapper.java index 570e325..a722097 100644 --- a/quotation-system/src/main/java/net/ferrum/business/mapper/QsBatchMapper.java +++ b/quotation-system/src/main/java/net/ferrum/business/mapper/QsBatchMapper.java @@ -1,9 +1,13 @@ package net.ferrum.business.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import net.ferrum.business.domain.QsBatch; import net.ferrum.business.domain.vo.QsBatchVo; import net.ferrum.common.core.mapper.BaseMapperPlus; - +import org.apache.ibatis.annotations.Param; +import java.util.List; /** * 批次管理Mapper接口 * @@ -11,5 +15,5 @@ import net.ferrum.common.core.mapper.BaseMapperPlus; * @date 2025-07-18 */ public interface QsBatchMapper extends BaseMapperPlus { - + public List selectBatchList( @Param(Constants.WRAPPER) Wrapper queryWrapper); } diff --git a/quotation-system/src/main/java/net/ferrum/business/mapper/QsProjectAttributesMapper.java b/quotation-system/src/main/java/net/ferrum/business/mapper/QsProjectAttributesMapper.java new file mode 100644 index 0000000..3b55e21 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/mapper/QsProjectAttributesMapper.java @@ -0,0 +1,22 @@ +package net.ferrum.business.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import net.ferrum.business.domain.QsProjectAttributes; +import net.ferrum.business.domain.vo.QsProjectAttributesVo; +import net.ferrum.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 项目规格Mapper接口 + * + * @author ruoyi + * @date 2025-07-24 + */ +public interface QsProjectAttributesMapper extends BaseMapperPlus { + public List selectProjSpecInfoList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + public int deleteByProjectId(Long userId); +} diff --git a/quotation-system/src/main/java/net/ferrum/business/mapper/QsProjectsMapper.java b/quotation-system/src/main/java/net/ferrum/business/mapper/QsProjectsMapper.java new file mode 100644 index 0000000..a781e8d --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/mapper/QsProjectsMapper.java @@ -0,0 +1,24 @@ +package net.ferrum.business.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import net.ferrum.business.domain.QsBatch; +import net.ferrum.business.domain.QsProjects; +import net.ferrum.business.domain.QsSpecAttributeValues; +import net.ferrum.business.domain.bo.QsProjectsBo; +import net.ferrum.business.domain.vo.QsProjectsVo; +import net.ferrum.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 项目管理Mapper接口 + * + * @author ruoyi + * @date 2025-07-19 + */ +public interface QsProjectsMapper extends BaseMapperPlus { + Page selectPageQsProjectsList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/quotation-system/src/main/java/net/ferrum/business/mapper/QsSpecAttributeValuesMapper.java b/quotation-system/src/main/java/net/ferrum/business/mapper/QsSpecAttributeValuesMapper.java index 0478c05..a73153a 100644 --- a/quotation-system/src/main/java/net/ferrum/business/mapper/QsSpecAttributeValuesMapper.java +++ b/quotation-system/src/main/java/net/ferrum/business/mapper/QsSpecAttributeValuesMapper.java @@ -10,6 +10,8 @@ import net.ferrum.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 规格参数值Mapper接口 * @@ -20,4 +22,6 @@ import org.apache.ibatis.annotations.Param; public interface QsSpecAttributeValuesMapper extends BaseMapperPlus { Page selectPageSpecAttributeValuesList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + List selectSpecAttributeValuesByTypesId(@Param("typeId")Long typeId); } diff --git a/quotation-system/src/main/java/net/ferrum/business/service/IQsBatchService.java b/quotation-system/src/main/java/net/ferrum/business/service/IQsBatchService.java index 0402693..5ba607b 100644 --- a/quotation-system/src/main/java/net/ferrum/business/service/IQsBatchService.java +++ b/quotation-system/src/main/java/net/ferrum/business/service/IQsBatchService.java @@ -1,5 +1,6 @@ package net.ferrum.business.service; +import net.ferrum.business.domain.QsBatch; import net.ferrum.business.domain.vo.QsBatchVo; import net.ferrum.business.domain.bo.QsBatchBo; import net.ferrum.common.core.page.TableDataInfo; @@ -45,4 +46,10 @@ public interface IQsBatchService { * 校验并批量删除批次管理信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取规批次列表 + * + */ + List selectBatchList(QsBatch entity); } diff --git a/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectAttributesService.java b/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectAttributesService.java new file mode 100644 index 0000000..d57d238 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectAttributesService.java @@ -0,0 +1,54 @@ +package net.ferrum.business.service; + +import net.ferrum.business.domain.QsProjectAttributes; +import net.ferrum.business.domain.vo.QsProjectAttributesVo; +import net.ferrum.business.domain.bo.QsProjectAttributesBo; +import net.ferrum.common.core.page.TableDataInfo; +import net.ferrum.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 项目规格Service接口 + * + * @author ruoyi + * @date 2025-07-24 + */ +public interface IQsProjectAttributesService { + + /** + * 查询项目规格 + */ + QsProjectAttributesVo queryById(Long id); + + /** + * 查询项目规格列表 + */ + TableDataInfo queryPageList(QsProjectAttributesBo bo, PageQuery pageQuery); + + /** + * 查询项目规格列表 + */ + List queryList(QsProjectAttributesBo bo); + + /** + * 新增项目规格 + */ + Boolean insertByBo(QsProjectAttributesBo bo); + + /** + * 修改项目规格 + */ + Boolean updateByBo(QsProjectAttributesBo bo); + + /** + * 校验并批量删除项目规格信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据项目ID批量删除项目规格 + */ + public boolean deleteByProjectId(Long projectId); +} diff --git a/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectService.java b/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectService.java deleted file mode 100644 index 22813f6..0000000 --- a/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectService.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.ferrum.business.service; - -import net.ferrum.business.domain.bo.QsProjectBo; -import net.ferrum.business.domain.vo.QsProjectVo; -import net.ferrum.common.core.domain.PageQuery; -import net.ferrum.common.core.page.TableDataInfo; - -import java.util.Collection; -import java.util.List; - -/** - * 模板信息Service接口 - * - * @author 26554 - * @date 2025-04-21 - */ -public interface IQsProjectService { - - /** - * 查询模板信息 - */ - QsProjectVo queryById(Long id); - - /** - * 查询模板信息列表 - */ - TableDataInfo queryPageList(QsProjectBo bo, PageQuery pageQuery); - - /** - * 查询模板信息列表 - */ - List queryList(QsProjectBo bo); - - /** - * 新增模板信息 - */ - Boolean insertByBo(QsProjectBo bo); - - /** - * 修改模板信息 - */ - Boolean updateByBo(QsProjectBo bo); - - /** - * 校验并批量删除模板信息信息 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); -} diff --git a/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectsService.java b/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectsService.java new file mode 100644 index 0000000..355c33d --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/service/IQsProjectsService.java @@ -0,0 +1,62 @@ +package net.ferrum.business.service; + +import net.ferrum.business.domain.QsProjects; +import net.ferrum.business.domain.vo.QsProjectsVo; +import net.ferrum.business.domain.bo.QsProjectsBo; +import net.ferrum.common.core.page.TableDataInfo; +import net.ferrum.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 项目管理Service接口 + * + * @author ruoyi + * @date 2025-07-19 + */ +public interface IQsProjectsService { + + /** + * 查询项目管理 + */ + QsProjectsVo queryById(Long projectId); + + /** + * 查询项目 + */ + QsProjects selectById(Long projectId); + + /** + * 查询项目管理列表 + */ + TableDataInfo queryPageList(QsProjects entity, PageQuery pageQuery); + + /** + * 查询项目管理列表 + */ + List queryList(QsProjectsBo bo); + + /** + * 新增项目管理 + */ + Boolean insertByBo(QsProjectsBo bo); + + /** + * 修改项目管理 + */ + Boolean updateByBo(QsProjectsBo bo); + + /** + * 校验并批量删除项目管理信息 + */ + String deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 校验项目是否已经开工 + * + * @param projectId 项目ID + * @return 结果 + */ + public boolean checkProjectInProcessing(Long projectId); +} diff --git a/quotation-system/src/main/java/net/ferrum/business/service/IQsSpecAttributeValuesService.java b/quotation-system/src/main/java/net/ferrum/business/service/IQsSpecAttributeValuesService.java index f19b3ee..b240762 100644 --- a/quotation-system/src/main/java/net/ferrum/business/service/IQsSpecAttributeValuesService.java +++ b/quotation-system/src/main/java/net/ferrum/business/service/IQsSpecAttributeValuesService.java @@ -49,4 +49,10 @@ public interface IQsSpecAttributeValuesService { * 校验并批量删除规格参数值信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据规格类型id得到本类中的所有规格参数 + */ + public List selectSpecAttributeValuesByTypesId(Long typeId); + } diff --git a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsBatchServiceImpl.java b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsBatchServiceImpl.java index cb9a7e7..19994d0 100644 --- a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsBatchServiceImpl.java +++ b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsBatchServiceImpl.java @@ -1,6 +1,8 @@ package net.ferrum.business.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import net.ferrum.business.domain.QsSpecAttributeTypes; import net.ferrum.common.utils.StringUtils; import net.ferrum.common.core.page.TableDataInfo; import net.ferrum.common.core.domain.PageQuery; @@ -113,4 +115,19 @@ public class QsBatchServiceImpl implements IQsBatchService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 查询批次 + * + * @param entity 要查询的规格参数类型批次参数 + * @return 批次信息集合 + */ + @Override + public List selectBatchList(QsBatch entity) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(QsBatch::getDelFlag, "0") + .eq(ObjectUtil.isNotNull(entity.getBatchId()), QsBatch::getBatchId, entity.getBatchId()) + .like(StringUtils.isNotBlank(entity.getBatchName()), QsBatch::getBatchName, entity.getBatchName()); + return baseMapper.selectBatchList(lqw); + } } diff --git a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsProjectAttributesServiceImpl.java b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsProjectAttributesServiceImpl.java new file mode 100644 index 0000000..34cd18b --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsProjectAttributesServiceImpl.java @@ -0,0 +1,138 @@ +package net.ferrum.business.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import net.ferrum.business.domain.QsSpecAttributeTypes; +import net.ferrum.business.domain.QsSpecAttributeValues; +import net.ferrum.business.domain.bo.QsSpecAttributeValuesBo; +import net.ferrum.common.constant.UserConstants; +import net.ferrum.common.utils.StringUtils; +import net.ferrum.common.core.page.TableDataInfo; +import net.ferrum.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import net.ferrum.business.domain.bo.QsProjectAttributesBo; +import net.ferrum.business.domain.vo.QsProjectAttributesVo; +import net.ferrum.business.domain.QsProjectAttributes; +import net.ferrum.business.mapper.QsProjectAttributesMapper; +import net.ferrum.business.service.IQsProjectAttributesService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 项目规格Service业务层处理 + * + * @author ruoyi + * @date 2025-07-24 + */ +@RequiredArgsConstructor +@Service +public class QsProjectAttributesServiceImpl implements IQsProjectAttributesService { + + private final QsProjectAttributesMapper baseMapper; + + /** + * 查询项目规格 + */ + @Override + public QsProjectAttributesVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询项目规格列表 + */ + @Override + public TableDataInfo queryPageList(QsProjectAttributesBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapperPage(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + private LambdaQueryWrapper buildQueryWrapperPage(QsProjectAttributesBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(QsProjectAttributes::getDelFlag, "0"); + lqw.eq(bo.getProjectId() != null, QsProjectAttributes::getProjectId, bo.getProjectId()); + lqw.eq(bo.getTypeId() != null, QsProjectAttributes::getTypeId, bo.getTypeId()); + lqw.eq(bo.getValueId() != null, QsProjectAttributes::getValueId, bo.getValueId()); + return lqw; + } + + /** + * 查询项目规格列表 + */ + @Override + public List queryList(QsProjectAttributesBo bo) { + QueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectProjSpecInfoList(lqw); + } + + private QueryWrapper buildQueryWrapper(QsProjectAttributesBo bo) { + Map params = bo.getParams(); + QueryWrapper lqw = Wrappers.query(); + + lqw.eq("qpa.del_flag", UserConstants.NORMAL); + lqw.eq(bo.getProjectId() != null, "qpa.project_id", bo.getProjectId()); + lqw.eq(bo.getTypeId() != null, "qpa.type_id", bo.getTypeId()); + lqw.eq(bo.getValueId() != null, "qpa.value_id", bo.getValueId()); + return lqw; + } + + /** + * 新增项目规格 + */ + @Override + public Boolean insertByBo(QsProjectAttributesBo bo) { + QsProjectAttributes add = BeanUtil.toBean(bo, QsProjectAttributes.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改项目规格 + */ + @Override + public Boolean updateByBo(QsProjectAttributesBo bo) { + QsProjectAttributes update = BeanUtil.toBean(bo, QsProjectAttributes.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(QsProjectAttributes entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除项目规格 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } + + /** + * 根据项目ID批量删除项目规格 + */ + @Override + public boolean deleteByProjectId(Long ProjectId) { + int rowsAffected = baseMapper.deleteByProjectId(ProjectId); + return rowsAffected >= 0; + } +} diff --git a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsProjectsServiceImpl.java b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsProjectsServiceImpl.java new file mode 100644 index 0000000..08a4364 --- /dev/null +++ b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsProjectsServiceImpl.java @@ -0,0 +1,317 @@ +package net.ferrum.business.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import net.ferrum.business.domain.bo.QsProjectAttributesBo; +import net.ferrum.business.domain.vo.QsProjectAttributesVo; +import net.ferrum.business.service.IQsProjectAttributesService; +import net.ferrum.common.constant.UserConstants; +import net.ferrum.common.utils.BeanCopyUtils; +import net.ferrum.common.utils.StringUtils; +import net.ferrum.common.core.page.TableDataInfo; +import net.ferrum.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import net.ferrum.business.domain.bo.QsProjectsBo; +import net.ferrum.business.domain.vo.QsProjectsVo; +import net.ferrum.business.domain.QsProjects; +import net.ferrum.business.mapper.QsProjectsMapper; +import net.ferrum.business.service.IQsProjectsService; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.support.TransactionTemplate; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLongArray; + +/** + * 项目管理Service业务层处理 + * + * @author ruoyi + * @date 2025-07-19 + */ +@RequiredArgsConstructor +@Service +@Slf4j +public class QsProjectsServiceImpl implements IQsProjectsService { + + private final QsProjectsMapper baseMapper; + private final IQsProjectAttributesService iQsProjectAttributesService; + private final PlatformTransactionManager transactionManager; + + private final StringBuilder failureMsg = new StringBuilder(); + + /** + * 查询项目管理 + */ + @Override + public QsProjectsVo queryById(Long projectId){ + return baseMapper.selectVoById(projectId); + } + + public QsProjects selectById(Long projectId){ + QsProjects entity = new QsProjects(); + QsProjectsVo vo = baseMapper.selectVoById(projectId); + BeanCopyUtils.copy(vo,entity); + PageQuery pageQuery = new PageQuery(); + pageQuery.setPageNum(1); + pageQuery.setPageSize(10); + TableDataInfo data = queryPageList(entity,pageQuery); + if ( !data.getRows().isEmpty() ){ + return data.getRows().get(0); + } + else{ + return null; + } + + } + + /** + * 查询项目管理列表 + */ + @Override + public TableDataInfo queryPageList(QsProjects entity, PageQuery pageQuery) { + Wrapper lqw = buildQueryWrapper(entity); + Page result = baseMapper.selectPageQsProjectsList(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询项目管理列表 + */ + @Override + public List queryList(QsProjectsBo bo) { + QsProjects entity = new QsProjects(); + BeanCopyUtils.copy(bo,entity); + Wrapper lqw = buildQueryWrapper(entity); + return baseMapper.selectVoList(lqw); + } + + private QueryWrapper buildQueryWrapper(QsProjects bo) { + Map params = bo.getParams(); + //LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + QueryWrapper lqw = new QueryWrapper<>(); + lqw.eq("a.del_flag", UserConstants.NORMAL); + + lqw.eq(bo.getBatchId() != null, "a.batch_id", bo.getBatchId()); + lqw.like(StringUtils.isNotBlank(bo.getBatchName()), "b.batch_name", bo.getBatchName()); + lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "a.project_name", bo.getProjectName()); + lqw.like(bo.getStageDisplayName() != null, "ms.display_name", bo.getStageDisplayName()); + lqw.like(StringUtils.isNotBlank(bo.getProjectCompletion()), "a.project_completion", bo.getProjectCompletion()); + lqw.between(params.get("beginStartDate") != null && params.get("endStartDate") != null, + "a.start_date" ,params.get("beginStartDate"), params.get("endStartDate")); + lqw.between(params.get("beginEndTime") != null && params.get("endEndTime") != null, + "a.end_time" ,params.get("beginEndTime"), params.get("endEndTime")); + return lqw; + } + + /** + * 新增项目管理 + */ + @Override + public Boolean insertByBo(QsProjectsBo bo) { + + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + boolean updateSuccess = true; + transactionTemplate.execute(status -> { + try { + // 在这里执行数据库操作,这些操作将在同一个事务中执行 + QsProjects add = BeanUtil.toBean(bo, QsProjects.class); + //validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setProjectId(add.getProjectId()); + //插入项目所有的规格参数 + bo.getSpecInfoList().forEach(specValue -> { + QsProjectAttributesBo specInfoBo = new QsProjectAttributesBo(); + BeanCopyUtils.copy(specValue,specInfoBo); + specInfoBo.setProjectId(bo.getProjectId()); + if (! iQsProjectAttributesService.insertByBo(specInfoBo)) { + String msg = "插入异常——在插入项目规格信息时出现异常!" + "参数:" + specInfoBo; + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + }); + //在 qs_project_stage_status 表中插入当前项目的阶段的子并行阶段 + // 在项目表中插入项目时,默认项目当前阶段为1,第一阶段:项目建议,没有并行的子阶段,所以不用做这步操作 + } + else{ + String msg = "插入异常——在插入项目主体信息时出现异常!" + "参数:" + bo; + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + // 如果一切正常,返回null表示提交事务 + return null; + } catch (Exception e) { + // 如果发生异常,可以手动回滚事务 + status.setRollbackOnly(); + throw e; + } + }); + + return updateSuccess; + + } + + /** + * 修改项目管理 + */ + @Override + public Boolean updateByBo(QsProjectsBo bo) { + + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + boolean updateSuccess = true; + transactionTemplate.execute(status -> { + try { + // 在这里执行数据库操作,这些操作将在同一个事务中执行 + QsProjectAttributesBo querySpecInfoBo = new QsProjectAttributesBo(); + querySpecInfoBo.setProjectId(bo.getProjectId()); + List projSepcValueList =iQsProjectAttributesService.queryList(querySpecInfoBo); + + // 将 projSepcValueList 的 id 存入 Map + Map mapB = new HashMap<>(); + for (QsProjectAttributesVo item : projSepcValueList) { + mapB.put(item.getId(), item); + } + + bo.getSpecInfoList().forEach(specValue -> { + QsProjectAttributesVo oldSpecInfo = mapB.get(specValue.getId()); + + QsProjectAttributesBo specInfoBo = new QsProjectAttributesBo(); + + if (oldSpecInfo == null){ //没有这个规格属性,就插入一个新的 + BeanCopyUtils.copy(specValue,specInfoBo); + specInfoBo.setProjectId(bo.getProjectId()); + if (! iQsProjectAttributesService.insertByBo(specInfoBo)) { + String msg = "修改项目,插入异常——在插入项目规格信息时出现异常!" + "参数:" + specInfoBo; + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + } + else if (oldSpecInfo.getId().equals(specValue.getId()) && + !oldSpecInfo.getValue().equals(specValue.getValue())){ //规格发生改变 + BeanCopyUtils.copy(specValue,specInfoBo); + specInfoBo.setProjectId(bo.getProjectId()); + if (! iQsProjectAttributesService.updateByBo(specInfoBo)) { + String msg = "修改项目,更新异常——在更新项目规格信息时出现异常!" + "参数:" + specInfoBo; + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + } + }); + + QsProjects update = BeanUtil.toBean(bo, QsProjects.class); + validEntityBeforeSave(update); + if (!(baseMapper.updateById(update) > 0)){ + String msg = "修改项目,更新异常——在更新项目信息时出现异常!" + "参数:" + update.toString(); + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + + // 如果一切正常,返回null表示提交事务 + return null; + } catch (Exception e) { + // 如果发生异常,可以手动回滚事务 + status.setRollbackOnly(); + throw e; + } + }); + + return updateSuccess; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(QsProjects entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除项目管理 + */ + @Override + public String deleteWithValidByIds(Collection ids, Boolean isValid) { + + List qsProjectList = baseMapper.selectBatchIds(ids); + + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + failureMsg.setLength(0); // 清空内容 + for (int i = 0; i < qsProjectList.size(); i++) { + QsProjects qsProject = qsProjectList.get(i); + if (qsProject.getCurrentMasterStageId() > UserConstants.PROJECT_START_ID) { // 项目已经开工,不允许删除 + String msg = "删除项目,项目名称:" + qsProject.getProjectName() + + "已经开工,不能删除!"; + failureMsg.append(msg); + } + } + if (failureMsg.length()>0) return failureMsg.toString(); + } + + failureMsg.setLength(0); // 清空内容 + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + AtomicLongArray noDelProject = new AtomicLongArray(ids.size()); + String sRet = transactionTemplate.execute(status -> { + try { + // 在这里执行数据库操作,这些操作将在同一个事务中执行 + ids.forEach(projectId -> { + QsProjects qsProject = baseMapper.selectById(projectId); + if(qsProject == null){return;} + //删除 项目的规格参数 + if(!iQsProjectAttributesService.deleteByProjectId(projectId)){ + String msg = "删除项目,删除异常——在删除项目规格信息时出现异常!" + "参数:" + qsProject; + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + //删除 项目基本信息 + if(!( baseMapper.deleteById(projectId) > 0)){ + String msg = "删除项目,删除异常——在删除项目规格信息时出现异常!" + "参数:" + qsProject; + failureMsg.append(msg); + log.error(msg); + throw new RuntimeException(msg); + } + }); + // 如果一切正常,返回null表示提交事务 + return failureMsg.toString(); + } catch (Exception e) { + // 如果发生异常,可以手动回滚事务 + status.setRollbackOnly(); + return failureMsg.toString(); + } + }); + return sRet; + } + + /** + * 校验项目是否已经开工 + * + * @param projectId 项目ID + * @return 结果 + */ + @Override + public boolean checkProjectInProcessing(Long projectId) { + return baseMapper.exists(new LambdaQueryWrapper() + .gt(QsProjects::getCurrentMasterStageId, UserConstants.PROJECT_START_ID) + .eq(ObjectUtil.isNotNull(projectId), QsProjects::getProjectId, projectId) + ); + } +} diff --git a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeTypesServiceImpl.java b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeTypesServiceImpl.java index 696b2b5..c9af685 100644 --- a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeTypesServiceImpl.java +++ b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeTypesServiceImpl.java @@ -2,6 +2,7 @@ package net.ferrum.business.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import net.ferrum.business.domain.QsBatch; import net.ferrum.common.utils.StringUtils; import net.ferrum.common.core.page.TableDataInfo; import net.ferrum.common.core.domain.PageQuery; @@ -112,16 +113,18 @@ public class QsSpecAttributeTypesServiceImpl implements IQsSpecAttributeTypesSer * 查询规格参数类型 * * @param type 要查询的规格参数类型 - * @return 部门信息集合 + * @return 部规格参数类型信息集合 */ @Override public List selectSpecAttributeTypesList(QsSpecAttributeTypes type) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(QsSpecAttributeTypes::getDelFlag, "0") - .eq(ObjectUtil.isNotNull(type.getTypeId()), QsSpecAttributeTypes::getTypeId, type.getTypeId()) - .like(StringUtils.isNotBlank(type.getTypeName()), QsSpecAttributeTypes::getTypeName, type.getTypeName()) - .orderByAsc(QsSpecAttributeTypes::getTypeId) - .orderByAsc(QsSpecAttributeTypes::getTypeName); + if (type != null){ + lqw.eq(QsSpecAttributeTypes::getDelFlag, "0") + .eq(ObjectUtil.isNotNull(type.getTypeId()), QsSpecAttributeTypes::getTypeId, type.getTypeId()) + .like(StringUtils.isNotBlank(type.getTypeName()), QsSpecAttributeTypes::getTypeName, type.getTypeName()) + .orderByAsc(QsSpecAttributeTypes::getTypeId) + .orderByAsc(QsSpecAttributeTypes::getTypeName); + } return baseMapper.selectSpecAttributeTypesList(lqw); } } diff --git a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeValuesServiceImpl.java b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeValuesServiceImpl.java index 282ddce..2edba2a 100644 --- a/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeValuesServiceImpl.java +++ b/quotation-system/src/main/java/net/ferrum/business/service/impl/QsSpecAttributeValuesServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import net.ferrum.business.domain.QsSpecAttributeTypes; import net.ferrum.business.mapper.QsSpecAttributeTypesMapper; import net.ferrum.common.constant.UserConstants; +import net.ferrum.common.core.domain.R; import net.ferrum.common.core.domain.entity.SysDept; import net.ferrum.common.core.domain.entity.SysUser; import net.ferrum.common.helper.DataBaseHelper; @@ -145,4 +146,8 @@ public class QsSpecAttributeValuesServiceImpl implements IQsSpecAttributeValuesS } return baseMapper.deleteBatchIds(ids) > 0; } + + public List selectSpecAttributeValuesByTypesId(Long typeId) { + return baseMapper.selectSpecAttributeValuesByTypesId(typeId); + } } diff --git a/quotation-system/src/main/resources/mapper/business/QsBatchMapper.xml b/quotation-system/src/main/resources/mapper/business/QsBatchMapper.xml index e038155..baf77ba 100644 --- a/quotation-system/src/main/resources/mapper/business/QsBatchMapper.xml +++ b/quotation-system/src/main/resources/mapper/business/QsBatchMapper.xml @@ -19,5 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + diff --git a/quotation-system/src/main/resources/mapper/business/QsProjectAttributesMapper.xml b/quotation-system/src/main/resources/mapper/business/QsProjectAttributesMapper.xml new file mode 100644 index 0000000..3edf111 --- /dev/null +++ b/quotation-system/src/main/resources/mapper/business/QsProjectAttributesMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + DELETE FROM qs_project_attributes + WHERE project_id = #{projectId} + + + diff --git a/quotation-system/src/main/resources/mapper/business/QsProjectsMapper.xml b/quotation-system/src/main/resources/mapper/business/QsProjectsMapper.xml new file mode 100644 index 0000000..bb1cc6e --- /dev/null +++ b/quotation-system/src/main/resources/mapper/business/QsProjectsMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quotation-system/src/main/resources/mapper/business/QsSpecAttributeTypesMapper.xml b/quotation-system/src/main/resources/mapper/business/QsSpecAttributeTypesMapper.xml index 42513ab..9822d98 100644 --- a/quotation-system/src/main/resources/mapper/business/QsSpecAttributeTypesMapper.xml +++ b/quotation-system/src/main/resources/mapper/business/QsSpecAttributeTypesMapper.xml @@ -13,6 +13,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + diff --git a/quotation-system/src/main/resources/mapper/business/QsSpecAttributeValuesMapper.xml b/quotation-system/src/main/resources/mapper/business/QsSpecAttributeValuesMapper.xml index 96bcf13..3de3baf 100644 --- a/quotation-system/src/main/resources/mapper/business/QsSpecAttributeValuesMapper.xml +++ b/quotation-system/src/main/resources/mapper/business/QsSpecAttributeValuesMapper.xml @@ -40,4 +40,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by a.type_id, a.value_id + + diff --git a/script/sql/mysql/projectsMenu.sql b/script/sql/mysql/projectsMenu.sql new file mode 100644 index 0000000..13e3456 --- /dev/null +++ b/script/sql/mysql/projectsMenu.sql @@ -0,0 +1,19 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1946418987737362434, '项目管理', '1896968401096663042', '1', 'projects', 'business/projects/index', 1, 0, 'C', '0', '0', 'business:projects:list', '#', 'admin', sysdate(), '', null, '项目管理菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1946418987737362435, '项目管理查询', 1946418987737362434, '1', '#', '', 1, 0, 'F', '0', '0', 'business:projects:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1946418987737362436, '项目管理新增', 1946418987737362434, '2', '#', '', 1, 0, 'F', '0', '0', 'business:projects:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1946418987737362437, '项目管理修改', 1946418987737362434, '3', '#', '', 1, 0, 'F', '0', '0', 'business:projects:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1946418987737362438, '项目管理删除', 1946418987737362434, '4', '#', '', 1, 0, 'F', '0', '0', 'business:projects:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1946418987737362439, '项目管理导出', 1946418987737362434, '5', '#', '', 1, 0, 'F', '0', '0', 'business:projects:export', '#', 'admin', sysdate(), '', null, ''); diff --git a/script/sql/mysql/userSupplierMenu.sql b/script/sql/mysql/userSupplierMenu.sql new file mode 100644 index 0000000..2784153 --- /dev/null +++ b/script/sql/mysql/userSupplierMenu.sql @@ -0,0 +1,19 @@ +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1944385995214422017, 'userSupplier', '1896968401096663042', '1', 'userSupplier', 'business/userSupplier/index', 1, 0, 'C', '0', '0', 'business:userSupplier:list', '#', 'admin', sysdate(), '', null, 'userSupplier菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1944385995214422018, 'userSupplier查询', 1944385995214422017, '1', '#', '', 1, 0, 'F', '0', '0', 'business:userSupplier:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1944385995214422019, 'userSupplier新增', 1944385995214422017, '2', '#', '', 1, 0, 'F', '0', '0', 'business:userSupplier:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1944385995214422020, 'userSupplier修改', 1944385995214422017, '3', '#', '', 1, 0, 'F', '0', '0', 'business:userSupplier:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1944385995214422021, 'userSupplier删除', 1944385995214422017, '4', '#', '', 1, 0, 'F', '0', '0', 'business:userSupplier:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values(1944385995214422022, 'userSupplier导出', 1944385995214422017, '5', '#', '', 1, 0, 'F', '0', '0', 'business:userSupplier:export', '#', 'admin', sysdate(), '', null, '');