diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/controller/BasePaymentStageController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/controller/BasePaymentStageController.java new file mode 100644 index 00000000..d4b0d779 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/controller/BasePaymentStageController.java @@ -0,0 +1,116 @@ +package org.dromara.oa.base.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.base.domain.vo.BasePaymentStageVo; +import org.dromara.oa.base.domain.bo.BasePaymentStageBo; +import org.dromara.oa.base.service.IBasePaymentStageService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 回款阶段 + * 前端访问路由地址为:/oa/base/paymentStage + * + * @author Yinq + * @date 2025-12-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/base/paymentStage") +public class BasePaymentStageController extends BaseController { + + private final IBasePaymentStageService basePaymentStageService; + + /** + * 查询回款阶段列表 + */ + @SaCheckPermission("oa/base:paymentStage:list") + @GetMapping("/list") + public TableDataInfo list(BasePaymentStageBo bo, PageQuery pageQuery) { + return basePaymentStageService.queryPageList(bo, pageQuery); + } + + /** + * 导出回款阶段列表 + */ + @SaCheckPermission("oa/base:paymentStage:export") + @Log(title = "回款阶段", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(BasePaymentStageBo bo, HttpServletResponse response) { + List list = basePaymentStageService.queryList(bo); + ExcelUtil.exportExcel(list, "回款阶段", BasePaymentStageVo.class, response); + } + + /** + * 获取回款阶段详细信息 + * + * @param paymentStageId 主键 + */ + @SaCheckPermission("oa/base:paymentStage:query") + @GetMapping("/{paymentStageId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("paymentStageId") Long paymentStageId) { + return R.ok(basePaymentStageService.queryById(paymentStageId)); + } + + /** + * 新增回款阶段 + */ + @SaCheckPermission("oa/base:paymentStage:add") + @Log(title = "回款阶段", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BasePaymentStageBo bo) { + return toAjax(basePaymentStageService.insertByBo(bo)); + } + + /** + * 修改回款阶段 + */ + @SaCheckPermission("oa/base:paymentStage:edit") + @Log(title = "回款阶段", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody BasePaymentStageBo bo) { + return toAjax(basePaymentStageService.updateByBo(bo)); + } + + /** + * 删除回款阶段 + * + * @param paymentStageIds 主键串 + */ + @SaCheckPermission("oa/base:paymentStage:remove") + @Log(title = "回款阶段", businessType = BusinessType.DELETE) + @DeleteMapping("/{paymentStageIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("paymentStageIds") Long[] paymentStageIds) { + return toAjax(basePaymentStageService.deleteWithValidByIds(List.of(paymentStageIds), true)); + } + + /** + * 下拉框查询回款阶段列表 + */ + @GetMapping("/getBasePaymentStageList") + public R> getBasePaymentStageList(BasePaymentStageBo bo) { + List list = basePaymentStageService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/BasePaymentStage.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/BasePaymentStage.java new file mode 100644 index 00000000..b72d92ba --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/BasePaymentStage.java @@ -0,0 +1,62 @@ +package org.dromara.oa.base.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 回款阶段对象 base_payment_stage + * + * @author Yinq + * @date 2025-12-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("base_payment_stage") +public class BasePaymentStage extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 回款阶段ID + */ + @TableId(value = "payment_stage_id", type = IdType.AUTO) + private Long paymentStageId; + + /** + * 阶段编码 + */ + private String stageCode; + + /** + * 阶段名称 + */ + private String stageName; + + /** + * 回款阶段(关联各节点,提示用) + */ + private String collectionStage; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/bo/BasePaymentStageBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/bo/BasePaymentStageBo.java new file mode 100644 index 00000000..5264289f --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/bo/BasePaymentStageBo.java @@ -0,0 +1,56 @@ +package org.dromara.oa.base.domain.bo; + +import org.dromara.oa.base.domain.BasePaymentStage; +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.*; + +/** + * 回款阶段业务对象 base_payment_stage + * + * @author Yinq + * @date 2025-12-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BasePaymentStage.class, reverseConvertGenerate = false) +public class BasePaymentStageBo extends BaseEntity { + + /** + * 回款阶段ID + */ + private Long paymentStageId; + + /** + * 阶段编码 + */ + private String stageCode; + + /** + * 阶段名称 + */ + @NotBlank(message = "阶段名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String stageName; + + /** + * 回款阶段(关联各节点,提示用) + */ + @NotBlank(message = "回款阶段(关联各节点,提示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String collectionStage; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/vo/BasePaymentStageVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/vo/BasePaymentStageVo.java new file mode 100644 index 00000000..029a01e4 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/domain/vo/BasePaymentStageVo.java @@ -0,0 +1,93 @@ +package org.dromara.oa.base.domain.vo; + +import org.dromara.oa.base.domain.BasePaymentStage; +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; + + + +/** + * 回款阶段视图对象 base_payment_stage + * + * @author Yinq + * @date 2025-12-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BasePaymentStage.class) +public class BasePaymentStageVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 回款阶段ID + */ + @ExcelProperty(value = "回款阶段ID") + private Long paymentStageId; + + /** + * 阶段编码 + */ + @ExcelProperty(value = "阶段编码") + private String stageCode; + + /** + * 阶段名称 + */ + @ExcelProperty(value = "阶段名称") + private String stageName; + + /** + * 回款阶段(关联各节点,提示用) + */ + @ExcelProperty(value = "回款阶段", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "collection_stage") + private String collectionStage; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建者 + */ + @ExcelProperty(value = "创建者") + private Long createBy; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新者 + */ + @ExcelProperty(value = "更新者") + private Long updateBy; + + /** + * 更新时间 + */ + @ExcelProperty(value = "更新时间") + private Date updateTime; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/mapper/BasePaymentStageMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/mapper/BasePaymentStageMapper.java new file mode 100644 index 00000000..c20c1f8b --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/mapper/BasePaymentStageMapper.java @@ -0,0 +1,38 @@ +package org.dromara.oa.base.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.base.domain.BasePaymentStage; +import org.dromara.oa.base.domain.vo.BasePaymentStageVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 回款阶段Mapper接口 + * + * @author Yinq + * @date 2025-12-11 + */ +public interface BasePaymentStageMapper extends BaseMapperPlus { + + /** + * 查询回款阶段列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 回款阶段集合 + */ + public Page selectCustomBasePaymentStageVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询回款阶段列表 + * + * @param queryWrapper 条件 + * @return 回款阶段集合 + */ + public List selectCustomBasePaymentStageVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/IBasePaymentStageService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/IBasePaymentStageService.java new file mode 100644 index 00000000..4ae741ab --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/IBasePaymentStageService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.base.service; + +import org.dromara.oa.base.domain.BasePaymentStage; +import org.dromara.oa.base.domain.vo.BasePaymentStageVo; +import org.dromara.oa.base.domain.bo.BasePaymentStageBo; +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-12-11 + */ +public interface IBasePaymentStageService { + + /** + * 查询回款阶段 + * + * @param paymentStageId 主键 + * @return 回款阶段 + */ + BasePaymentStageVo queryById(Long paymentStageId); + + /** + * 分页查询回款阶段列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 回款阶段分页列表 + */ + TableDataInfo queryPageList(BasePaymentStageBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的回款阶段列表 + * + * @param bo 查询条件 + * @return 回款阶段列表 + */ + List queryList(BasePaymentStageBo bo); + + /** + * 新增回款阶段 + * + * @param bo 回款阶段 + * @return 是否新增成功 + */ + Boolean insertByBo(BasePaymentStageBo bo); + + /** + * 修改回款阶段 + * + * @param bo 回款阶段 + * @return 是否修改成功 + */ + Boolean updateByBo(BasePaymentStageBo bo); + + /** + * 校验并批量删除回款阶段信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BasePaymentStageServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BasePaymentStageServiceImpl.java new file mode 100644 index 00000000..901ab759 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/base/service/impl/BasePaymentStageServiceImpl.java @@ -0,0 +1,135 @@ +package org.dromara.oa.base.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.base.domain.bo.BasePaymentStageBo; +import org.dromara.oa.base.domain.vo.BasePaymentStageVo; +import org.dromara.oa.base.domain.BasePaymentStage; +import org.dromara.oa.base.mapper.BasePaymentStageMapper; +import org.dromara.oa.base.service.IBasePaymentStageService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 回款阶段Service业务层处理 + * + * @author Yinq + * @date 2025-12-11 + */ +@RequiredArgsConstructor +@Service +public class BasePaymentStageServiceImpl implements IBasePaymentStageService { + + private final BasePaymentStageMapper baseMapper; + + /** + * 查询回款阶段 + * + * @param paymentStageId 主键 + * @return 回款阶段 + */ + @Override + public BasePaymentStageVo queryById(Long paymentStageId) { + return baseMapper.selectVoById(paymentStageId); + } + + /** + * 分页查询回款阶段列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 回款阶段分页列表 + */ + @Override + public TableDataInfo queryPageList(BasePaymentStageBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的回款阶段列表 + * + * @param bo 查询条件 + * @return 回款阶段列表 + */ + @Override + public List queryList(BasePaymentStageBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(BasePaymentStageBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(BasePaymentStage.class) + .selectAll(BasePaymentStage.class) + .eq(BasePaymentStage::getDelFlag, "0") + .eq(StringUtils.isNotBlank(bo.getStageCode()), BasePaymentStage::getStageCode, bo.getStageCode()) + .like(StringUtils.isNotBlank(bo.getStageName()), BasePaymentStage::getStageName, bo.getStageName()) + .eq(StringUtils.isNotBlank(bo.getCollectionStage()), BasePaymentStage::getCollectionStage, bo.getCollectionStage()) + .eq(bo.getSortOrder() != null, BasePaymentStage::getSortOrder, bo.getSortOrder()); + return lqw; + } + + /** + * 新增回款阶段 + * + * @param bo 回款阶段 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BasePaymentStageBo bo) { + BasePaymentStage add = MapstructUtils.convert(bo, BasePaymentStage.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setPaymentStageId(add.getPaymentStageId()); + } + return flag; + } + + /** + * 修改回款阶段 + * + * @param bo 回款阶段 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BasePaymentStageBo bo) { + BasePaymentStage update = MapstructUtils.convert(bo, BasePaymentStage.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BasePaymentStage entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除回款阶段信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractPaymentStageController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractPaymentStageController.java new file mode 100644 index 00000000..2f3cb0d1 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractPaymentStageController.java @@ -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.ErpContractPaymentStageVo; +import org.dromara.oa.erp.domain.bo.ErpContractPaymentStageBo; +import org.dromara.oa.erp.service.IErpContractPaymentStageService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 合同回款阶段 + * 前端访问路由地址为:/oa/erp/contractPaymentStage + * + * @author Yinq + * @date 2025-12-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/erp/contractPaymentStage") +public class ErpContractPaymentStageController extends BaseController { + + private final IErpContractPaymentStageService erpContractPaymentStageService; + + /** + * 查询合同回款阶段列表 + */ + @SaCheckPermission("oa/erp:contractPaymentStage:list") + @GetMapping("/list") + public TableDataInfo list(ErpContractPaymentStageBo bo, PageQuery pageQuery) { + return erpContractPaymentStageService.queryPageList(bo, pageQuery); + } + + /** + * 导出合同回款阶段列表 + */ + @SaCheckPermission("oa/erp:contractPaymentStage:export") + @Log(title = "合同回款阶段", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ErpContractPaymentStageBo bo, HttpServletResponse response) { + List list = erpContractPaymentStageService.queryList(bo); + ExcelUtil.exportExcel(list, "合同回款阶段", ErpContractPaymentStageVo.class, response); + } + + /** + * 获取合同回款阶段详细信息 + * + * @param contractStageId 主键 + */ + @SaCheckPermission("oa/erp:contractPaymentStage:query") + @GetMapping("/{contractStageId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("contractStageId") Long contractStageId) { + return R.ok(erpContractPaymentStageService.queryById(contractStageId)); + } + + /** + * 新增合同回款阶段 + */ + @SaCheckPermission("oa/erp:contractPaymentStage:add") + @Log(title = "合同回款阶段", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ErpContractPaymentStageBo bo) { + return toAjax(erpContractPaymentStageService.insertByBo(bo)); + } + + /** + * 修改合同回款阶段 + */ + @SaCheckPermission("oa/erp:contractPaymentStage:edit") + @Log(title = "合同回款阶段", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ErpContractPaymentStageBo bo) { + return toAjax(erpContractPaymentStageService.updateByBo(bo)); + } + + /** + * 删除合同回款阶段 + * + * @param contractStageIds 主键串 + */ + @SaCheckPermission("oa/erp:contractPaymentStage:remove") + @Log(title = "合同回款阶段", businessType = BusinessType.DELETE) + @DeleteMapping("/{contractStageIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("contractStageIds") Long[] contractStageIds) { + return toAjax(erpContractPaymentStageService.deleteWithValidByIds(List.of(contractStageIds), true)); + } + + /** + * 下拉框查询合同回款阶段列表 + */ + @GetMapping("/getErpContractPaymentStageList") + public R> getErpContractPaymentStageList(ErpContractPaymentStageBo bo) { + List list = erpContractPaymentStageService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractPaymentStage.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractPaymentStage.java new file mode 100644 index 00000000..22712b2e --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractPaymentStage.java @@ -0,0 +1,73 @@ +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.io.Serial; + +/** + * 合同回款阶段对象 erp_contract_payment_stage + * + * @author Yinq + * @date 2025-12-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("erp_contract_payment_stage") +public class ErpContractPaymentStage extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 合同回款阶段ID + */ + @TableId(value = "contract_stage_id", type = IdType.AUTO) + private Long contractStageId; + + /** + * 合同ID + */ + private Long contractId; + + /** + * 回款阶段ID + */ + private Long paymentStageId; + + /** + * 阶段名称 + */ + private String stageName; + + /** + * 回款阶段 + */ + private String collectionStage; + + /** + * 回款比例(%) + */ + private BigDecimal purchasePrice; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractPaymentStageBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractPaymentStageBo.java new file mode 100644 index 00000000..2e601861 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractPaymentStageBo.java @@ -0,0 +1,68 @@ +package org.dromara.oa.erp.domain.bo; + +import org.dromara.oa.erp.domain.ErpContractPaymentStage; +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; + +/** + * 合同回款阶段业务对象 erp_contract_payment_stage + * + * @author Yinq + * @date 2025-12-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ErpContractPaymentStage.class, reverseConvertGenerate = false) +public class ErpContractPaymentStageBo extends BaseEntity { + + /** + * 合同回款阶段ID + */ + private Long contractStageId; + + /** + * 合同ID + */ + @NotNull(message = "合同ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long contractId; + + /** + * 回款阶段ID + */ + @NotNull(message = "回款阶段ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long paymentStageId; + + /** + * 阶段名称 + */ + private String stageName; + + /** + * 回款阶段 + */ + @NotBlank(message = "回款阶段不能为空", groups = { AddGroup.class, EditGroup.class }) + private String collectionStage; + + /** + * 回款比例(%) + */ + private BigDecimal purchasePrice; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentStageVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentStageVo.java new file mode 100644 index 00000000..52f221c6 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractPaymentStageVo.java @@ -0,0 +1,82 @@ +package org.dromara.oa.erp.domain.vo; + +import java.math.BigDecimal; +import org.dromara.oa.erp.domain.ErpContractPaymentStage; +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_contract_payment_stage + * + * @author Yinq + * @date 2025-12-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ErpContractPaymentStage.class) +public class ErpContractPaymentStageVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 合同回款阶段ID + */ + @ExcelProperty(value = "合同回款阶段ID") + private Long contractStageId; + + /** + * 合同ID + */ + @ExcelProperty(value = "合同ID") + private Long contractId; + + /** + * 回款阶段ID + */ + @ExcelProperty(value = "回款阶段ID") + private Long paymentStageId; + + /** + * 阶段名称 + */ + @ExcelProperty(value = "阶段名称") + private String stageName; + + /** + * 回款阶段 + */ + @ExcelProperty(value = "回款阶段") + private String collectionStage; + + /** + * 回款比例(%) + */ + @ExcelProperty(value = "回款比例", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "%=") + private BigDecimal purchasePrice; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractPaymentStageMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractPaymentStageMapper.java new file mode 100644 index 00000000..fee612f5 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractPaymentStageMapper.java @@ -0,0 +1,38 @@ +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.ErpContractPaymentStage; +import org.dromara.oa.erp.domain.vo.ErpContractPaymentStageVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 合同回款阶段Mapper接口 + * + * @author Yinq + * @date 2025-12-11 + */ +public interface ErpContractPaymentStageMapper extends BaseMapperPlus { + + /** + * 查询合同回款阶段列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 合同回款阶段集合 + */ + public Page selectCustomErpContractPaymentStageVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询合同回款阶段列表 + * + * @param queryWrapper 条件 + * @return 合同回款阶段集合 + */ + public List selectCustomErpContractPaymentStageVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractPaymentStageService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractPaymentStageService.java new file mode 100644 index 00000000..b5e98d5f --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractPaymentStageService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.erp.service; + +import org.dromara.oa.erp.domain.ErpContractPaymentStage; +import org.dromara.oa.erp.domain.vo.ErpContractPaymentStageVo; +import org.dromara.oa.erp.domain.bo.ErpContractPaymentStageBo; +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-12-11 + */ +public interface IErpContractPaymentStageService { + + /** + * 查询合同回款阶段 + * + * @param contractStageId 主键 + * @return 合同回款阶段 + */ + ErpContractPaymentStageVo queryById(Long contractStageId); + + /** + * 分页查询合同回款阶段列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同回款阶段分页列表 + */ + TableDataInfo queryPageList(ErpContractPaymentStageBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合同回款阶段列表 + * + * @param bo 查询条件 + * @return 合同回款阶段列表 + */ + List queryList(ErpContractPaymentStageBo bo); + + /** + * 新增合同回款阶段 + * + * @param bo 合同回款阶段 + * @return 是否新增成功 + */ + Boolean insertByBo(ErpContractPaymentStageBo bo); + + /** + * 修改合同回款阶段 + * + * @param bo 合同回款阶段 + * @return 是否修改成功 + */ + Boolean updateByBo(ErpContractPaymentStageBo bo); + + /** + * 校验并批量删除合同回款阶段信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractPaymentStageServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractPaymentStageServiceImpl.java new file mode 100644 index 00000000..2bb856ee --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractPaymentStageServiceImpl.java @@ -0,0 +1,137 @@ +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.ErpContractPaymentStageBo; +import org.dromara.oa.erp.domain.vo.ErpContractPaymentStageVo; +import org.dromara.oa.erp.domain.ErpContractPaymentStage; +import org.dromara.oa.erp.mapper.ErpContractPaymentStageMapper; +import org.dromara.oa.erp.service.IErpContractPaymentStageService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 合同回款阶段Service业务层处理 + * + * @author Yinq + * @date 2025-12-11 + */ +@RequiredArgsConstructor +@Service +public class ErpContractPaymentStageServiceImpl implements IErpContractPaymentStageService { + + private final ErpContractPaymentStageMapper baseMapper; + + /** + * 查询合同回款阶段 + * + * @param contractStageId 主键 + * @return 合同回款阶段 + */ + @Override + public ErpContractPaymentStageVo queryById(Long contractStageId) { + return baseMapper.selectVoById(contractStageId); + } + + /** + * 分页查询合同回款阶段列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同回款阶段分页列表 + */ + @Override + public TableDataInfo queryPageList(ErpContractPaymentStageBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合同回款阶段列表 + * + * @param bo 查询条件 + * @return 合同回款阶段列表 + */ + @Override + public List queryList(ErpContractPaymentStageBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ErpContractPaymentStageBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractPaymentStage.class) + .selectAll(ErpContractPaymentStage.class) + .eq(ErpContractPaymentStage::getDelFlag, "0") + .eq(bo.getContractId() != null, ErpContractPaymentStage::getContractId, bo.getContractId()) + .eq(bo.getPaymentStageId() != null, ErpContractPaymentStage::getPaymentStageId, bo.getPaymentStageId()) + .like(StringUtils.isNotBlank(bo.getStageName()), ErpContractPaymentStage::getStageName, bo.getStageName()) + .eq(StringUtils.isNotBlank(bo.getCollectionStage()), ErpContractPaymentStage::getCollectionStage, bo.getCollectionStage()) + .eq(bo.getPurchasePrice() != null, ErpContractPaymentStage::getPurchasePrice, bo.getPurchasePrice()) + .eq(bo.getSortOrder() != null, ErpContractPaymentStage::getSortOrder, bo.getSortOrder()); + return lqw; + } + + /** + * 新增合同回款阶段 + * + * @param bo 合同回款阶段 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ErpContractPaymentStageBo bo) { + ErpContractPaymentStage add = MapstructUtils.convert(bo, ErpContractPaymentStage.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setContractStageId(add.getContractStageId()); + } + return flag; + } + + /** + * 修改合同回款阶段 + * + * @param bo 合同回款阶段 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ErpContractPaymentStageBo bo) { + ErpContractPaymentStage update = MapstructUtils.convert(bo, ErpContractPaymentStage.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ErpContractPaymentStage entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除合同回款阶段信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/base/BasePaymentStageMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/base/BasePaymentStageMapper.xml new file mode 100644 index 00000000..d3bd0032 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/base/BasePaymentStageMapper.xml @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentStageMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentStageMapper.xml new file mode 100644 index 00000000..40d594ab --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractPaymentStageMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + +