瀏覽代碼

申购单

24282 1 年之前
父節點
當前提交
01ab100375
共有 20 個文件被更改,包括 890 次插入0 次删除
  1. 46 0
      sd-business/src/main/java/com/sd/business/controller/apply/ApplyBuyController.java
  2. 17 0
      sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyBomDto.java
  3. 17 0
      sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyBomSelectDto.java
  4. 25 0
      sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyDto.java
  5. 27 0
      sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuySelectDto.java
  6. 53 0
      sd-business/src/main/java/com/sd/business/entity/apply/po/ApplyBuy.java
  7. 43 0
      sd-business/src/main/java/com/sd/business/entity/apply/po/ApplyBuyBom.java
  8. 49 0
      sd-business/src/main/java/com/sd/business/entity/apply/vo/ApplyBuyBomVo.java
  9. 24 0
      sd-business/src/main/java/com/sd/business/entity/apply/vo/ApplyBuyVo.java
  10. 112 0
      sd-business/src/main/java/com/sd/business/flow/ApplyFlow.java
  11. 17 0
      sd-business/src/main/java/com/sd/business/mapper/apply/ApplyBuyBomMapper.java
  12. 26 0
      sd-business/src/main/java/com/sd/business/mapper/apply/ApplyBuyMapper.java
  13. 17 0
      sd-business/src/main/java/com/sd/business/service/apply/ApplyBuyBomService.java
  14. 30 0
      sd-business/src/main/java/com/sd/business/service/apply/ApplyBuyService.java
  15. 21 0
      sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyBomServiceImpl.java
  16. 89 0
      sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyServiceImpl.java
  17. 97 0
      sd-business/src/main/java/com/sd/business/util/CodeEnum.java
  18. 4 0
      sd-business/src/main/resources/mapper/apply/ApplyBuyBomMapper.xml
  19. 20 0
      sd-business/src/main/resources/mapper/apply/ApplyBuyMapper.xml
  20. 156 0
      sd-framework/src/main/java/com/sd/framework/util/Assert.java

+ 46 - 0
sd-business/src/main/java/com/sd/business/controller/apply/ApplyBuyController.java

@@ -0,0 +1,46 @@
+package com.sd.business.controller.apply;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.sd.business.entity.apply.dto.ApplyBuySelectDto;
+import com.sd.business.entity.apply.vo.ApplyBuyVo;
+import com.sd.business.service.apply.ApplyBuyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 申购单 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@RestController
+@RequestMapping("/applyBuy")
+public class ApplyBuyController {
+
+    @Autowired
+    private ApplyBuyService applyBuyService;
+
+    /**
+     * 申购单分页
+     */
+    @PostMapping("/page")
+    public Page<ApplyBuyVo> page(@RequestBody ApplyBuySelectDto dto) {
+        return applyBuyService.getPage(dto);
+    }
+
+    /**
+     * 申购单明细
+     */
+    @PostMapping("/detail")
+    public ApplyBuyVo detail(@RequestBody BaseSelectDto dto) {
+        return applyBuyService.detail(dto.getId());
+    }
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyBomDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.apply.dto;
+
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 申购单bom新增编辑入参实体
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+public class ApplyBuyBomDto extends ApplyBuyBom {
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyBomSelectDto.java

@@ -0,0 +1,17 @@
+package com.sd.business.entity.apply.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 申购单bom列表查询入参实体
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+public class ApplyBuyBomSelectDto extends BaseSelectDto {
+
+}

+ 25 - 0
sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuyDto.java

@@ -0,0 +1,25 @@
+package com.sd.business.entity.apply.dto;
+
+import com.sd.business.entity.apply.po.ApplyBuy;
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 申购单新增编辑入参实体
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+public class ApplyBuyDto extends ApplyBuy {
+
+    /**
+     * 申购bom
+     */
+    private List<ApplyBuyBom> applyBuyBomList;
+
+}

+ 27 - 0
sd-business/src/main/java/com/sd/business/entity/apply/dto/ApplyBuySelectDto.java

@@ -0,0 +1,27 @@
+package com.sd.business.entity.apply.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 申购单列表查询入参实体
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+public class ApplyBuySelectDto extends BaseSelectDto {
+
+    /**
+     * 申购单号
+     */
+    private String code;
+
+    /**
+     * 流程状态 -1草稿  0未发起 1进行中 2已通过 3已驳回
+     */
+    private Integer flowStatus;
+
+}

+ 53 - 0
sd-business/src/main/java/com/sd/business/entity/apply/po/ApplyBuy.java

@@ -0,0 +1,53 @@
+package com.sd.business.entity.apply.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 申购单
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+@TableName("apply_buy")
+public class ApplyBuy extends BasePo {
+
+    /**
+     * 申购单号
+     */
+    private String code;
+
+    /**
+     * 申购人
+     */
+    private String applyName;
+
+    /**
+     * 申购时间
+     */
+    private Date applyTime;
+
+    /**
+     * 申购说明
+     */
+    private String remark;
+
+    /**
+     * 流程id
+     */
+    private Long flowId;
+
+    /**
+     * 流程状态 -1草稿  0未发起 1进行中 2已通过 3已驳回
+     */
+    private Integer flowStatus;
+
+}

+ 43 - 0
sd-business/src/main/java/com/sd/business/entity/apply/po/ApplyBuyBom.java

@@ -0,0 +1,43 @@
+package com.sd.business.entity.apply.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 申购单bom
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+@TableName("apply_buy_bom")
+public class ApplyBuyBom extends BasePo {
+
+    /**
+     * 申购单id
+     */
+    private Long applyBuyId;
+
+    /**
+     * bom规格id
+     */
+    private Long bomSpecId;
+
+    /**
+     * 申购数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 采购数量
+     */
+    private BigDecimal purchaseQuantity;
+
+}

+ 49 - 0
sd-business/src/main/java/com/sd/business/entity/apply/vo/ApplyBuyBomVo.java

@@ -0,0 +1,49 @@
+package com.sd.business.entity.apply.vo;
+
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 申购单bom列表查询返回值实体
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+public class ApplyBuyBomVo extends ApplyBuyBom {
+
+    /**
+     * 品号
+     */
+    private String bomSpecCode;
+
+    /**
+     * 品名
+     */
+    private String bomSpecName;
+
+    /**
+     * 颜色
+     */
+    private String bomSpecColour;
+
+    /**
+     * 长 cm
+     */
+    private BigDecimal bomSpecLength;
+
+    /**
+     * 宽 cm
+     */
+    private BigDecimal bomSpecWidth;
+
+    /**
+     * 高 cm
+     */
+    private BigDecimal bomSpecHeight;
+
+}

+ 24 - 0
sd-business/src/main/java/com/sd/business/entity/apply/vo/ApplyBuyVo.java

@@ -0,0 +1,24 @@
+package com.sd.business.entity.apply.vo;
+
+import com.sd.business.entity.apply.po.ApplyBuy;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 申购单列表查询返回值实体
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Getter
+@Setter
+public class ApplyBuyVo extends ApplyBuy {
+
+    /**
+     * 申购明细
+     */
+    private List<ApplyBuyBomVo> applyBuyBomVoList;
+
+}

+ 112 - 0
sd-business/src/main/java/com/sd/business/flow/ApplyFlow.java

@@ -0,0 +1,112 @@
+package com.sd.business.flow;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.flow.core.FlowThreadLocalUtil;
+import com.fjhx.flow.enums.FlowStatusEnum;
+import com.fjhx.flow.enums.HandleTypeEnum;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.sd.business.entity.apply.dto.ApplyBuyDto;
+import com.sd.business.entity.apply.po.ApplyBuy;
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+import com.sd.business.service.apply.ApplyBuyBomService;
+import com.sd.business.service.apply.ApplyBuyService;
+import com.sd.business.util.CodeEnum;
+import com.sd.framework.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 发起申购流程
+ */
+@Service
+public class ApplyFlow extends FlowDelegate {
+
+    @Autowired
+    private ApplyBuyService applyBuyService;
+
+    @Autowired
+    private ApplyBuyBomService applyBuyBomService;
+
+    @Override
+    public String getFlowKey() {
+        return "apply_buy";
+    }
+
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        ApplyBuyDto applyBuyDto = submitData.toJavaObject(ApplyBuyDto.class);
+        validated(applyBuyDto);
+
+        Long applyBuyId = IdWorker.getId();
+
+        applyBuyDto.setId(applyBuyId);
+        applyBuyDto.setCode(CodeEnum.APPLY_BUY_CODE.getCode());
+        applyBuyDto.setFlowId(flowId);
+        applyBuyDto.setFlowStatus(FlowStatusEnum.IN_PROGRESS.getKey());
+
+        List<ApplyBuyBom> applyBuyBomList = applyBuyDto.getApplyBuyBomList();
+        for (ApplyBuyBom applyBuyBom : applyBuyBomList) {
+            applyBuyBom.setApplyBuyId(applyBuyId);
+            applyBuyBom.setPurchaseQuantity(BigDecimal.ZERO);
+        }
+
+        applyBuyService.save(applyBuyDto);
+        applyBuyBomService.saveBatch(applyBuyBomList);
+
+        return applyBuyId;
+    }
+
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+
+        applyBuyService.update(q -> q
+                .eq(BaseIdPo::getId, businessId)
+                .set(ApplyBuy::getFlowStatus, FlowStatusEnum.PASS.getKey())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+
+    }
+
+    public void jump() {
+
+        // 如果是驳回,修改状态为驳回
+        if (HandleTypeEnum.REJECT.equals(FlowThreadLocalUtil.getHandleTypeEnum())) {
+            applyBuyService.update(q -> q
+                    .eq(BaseIdPo::getId, FlowThreadLocalUtil.getBusinessId())
+                    .set(ApplyBuy::getFlowStatus, FlowStatusEnum.REJECT.getKey())
+                    .set(BasePo::getUpdateTime, new Date())
+                    .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+            );
+        }
+
+    }
+
+    /**
+     * 验证数据
+     */
+    private void validated(ApplyBuyDto applyBuyDto) {
+
+        Assert.notBlank(applyBuyDto.getApplyName(), "申购人不能为空");
+        Assert.notEmpty(applyBuyDto.getApplyTime(), "申购时间不能为空");
+
+        List<ApplyBuyBom> applyBuyBomList = applyBuyDto.getApplyBuyBomList();
+        Assert.notEmpty(applyBuyBomList, "申购清单不能为空");
+
+        for (ApplyBuyBom applyBuyBom : applyBuyBomList) {
+            Assert.notNull(applyBuyBom.getBomSpecId(), "bomId不能为空");
+            Assert.notNull(applyBuyBom.getQuantity(), "申购数量不能为空");
+            Assert.gtZero(applyBuyBom.getQuantity(), "申购数量必须大于0");
+        }
+
+    }
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/mapper/apply/ApplyBuyBomMapper.java

@@ -0,0 +1,17 @@
+package com.sd.business.mapper.apply;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+
+
+/**
+ * <p>
+ * 申购单bom Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+public interface ApplyBuyBomMapper extends BaseMapper<ApplyBuyBom> {
+
+}

+ 26 - 0
sd-business/src/main/java/com/sd/business/mapper/apply/ApplyBuyMapper.java

@@ -0,0 +1,26 @@
+package com.sd.business.mapper.apply;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.apply.po.ApplyBuy;
+import com.sd.business.entity.apply.vo.ApplyBuyVo;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 申购单 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+public interface ApplyBuyMapper extends BaseMapper<ApplyBuy> {
+
+    /**
+     * 申购单分页
+     */
+    Page<ApplyBuyVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ApplyBuy> wrapper);
+
+}

+ 17 - 0
sd-business/src/main/java/com/sd/business/service/apply/ApplyBuyBomService.java

@@ -0,0 +1,17 @@
+package com.sd.business.service.apply;
+
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+
+
+/**
+ * <p>
+ * 申购单bom 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+public interface ApplyBuyBomService extends BaseService<ApplyBuyBom> {
+
+}

+ 30 - 0
sd-business/src/main/java/com/sd/business/service/apply/ApplyBuyService.java

@@ -0,0 +1,30 @@
+package com.sd.business.service.apply;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.service.BaseService;
+import com.sd.business.entity.apply.dto.ApplyBuySelectDto;
+import com.sd.business.entity.apply.po.ApplyBuy;
+import com.sd.business.entity.apply.vo.ApplyBuyVo;
+
+
+/**
+ * <p>
+ * 申购单 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+public interface ApplyBuyService extends BaseService<ApplyBuy> {
+
+    /**
+     * 申购单分页
+     */
+    Page<ApplyBuyVo> getPage(ApplyBuySelectDto dto);
+
+    /**
+     * 申购单明细
+     */
+    ApplyBuyVo detail(Long id);
+
+}

+ 21 - 0
sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyBomServiceImpl.java

@@ -0,0 +1,21 @@
+package com.sd.business.service.apply.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+import com.sd.business.mapper.apply.ApplyBuyBomMapper;
+import com.sd.business.service.apply.ApplyBuyBomService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 申购单bom 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Service
+public class ApplyBuyBomServiceImpl extends ServiceImpl<ApplyBuyBomMapper, ApplyBuyBom> implements ApplyBuyBomService {
+
+}

+ 89 - 0
sd-business/src/main/java/com/sd/business/service/apply/impl/ApplyBuyServiceImpl.java

@@ -0,0 +1,89 @@
+package com.sd.business.service.apply.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.sd.business.entity.apply.dto.ApplyBuySelectDto;
+import com.sd.business.entity.apply.po.ApplyBuy;
+import com.sd.business.entity.apply.po.ApplyBuyBom;
+import com.sd.business.entity.apply.vo.ApplyBuyBomVo;
+import com.sd.business.entity.apply.vo.ApplyBuyVo;
+import com.sd.business.mapper.apply.ApplyBuyMapper;
+import com.sd.business.service.apply.ApplyBuyBomService;
+import com.sd.business.service.apply.ApplyBuyService;
+import com.sd.business.service.bom.BomSpecService;
+import com.sd.framework.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 申购单 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-06-30
+ */
+@Service
+public class ApplyBuyServiceImpl extends ServiceImpl<ApplyBuyMapper, ApplyBuy> implements ApplyBuyService {
+
+    @Autowired
+    private ApplyBuyBomService applyBuyBomService;
+
+    @Autowired
+    private BomSpecService bomSpecService;
+
+    @Override
+    public Page<ApplyBuyVo> getPage(ApplyBuySelectDto dto) {
+
+        IWrapper<ApplyBuy> wrapper = getWrapper();
+        wrapper.orderByDesc("ab", ApplyBuy::getId);
+
+        // 申购单号
+        wrapper.like("ab", ApplyBuy::getCode, dto.getCode());
+        // 状态
+        wrapper.eq("ab", ApplyBuy::getFlowStatus, dto.getFlowStatus());
+        // 申购开始时间
+        wrapper.ge("ab", ApplyBuy::getApplyTime, dto.getBeginTime());
+        // 申购结束时间
+        wrapper.le("ab", ApplyBuy::getApplyTime, dto.getEndTime());
+
+        Page<ApplyBuyVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public ApplyBuyVo detail(Long id) {
+        Assert.notNull(id, "申购单id不能为空");
+
+        // 申购单
+        ApplyBuy ApplyBuy = this.getById(id);
+        Assert.notNull(ApplyBuy, "没有找到申购单");
+
+        // 申购明细
+        List<ApplyBuyBom> list = applyBuyBomService.list(q -> q.eq(ApplyBuyBom::getApplyBuyId, id));
+        List<ApplyBuyBomVo> applyBuyBomVoList = BeanUtil.copyToList(list, ApplyBuyBomVo.class);
+
+        // 赋值bom规格
+        bomSpecService.attributeAssign(applyBuyBomVoList, ApplyBuyBom::getBomSpecId, (item, bomSpec) -> {
+            item.setBomSpecCode(bomSpec.getCode());
+            item.setBomSpecName(bomSpec.getName());
+            item.setBomSpecColour(bomSpec.getColour());
+            item.setBomSpecLength(bomSpec.getLength());
+            item.setBomSpecWidth(bomSpec.getWidth());
+            item.setBomSpecHeight(bomSpec.getHeight());
+        });
+
+        // TODO 库存,在途数量,近30天消耗量,近30天入库量,安全库存 未赋值
+
+        // 赋值返回值
+        ApplyBuyVo result = BeanUtil.toBean(ApplyBuy, ApplyBuyVo.class);
+        result.setApplyBuyBomVoList(applyBuyBomVoList);
+        return result;
+    }
+
+}

+ 97 - 0
sd-business/src/main/java/com/sd/business/util/CodeEnum.java

@@ -0,0 +1,97 @@
+package com.sd.business.util;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.exception.ServiceException;
+import com.sd.business.service.apply.ApplyBuyService;
+import lombok.Getter;
+
+import java.util.Date;
+import java.util.Map;
+
+@Getter
+public enum CodeEnum {
+
+    // 申购编号
+    APPLY_BUY_CODE("PA", "-yyMMdd-", "code", 6, ApplyBuyService.class),
+    ;
+
+    // 编码前缀
+    private final String prefix;
+    // 编码加日期规则
+    private final String dateFormat;
+    // 长度
+    private final Integer length;
+    // 编码字段名
+    private final String codeFieldName;
+    // service
+    private final IService<?> service;
+    CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
+        this.prefix = prefix;
+        this.dateFormat = dateFormat;
+        this.length = length;
+        this.codeFieldName = codeFieldName;
+        this.service = SpringUtil.getBean(serviceCls);
+    }
+
+    /**
+     * 不够位数的在前面补0,保留num的长度位数字
+     */
+    private static String autoGenericCode(int length, Integer codeNum) {
+        return String.format("%0" + length + "d", codeNum + 1);
+    }
+
+    // /**
+    //  * 获取键值对
+    //  */
+    // public String getCode(String code) {
+    //     if (ObjectUtil.isNotEmpty(code)) {
+    //         Long count = service.query().eq(codeFieldName, code).count();
+    //         if (count != 0) {
+    //             throw new ServiceException("编码已存在");
+    //         }
+    //         return code;
+    //     } else {
+    //         return getCode();
+    //     }
+    // }
+
+    /**
+     * 获取键值对
+     */
+    public String getCode() {
+        String itemPrefix;
+
+        if (ObjectUtil.isNotEmpty(dateFormat)) {
+            Date date = new Date();
+            String format = DateUtil.format(date, dateFormat);
+            itemPrefix = prefix + format;
+        } else {
+            itemPrefix = prefix;
+        }
+
+        Object obj = service.query()
+                .likeRight(codeFieldName, itemPrefix)
+                .orderByDesc(codeFieldName)
+                .last("limit 1")
+                .one();
+
+        if (obj == null) {
+            return itemPrefix + autoGenericCode(length, 0);
+        }
+
+        Map<String, Object> map = Convert.toMap(String.class, Object.class, obj);
+        String code = Convert.toStr(map.get(CharSequenceUtil.toCamelCase(codeFieldName)));
+        Integer codeNum = Convert.toInt(code.substring(itemPrefix.length()));
+        if (ObjectUtil.isEmpty(codeNum)) {
+            throw new ServiceException("自定义编码与系统编码生成规则冲突,暂时无法生成编码,请联系管理员");
+        }
+
+        return itemPrefix + autoGenericCode(length, codeNum);
+    }
+
+}

+ 4 - 0
sd-business/src/main/resources/mapper/apply/ApplyBuyBomMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.apply.ApplyBuyBomMapper">
+</mapper>

+ 20 - 0
sd-business/src/main/resources/mapper/apply/ApplyBuyMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sd.business.mapper.apply.ApplyBuyMapper">
+    <select id="getPage" resultType="com.sd.business.entity.apply.vo.ApplyBuyVo">
+        select ab.id,
+               ab.code,
+               ab.apply_name,
+               ab.apply_time,
+               ab.remark,
+               ab.flow_id,
+               ab.flow_status,
+               ab.create_user,
+               ab.create_time,
+               ab.update_user,
+               ab.update_time
+        from apply_buy ab
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 156 - 0
sd-framework/src/main/java/com/sd/framework/util/Assert.java

@@ -0,0 +1,156 @@
+package com.sd.framework.util;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.ruoyi.common.exception.ServiceException;
+
+import java.math.BigDecimal;
+
+public class Assert {
+
+    /**
+     * 断言为空
+     *
+     * @param obj    参数
+     * @param errStr 异常提示
+     */
+    public static void empty(Object obj, String errStr) {
+        if (ObjectUtil.isNotEmpty(obj)) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言不为空
+     *
+     * @param obj    参数
+     * @param errStr 异常提示
+     */
+    public static void notEmpty(Object obj, String errStr) {
+        if (ObjectUtil.isEmpty(obj)) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言不为空
+     *
+     * @param obj    参数
+     * @param errStr 异常提示
+     */
+    public static void notNull(Object obj, String errStr) {
+        if (ObjectUtil.isNull(obj)) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言不为空
+     *
+     * @param str    参数
+     * @param errStr 异常提示
+     */
+    public static void notBlank(String str, String errStr) {
+        if (StrUtil.isBlank(str)) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言为0
+     *
+     * @param integer 参数
+     * @param errStr  异常提示
+     */
+    public static void eqZero(Integer integer, String errStr) {
+        if (integer != 0) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言为0
+     *
+     * @param integer 参数
+     * @param errStr  异常提示
+     */
+    public static void eqZero(Long integer, String errStr) {
+        if (integer != 0) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言为1
+     *
+     * @param along  参数
+     * @param errStr 异常提示
+     */
+    public static void eqOne(Long along, String errStr) {
+        if (along != 1) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言为1
+     *
+     * @param integer 参数
+     * @param errStr  异常提示
+     */
+    public static void eqOne(Integer integer, String errStr) {
+        if (integer != 1) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言为真
+     *
+     * @param flag   参数
+     * @param errStr 异常提示
+     */
+    public static void eqTrue(Boolean flag, String errStr) {
+        if (flag == null || flag.equals(false)) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言大于0
+     *
+     * @param bigDecimal 参数
+     * @param errStr     异常提示
+     */
+    public static void gtZero(BigDecimal bigDecimal, String errStr) {
+        if (bigDecimal == null || BigDecimal.ZERO.compareTo(bigDecimal) > 0) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言大于等于0
+     *
+     * @param bigDecimal 参数
+     * @param errStr     异常提示
+     */
+    public static void geZero(BigDecimal bigDecimal, String errStr) {
+        if (bigDecimal == null || BigDecimal.ZERO.compareTo(bigDecimal) >= 0) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+    /**
+     * 断言大于0
+     *
+     * @param integer 参数
+     * @param errStr  异常提示
+     */
+    public static void gtZero(Integer integer, String errStr) {
+        if (integer == null || integer <= 0) {
+            throw new ServiceException(errStr);
+        }
+    }
+
+}