diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/CodeGeneratorController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/CodeGeneratorController.java new file mode 100644 index 0000000..ba30885 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/CodeGeneratorController.java @@ -0,0 +1,22 @@ +package com.ruoyi.oa.controller; + + +import com.ruoyi.oa.service.CodeGeneratorService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/code") +public class CodeGeneratorController { + + private final CodeGeneratorService gen; + + @GetMapping("/code/{prefix}") + public String genCode(@PathVariable String prefix) { + return gen.nextCode(prefix); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java index 0200af3..8a0ca95 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java @@ -43,6 +43,9 @@ public class SysOaProjectController extends BaseController { private final SysOaTaskMapper sysOaTaskMapper; + + + /** * 查询项目管理列表 */ @@ -51,6 +54,15 @@ public class SysOaProjectController extends BaseController { return iSysOaProjectService.queryPageList(bo, pageQuery); } + + /** + * 查询项目管理列表 + */ + @GetMapping("/ware-list") + public TableDataInfo listWareProject(SysOaProjectBo bo, PageQuery pageQuery) { + return iSysOaProjectService.listWareProject(bo, pageQuery); + } + /** * 导出项目管理列表 */ diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/PrefixCounter.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/PrefixCounter.java new file mode 100644 index 0000000..0d7d03a --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/PrefixCounter.java @@ -0,0 +1,17 @@ +package com.ruoyi.oa.domain; + + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("sys_prefix_counter") +public class PrefixCounter { + + @TableId(value = "prefix", type = IdType.INPUT) + private String prefix; // 主键,用作前缀 + + private Long seq; // 当前序号 +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java index 8a4545d..368a4a2 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java @@ -144,4 +144,9 @@ public class SysOaProject extends BaseEntity { * 预付款 */ private Double prePay; + + /** + * 代号类型 + */ + private String projectCode; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java index cb22388..0a41ad4 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java @@ -176,5 +176,10 @@ public class SysOaProjectBo extends BaseEntity { * 预付款 */ private Double prePay; + + /** + * 代号类型 + */ + private String projectCode; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java index 5904a14..116b290 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java @@ -87,4 +87,6 @@ public class OaProjectScheduleVo { private String description; + private String projectCode; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaContractVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaContractVo.java index f6bc9df..cde73d7 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaContractVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaContractVo.java @@ -7,9 +7,10 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.system.domain.SysOss; import lombok.Data; import java.util.Date; - +import java.util.List; /** @@ -137,5 +138,5 @@ public class SysOaContractVo { @ExcelProperty(value = "备注") private String remark; - + private List fileList; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java index 59d22bd..189afe7 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java @@ -10,6 +10,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; import com.ruoyi.oa.domain.SysOaTask; +import com.ruoyi.system.domain.SysOss; import lombok.Data; import lombok.NoArgsConstructor; @@ -239,4 +240,11 @@ public class SysOaProjectVo { * 预付款 */ private Double prePay; + + private List fileList; + /** + * 代号类型 + */ + private String projectCode; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskItemVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskItemVo.java index 92a8f2c..97ae97b 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskItemVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskItemVo.java @@ -6,11 +6,12 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.system.domain.SysOss; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; - +import java.util.List; /** @@ -110,4 +111,6 @@ public class SysOaTaskItemVo { private String nickName; -} + + private List itemFileList; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskVo.java index 2ca9840..a6e1b43 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaTaskVo.java @@ -7,6 +7,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.system.domain.SysOss; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -210,4 +211,6 @@ public class SysOaTaskVo { private List taskItemVoList; private String files; + + private List fileList; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseDetailVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseDetailVo.java index b6e77ca..81628a2 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseDetailVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseDetailVo.java @@ -67,5 +67,6 @@ public class SysOaWarehouseDetailVo extends BaseEntity { private String model; private String specifications; + private String brand; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/PrefixCounterMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/PrefixCounterMapper.java new file mode 100644 index 0000000..7a45d1f --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/PrefixCounterMapper.java @@ -0,0 +1,22 @@ +package com.ruoyi.oa.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.oa.domain.PrefixCounter; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +public interface PrefixCounterMapper extends BaseMapper { + + /** + * 若首次使用该 prefix ⇒ 插入 seq = 1 + * 否则 ⇒ seq 原子 +1,并把新值写进 LAST_INSERT_ID + */ + + void upsertAndIncr(@Param("prefix") String prefix); + + /** 取上一步 LAST_INSERT_ID()(就是它自增后的新序号) */ + @Select("SELECT LAST_INSERT_ID()") + Long getLastSeq(); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaContractMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaContractMapper.java index 4bdea62..679a0a6 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaContractMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaContractMapper.java @@ -1,9 +1,14 @@ package com.ruoyi.oa.mapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.ruoyi.oa.domain.SysOaContract; import com.ruoyi.oa.domain.vo.SysOaContractVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 合同管理Mapper接口 @@ -14,4 +19,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SysOaContractMapper extends BaseMapperPlus { + SysOaContractVo selectVoOnePlus(@Param(Constants.WRAPPER) QueryWrapper sysOaContractLambdaQueryWrapper); + + List selectVoListPlus(@Param(Constants.WRAPPER)QueryWrapper sysOaContractLambdaQueryWrapper); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java index 211e981..0e1d598 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java @@ -51,4 +51,10 @@ public interface SysOaProjectMapper extends BaseMapperPlus selectVoListPage(@Param("page") Page build,@Param(Constants.WRAPPER) QueryWrapper bo); + + Page listWareProject(@Param("page") Page build,@Param(Constants.WRAPPER) QueryWrapper bo); + + + SysOaProjectVo selectVoByIdPlus(Long projectId); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/CodeGeneratorService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/CodeGeneratorService.java new file mode 100644 index 0000000..a652eef --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/CodeGeneratorService.java @@ -0,0 +1,6 @@ +package com.ruoyi.oa.service; + +public interface CodeGeneratorService { + + String nextCode(String prefix) ; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java index 39ec64f..4255a29 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java @@ -76,4 +76,6 @@ public interface ISysOaProjectService { TableDataInfo queryPageList2(SysOaProjectBo bo, PageQuery pageQuery); TableDataInfo listProjects(SysOaProjectBo bo, PageQuery pageQuery); + + TableDataInfo listWareProject(SysOaProjectBo bo, PageQuery pageQuery); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/CodeGeneratorServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/CodeGeneratorServiceImpl.java new file mode 100644 index 0000000..5a56e7b --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/CodeGeneratorServiceImpl.java @@ -0,0 +1,26 @@ +package com.ruoyi.oa.service.impl; + +import com.ruoyi.oa.mapper.PrefixCounterMapper; +import com.ruoyi.oa.service.CodeGeneratorService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Service +public class CodeGeneratorServiceImpl implements CodeGeneratorService { + + @Autowired + private PrefixCounterMapper mapper; + + @Transactional(rollbackFor = Exception.class) + @Override + public String nextCode(String prefix) { + mapper.upsertAndIncr(prefix); // 原子插/更 + long num = mapper.getLastSeq(); // 拿到新的序号 + // 改动在这里:%07d 表示数字宽度 7,不足的前面补 0 + String padded = String.format("%07d", num); + return prefix + "-" + padded; // e.g. TH-0000001 + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java index 45d2e52..cd69df9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleServiceImpl.java @@ -10,9 +10,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.OaProjectScheduleStep; import com.ruoyi.oa.domain.OaScheduleTemplate; +import com.ruoyi.oa.domain.OaScheduleTemplateStep; import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo; import com.ruoyi.oa.domain.bo.OaScheduleTemplateStepBo; import com.ruoyi.oa.domain.vo.OaProjectScheduleStepVo; +import com.ruoyi.oa.domain.vo.OaScheduleTemplateStepVo; +import com.ruoyi.oa.domain.vo.OaScheduleTemplateVo; import com.ruoyi.oa.mapper.OaScheduleTemplateMapper; import com.ruoyi.oa.service.IOaProjectScheduleStepService; import com.ruoyi.oa.service.IOaScheduleTemplateStepService; @@ -111,6 +114,7 @@ public class OaProjectScheduleServiceImpl implements IOaProjectScheduleService { } bo.setTemplateId(templateId); } + bo.setCurrentStep(1L); OaProjectSchedule add = BeanUtil.toBean(bo, OaProjectSchedule.class); validEntityBeforeSave(add); @@ -118,13 +122,19 @@ public class OaProjectScheduleServiceImpl implements IOaProjectScheduleService { if (flag) { bo.setScheduleId(add.getScheduleId()); } + Long templateId = bo.getTemplateId(); + OaScheduleTemplateStepBo oaScheduleTemplateStep = new OaScheduleTemplateStepBo(); + oaScheduleTemplateStep.setTemplateId(templateId); + List oaScheduleTemplateStepVos = scheduleTemplateStepService.queryList(oaScheduleTemplateStep); for (int i = 0; i < bo.getSteps().size(); i++) { OaProjectScheduleStepBo step = bo.getSteps().get(i); step.setScheduleId(add.getScheduleId()); - step.setStepOrder((long) (i+1)); + OaScheduleTemplateStepVo oaScheduleTemplateStepVo = oaScheduleTemplateStepVos.get(i); + step.setStepOrder(oaScheduleTemplateStepVo.getStepOrder()); step.setBatchId(1L); + step.setHeader(oaScheduleTemplateStepVo.getHeader()); if (i==0){ step.setActualStart(new Date()); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java index d6cc138..af41b7b 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaScheduleTemplateStepServiceImpl.java @@ -45,7 +45,7 @@ public class OaScheduleTemplateStepServiceImpl implements IOaScheduleTemplateSte */ @Override public TableDataInfo queryPageList(OaScheduleTemplateStepBo bo, PageQuery pageQuery) { - QueryWrapper lqw = buildQueryWrapper(bo); + QueryWrapper lqw = buildQueryWrapperSelect(bo); Page result = baseMapper.selectVoPagePlus(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -62,6 +62,19 @@ public class OaScheduleTemplateStepServiceImpl implements IOaScheduleTemplateSte private QueryWrapper buildQueryWrapper(OaScheduleTemplateStepBo bo) { Map params = bo.getParams(); QueryWrapper lqw = Wrappers.query(); + lqw.eq(bo.getTemplateId() != null, "template_id", bo.getTemplateId()); + lqw.eq(bo.getStepOrder() != null, "step_order", bo.getStepOrder()); + lqw.like(StringUtils.isNotBlank(bo.getStepName()), "step_name", bo.getStepName()); + lqw.eq(bo.getExpectedDays() != null,"expected_days", bo.getExpectedDays()); + lqw.eq(StringUtils.isNotBlank(bo.getHeader()), "header", bo.getHeader()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), "description", bo.getDescription()); + lqw.orderByAsc("step_order"); + return lqw; + } + + private QueryWrapper buildQueryWrapperSelect(OaScheduleTemplateStepBo bo) { + Map params = bo.getParams(); + QueryWrapper lqw = Wrappers.query(); lqw.eq(bo.getTemplateId() != null, "template_id", bo.getTemplateId()); lqw.eq(bo.getStepOrder() != null, "step_order", bo.getStepOrder()); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaContractServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaContractServiceImpl.java index 13650fd..a412e5f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaContractServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaContractServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; @@ -70,8 +71,9 @@ public class SysOaContractServiceImpl implements ISysOaContractService { */ @Override public SysOaContractVo findContractByProjectId(SysOaContractBo bo){ - LambdaQueryWrapper sysOaContractLambdaQueryWrapper = buildContractWrapper(bo); - return contractMapper.selectVoOne(sysOaContractLambdaQueryWrapper); + QueryWrapper sysOaContractLambdaQueryWrapper = buildContractWrapper(bo); + + return contractMapper.selectVoOnePlus(sysOaContractLambdaQueryWrapper); } /** @@ -81,8 +83,8 @@ public class SysOaContractServiceImpl implements ISysOaContractService { */ @Override public List selectContractByProjectId(SysOaContractBo bo){ - LambdaQueryWrapper sysOaContractLambdaQueryWrapper = buildContractWrapper(bo); ; - return contractMapper.selectVoList(sysOaContractLambdaQueryWrapper); + QueryWrapper sysOaContractLambdaQueryWrapper = buildContractWrapper(bo); ; + return contractMapper.selectVoListPlus(sysOaContractLambdaQueryWrapper); } private LambdaQueryWrapper buildQueryWrapper(SysOaContractBo bo) { @@ -97,10 +99,10 @@ public class SysOaContractServiceImpl implements ISysOaContractService { return lqw; } - private LambdaQueryWrapper buildContractWrapper(SysOaContractBo bo) { - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(SysOaContract::getProjectId, bo.getProjectId()); - lqw.eq(SysOaContract::getContractType, bo.getContractType()); + private QueryWrapper buildContractWrapper(SysOaContractBo bo) { + QueryWrapper lqw = Wrappers.query(); + lqw.eq("soc.project_id", bo.getProjectId()); + lqw.eq("soc.contract_type", bo.getContractType()); return lqw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java index 2c8d07c..6227a8c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java @@ -12,7 +12,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import com.ruoyi.oa.domain.vo.SysOaTaskVo; +import com.ruoyi.oa.service.CodeGeneratorService; +import liquibase.pro.packaged.A; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaProjectBo; import com.ruoyi.oa.domain.vo.SysOaProjectVo; @@ -35,12 +38,22 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { private final SysOaProjectMapper baseMapper; + @Autowired + private CodeGeneratorService codeGeneratorService; + + + // 1. 定义常量列表(最好放到某个常量类里) + private static final Set VALID_PREFIXES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( + "PL", "TC", "GI", "GL", "ZAM", "CC", "CR", "STL", "SM", "TH","RJ" + ))); + + /** * 查询项目管理 */ @Override public SysOaProjectVo queryById(Long projectId) { - return baseMapper.selectVoById(projectId); + return baseMapper.selectVoByIdPlus(projectId); } /** @@ -67,6 +80,8 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), SysOaProject::getProjectName, bo.getProjectName()); lqw.eq(StringUtils.isNotBlank(bo.getProjectNum()), SysOaProject::getProjectNum, bo.getProjectNum()); + lqw.like(StringUtils.isNotBlank(bo.getProjectCode()), SysOaProject::getProjectCode, bo.getProjectCode()); + lqw.eq(bo.getTradeType() != null, SysOaProject::getTradeType, bo.getTradeType()); lqw.gt(bo.getPrePay() != null && bo.getPrePay() > 0, SysOaProject::getPrePay, 0); lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), SysOaProject::getProjectType, bo.getProjectType()); @@ -83,6 +98,9 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { */ @Override public Boolean insertByBo(SysOaProjectBo bo) { + if (bo.getProjectCode()!=null){ + bo.setProjectCode(codeGeneratorService.nextCode(bo.getProjectCode())); + } SysOaProject add = BeanUtil.toBean(bo, SysOaProject.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; @@ -97,11 +115,17 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { */ @Override public Boolean updateByBo(SysOaProjectBo bo) { + String prefix = bo.getProjectCode(); + if (prefix != null && VALID_PREFIXES.contains(prefix)) { + // 只有当前缀在上面列表里,才真正去生成新编号 + bo.setProjectCode(codeGeneratorService.nextCode(prefix)); + } SysOaProject update = BeanUtil.toBean(bo, SysOaProject.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } + // 2. 在你的逻辑里做判断 /** * 保存前的数据校验 */ @@ -242,12 +266,26 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { return TableDataInfo.build(result); } + /** + * 查看存在出库的项目 + * @param bo + * @param pageQuery + * @return + */ + @Override + public TableDataInfo listWareProject(SysOaProjectBo bo, PageQuery pageQuery) { + QueryWrapper lqw = Wrappers.query(); + lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); + lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); + Page result = baseMapper.listWareProject(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + private QueryWrapper buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) { QueryWrapper lqw = Wrappers.query(); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); - lqw.eq(StringUtils.isNotBlank(bo.getWarehouseName()), "sow.name", bo.getWarehouseName()); - lqw.orderByDesc("sop.create_time"); + lqw.orderByDesc("sowm.create_time"); return lqw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java index 650ae01..12cbf30 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaTaskServiceImpl.java @@ -164,22 +164,6 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService { boolean flag = false; for (Long workerId : workerIdList) { - if(Objects.nonNull(bo.getAccessory())){ - List fileUrls = Arrays.stream(bo.getAccessory().split(",")) - .map(String::valueOf) - .collect(Collectors.toList()); - String fileIds = ossService.insertFiles(fileUrls); - - bo.setAccessory(fileIds); - } - if (Objects.nonNull(bo.getFiles())) { - List fileUrls = Arrays.stream(bo.getFiles().split(",")) - .map(String::valueOf) - .collect(Collectors.toList()); - String fileIds = ossService.insertFiles(fileUrls); - - bo.setFiles(fileIds); - } SysOaTask add = BeanUtil.toBean(bo, SysOaTask.class); add.setCreateUserId(LoginHelper.getUserId()); validEntityBeforeSave(add); diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml index 7706ab3..a5ca072 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml @@ -46,9 +46,11 @@ op.project_grade, op.project_status, op.trade_type, + op.project_code, op.pre_pay, opss.plan_end, - TIMESTAMPDIFF(DAY, NOW(), opss.plan_end) AS remainTime, + opss.header, + DATEDIFF(DATE(opss.plan_end), CURDATE()) AS remainTime, ROUND( ( (ops.current_step - CASE WHEN opss.status = 0 THEN 1 ELSE 0 END) diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml index 674f07f..53a7261 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleStepMapper.xml @@ -21,6 +21,7 @@ + AND s.project_id = #{bo.projectId} + + + AND s.type = #{bo.type} AND s.del_flag = 0 diff --git a/ruoyi-oa/src/main/resources/mapper/oa/PrefixCounterMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/PrefixCounterMapper.xml new file mode 100644 index 0000000..a66bbaa --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/PrefixCounterMapper.xml @@ -0,0 +1,15 @@ + + + + + + + INSERT INTO sys_prefix_counter (prefix, seq) + VALUES (#{prefix}, LAST_INSERT_ID(1)) + ON DUPLICATE KEY UPDATE + seq = LAST_INSERT_ID(seq + 1) + + + \ No newline at end of file diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml index a9bf561..a23168f 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml @@ -266,43 +266,21 @@ SELECT m.month, ROUND( - COUNT( - DISTINCT CASE - WHEN a.project_id NOT IN (0, 1) - THEN CONCAT(a.user_id, '_', DATE(a.create_time)) - END - ) - / - NULLIF( - COUNT( - DISTINCT CASE - WHEN a.project_id != 0 - THEN a.user_id - END - ) - * - COUNT( - DISTINCT CASE - WHEN a.project_id != 0 - THEN DATE(a.create_time) - END - ), - 0 - ), - 4 + COUNT(DISTINCT CASE + WHEN a.project_id NOT IN (0, 1) + THEN CONCAT(a.user_id, '_', DATE(a.create_time)) END) / + NULLIF(COUNT(DISTINCT CASE WHEN a.project_id != 0 THEN a.user_id END) * + COUNT(DISTINCT CASE WHEN a.project_id != 0 THEN DATE(a.create_time) END), 0), 4 ) AS attendanceRate, SUM(CASE WHEN a.project_id = 0 THEN 1 ELSE 0 END) AS tripCount, - COUNT(CASE WHEN a.project_id = 1 THEN 1 END) AS leavePeople, - SUM(CASE WHEN a.project_id NOT IN (0, 1) AND IFNULL(a.hour, 0) > 8 THEN IFNULL(a.hour, 0) - 8 ELSE 0 END) AS overtimeHours - FROM (SELECT DATE_FORMAT(#{refDate}, '%Y-%m') AS month, LAST_DAY(#{refDate}) AS last_day, CASE diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaContractMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaContractMapper.xml index 3f35c34..2d81c88 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaContractMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaContractMapper.xml @@ -4,9 +4,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - @@ -23,9 +22,86 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml index 1c9e830..426a341 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml @@ -60,7 +60,15 @@ - + + + + + + + + + @@ -84,6 +92,7 @@ select sum(soa.day_length + soa.hour / 8) as labor_cost, color, + sop.project_code, sop.project_name, date_format(soa.create_time, '%Y-%m-%d') as create_time from sys_oa_project sop @@ -147,6 +158,7 @@ + SELECT distinct sop.project_id, + project_name, + project_num, + project_type, + address, + funds, + functionary, + begin_time, + finish_time, + delivery, + guarantee, + introduction, + project_grade, + project_status, + contract_id, + invoice_name, + invoice_number, + invoice_address, + invoice_bank, + accessory, + bail, + is_postpone, + postpone_reason, + postpone_time, + color, + trade_type, + sop.project_code, + pre_pay + FROM sys_oa_project sop + INNER JOIN sys_oa_warehouse_master sown + ON sown.project_id = sop.project_id + ${ ew.getCustomSqlSegment} + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml index 5e886b7..a0edd7f 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaTaskMapper.xml @@ -14,7 +14,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - @@ -26,13 +25,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + + + + + + + + + + + + + + + + + + @@ -60,13 +80,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" sot.origin_finish_time, sot.postponements, sot.completed_time, - sot.content, - ( - SELECT GROUP_CONCAT(so.url SEPARATOR ',') - FROM sys_oss so - WHERE FIND_IN_SET(so.oss_id, sot.accessory) > 0 - ) AS accessory, - + CASE + WHEN sot.completed_time IS NULL + THEN DATEDIFF( + NOW(), + COALESCE( + sot.finish_time, + (SELECT a.end_time + FROM sys_oa_task_item a + WHERE a.task_id = sot.task_id + AND a.completed_time IS NULL + LIMIT 1) + ) + ) + ELSE 0 + END AS overDays, sot.rank_number, sot.remark, sot.task_rank, @@ -83,19 +111,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" soti.item_id, sop.project_num, su1.nick_name AS createUserNickName, - su2.nick_name AS workerNickName, - CASE - WHEN sot.completed_time IS NULL - THEN DATEDIFF(NOW(), COALESCE(sot.finish_time, soti.end_time)) - ELSE 0 - END AS overDays, - ( - - SELECT GROUP_CONCAT(so.url SEPARATOR ',') - FROM sys_oss so - WHERE FIND_IN_SET(so.oss_id, soti.files) > 0 - ) AS files - + su2.nick_name AS workerNickName FROM sys_oa_task sot LEFT JOIN sys_user su1 ON su1.user_id = sot.create_user_id LEFT JOIN sys_user su2 ON su2.user_id = sot.worker_id @@ -110,105 +126,101 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - -