物资需求计划

This commit is contained in:
2025-08-02 18:00:48 +08:00
parent 9212fb31a7
commit 9cc4ce105e
9 changed files with 721 additions and 4 deletions

View File

@ -76,7 +76,7 @@ public class BusCailiaoshebeiController extends BaseController {
*/ */
@SaCheckPermission("cailiaoshebei:cailiaoshebei:pcDelete") @SaCheckPermission("cailiaoshebei:cailiaoshebei:pcDelete")
@Log(title = "设计-删除批次号", businessType = BusinessType.DELETE) @Log(title = "设计-删除批次号", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/pcDelete/{ids}")
public R<Void> pcDelete(@NotEmpty(message = "主键不能为空") public R<Void> pcDelete(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(busCailiaoshebeiPiciService.deleteWithValidByIds(List.of(ids), true)); return toAjax(busCailiaoshebeiPiciService.deleteWithValidByIds(List.of(ids), true));
@ -133,7 +133,7 @@ public class BusCailiaoshebeiController extends BaseController {
*/ */
@SaCheckPermission("cailiaoshebei:cailiaoshebei:remove") @SaCheckPermission("cailiaoshebei:cailiaoshebei:remove")
@Log(title = "物资-材料设备", businessType = BusinessType.DELETE) @Log(title = "物资-材料设备", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/remove/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(busCailiaoshebeiService.deleteWithValidByIds(List.of(ids), true)); return toAjax(busCailiaoshebeiService.deleteWithValidByIds(List.of(ids), true));
@ -177,7 +177,7 @@ public class BusCailiaoshebeiController extends BaseController {
*/ */
@SaCheckPermission("cailiaoshebei:cailiaoshebei:deletePlan") @SaCheckPermission("cailiaoshebei:cailiaoshebei:deletePlan")
@Log(title = "计划-删除批次号", businessType = BusinessType.DELETE) @Log(title = "计划-删除批次号", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}") @DeleteMapping("/deletePlan/{ids}")
public R<Void> deletePlan(@NotEmpty(message = "主键不能为空") public R<Void> deletePlan(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(busCailiaoshebeiPiciService.deleteWithValidByIds(List.of(ids), true)); return toAjax(busCailiaoshebeiPiciService.deleteWithValidByIds(List.of(ids), true));

View File

@ -0,0 +1,116 @@
package org.dromara.cailiaoshebei.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.cailiaoshebei.domain.vo.BusMaterialsorderVo;
import org.dromara.cailiaoshebei.domain.bo.BusMaterialsorderBo;
import org.dromara.cailiaoshebei.service.IBusMaterialsorderService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 物资-设备订货
*
* @author Lion Li
* @date 2025-08-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/cailiaoshebei/materialsorder")
public class BusMaterialsorderController extends BaseController {
private final IBusMaterialsorderService busMaterialsorderService;
/**
* 新增物资-设备订货
*/
@SaCheckPermission("cailiaoshebei:materialsorder:add")
@Log(title = "物资-设备订货", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusMaterialsorderBo bo) {
return toAjax(busMaterialsorderService.insertByBo(bo));
}
// /**
// * 查询物资-设备订货列表
// */
// @SaCheckPermission("cailiaoshebei:materialsorder:list")
// @GetMapping("/list")
// public TableDataInfo<BusMaterialsorderVo> list(BusMaterialsorderBo bo, PageQuery pageQuery) {
// return busMaterialsorderService.queryPageList(bo, pageQuery);
// }
//
// /**
// * 导出物资-设备订货列表
// */
// @SaCheckPermission("cailiaoshebei:materialsorder:export")
// @Log(title = "物资-设备订货", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(BusMaterialsorderBo bo, HttpServletResponse response) {
// List<BusMaterialsorderVo> list = busMaterialsorderService.queryList(bo);
// ExcelUtil.exportExcel(list, "物资-设备订货", BusMaterialsorderVo.class, response);
// }
//
// /**
// * 获取物资-设备订货详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("cailiaoshebei:materialsorder:query")
// @GetMapping("/{id}")
// public R<BusMaterialsorderVo> getInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(busMaterialsorderService.queryById(id));
// }
//
// /**
// * 新增物资-设备订货
// */
// @SaCheckPermission("cailiaoshebei:materialsorder:add")
// @Log(title = "物资-设备订货", businessType = BusinessType.INSERT)
// @RepeatSubmit()
// @PostMapping()
// public R<Void> add(@Validated(AddGroup.class) @RequestBody BusMaterialsorderBo bo) {
// return toAjax(busMaterialsorderService.insertByBo(bo));
// }
//
// /**
// * 修改物资-设备订货
// */
// @SaCheckPermission("cailiaoshebei:materialsorder:edit")
// @Log(title = "物资-设备订货", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusMaterialsorderBo bo) {
// return toAjax(busMaterialsorderService.updateByBo(bo));
// }
//
// /**
// * 删除物资-设备订货
// *
// * @param ids 主键串
// */
// @SaCheckPermission("cailiaoshebei:materialsorder:remove")
// @Log(title = "物资-设备订货", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public R<Void> remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return toAjax(busMaterialsorderService.deleteWithValidByIds(List.of(ids), true));
// }
}

View File

@ -0,0 +1,103 @@
package org.dromara.cailiaoshebei.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 物资-设备订货对象 bus_materialsorder
*
* @author Lion Li
* @date 2025-08-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_materialsorder")
public class BusMaterialsorder extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 批次ID
*/
private String batchId;
/**
* 项目ID
*/
private Long projectId;
/**
* 材料设备ID
*/
private Long cailiaoshebeiId;
/**
* 物资清单ID
*/
private Long suppliespriceId;
/**
* 物料编码
*/
private String materialCode;
/**
* 设备材料名称
*/
private String name;
/**
* 计量单位
*/
private String unit;
/**
* 规格型号
*/
private String specification;
/**
* 需求数量
*/
private Long demandQuantity;
/**
* 计划到场时间
*/
private Date arrivalTime;
/**
* 订货数量
*/
private Long orderQuantity;
/**
* 预计到货时间
*/
private Date expectedArrival;
/**
* 预计生产完成时间
*/
private Date productionTime;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,102 @@
package org.dromara.cailiaoshebei.domain.bo;
import org.dromara.cailiaoshebei.domain.BusMaterialsorder;
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.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 物资-设备订货业务对象 bus_materialsorder
*
* @author Lion Li
* @date 2025-08-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = BusMaterialsorder.class, reverseConvertGenerate = false)
public class BusMaterialsorderBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 批次ID
*/
private String batchId;
/**
* 项目ID
*/
private Long projectId;
/**
* 材料设备ID
*/
private Long cailiaoshebeiId;
/**
* 物资清单ID
*/
private Long suppliespriceId;
/**
* 物料编码
*/
private String materialCode;
/**
* 设备材料名称
*/
private String name;
/**
* 计量单位
*/
private String unit;
/**
* 规格型号
*/
private String specification;
/**
* 需求数量
*/
private Long demandQuantity;
/**
* 计划到场时间
*/
private Date arrivalTime;
/**
* 订货数量
*/
private Long orderQuantity;
/**
* 预计到货时间
*/
private Date expectedArrival;
/**
* 预计生产完成时间
*/
private Date productionTime;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,124 @@
package org.dromara.cailiaoshebei.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.cailiaoshebei.domain.BusMaterialsorder;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.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;
/**
* 物资-设备订货视图对象 bus_materialsorder
*
* @author Lion Li
* @date 2025-08-02
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusMaterialsorder.class)
public class BusMaterialsorderVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 批次ID
*/
@ExcelProperty(value = "批次ID")
private String batchId;
/**
* 项目ID
*/
@ExcelProperty(value = "项目ID")
private Long projectId;
/**
* 材料设备ID
*/
@ExcelProperty(value = "材料设备ID")
private Long cailiaoshebeiId;
/**
* 物资清单ID
*/
@ExcelProperty(value = "物资清单ID")
private Long suppliespriceId;
/**
* 物料编码
*/
@ExcelProperty(value = "物料编码")
private String materialCode;
/**
* 设备材料名称
*/
@ExcelProperty(value = "设备材料名称")
private String name;
/**
* 计量单位
*/
@ExcelProperty(value = "计量单位")
private String unit;
/**
* 规格型号
*/
@ExcelProperty(value = "规格型号")
private String specification;
/**
* 需求数量
*/
@ExcelProperty(value = "需求数量")
private Long demandQuantity;
/**
* 计划到场时间
*/
@ExcelProperty(value = "计划到场时间")
private Date arrivalTime;
/**
* 订货数量
*/
@ExcelProperty(value = "订货数量")
private Long orderQuantity;
/**
* 预计到货时间
*/
@ExcelProperty(value = "预计到货时间")
private Date expectedArrival;
/**
* 预计生产完成时间
*/
@ExcelProperty(value = "预计生产完成时间")
private Date productionTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,15 @@
package org.dromara.cailiaoshebei.mapper;
import org.dromara.cailiaoshebei.domain.BusMaterialsorder;
import org.dromara.cailiaoshebei.domain.vo.BusMaterialsorderVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 物资-设备订货Mapper接口
*
* @author Lion Li
* @date 2025-08-02
*/
public interface BusMaterialsorderMapper extends BaseMapperPlus<BusMaterialsorder, BusMaterialsorderVo> {
}

View File

@ -0,0 +1,79 @@
package org.dromara.cailiaoshebei.service;
import org.dromara.cailiaoshebei.domain.vo.BusMaterialsorderVo;
import org.dromara.cailiaoshebei.domain.bo.BusMaterialsorderBo;
import org.dromara.cailiaoshebei.domain.BusMaterialsorder;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 物资-设备订货Service接口
*
* @author Lion Li
* @date 2025-08-02
*/
public interface IBusMaterialsorderService extends IService<BusMaterialsorder>{
/**
* 查询物资-设备订货
*
* @param id 主键
* @return 物资-设备订货
*/
BusMaterialsorderVo queryById(Long id);
/**
* 分页查询物资-设备订货列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 物资-设备订货分页列表
*/
TableDataInfo<BusMaterialsorderVo> queryPageList(BusMaterialsorderBo bo, PageQuery pageQuery);
/**
* 查询符合条件的物资-设备订货列表
*
* @param bo 查询条件
* @return 物资-设备订货列表
*/
List<BusMaterialsorderVo> queryList(BusMaterialsorderBo bo);
/**
* 新增物资-设备订货
*
* @param bo 物资-设备订货
* @return 是否新增成功
*/
Boolean insertByBo(BusMaterialsorderBo bo);
/**
* 修改物资-设备订货
*
* @param bo 物资-设备订货
* @return 是否修改成功
*/
Boolean updateByBo(BusMaterialsorderBo bo);
/**
* 校验并批量删除物资-设备订货信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 通过批次号获取到主数据的所有供应商,然后分成不同订单存储
*
* @param batchNumber 批次号
* @return 是否新增成功
*/
Boolean extractDataNewAddition(String batchNumber,Long projectId);
}

View File

@ -0,0 +1,171 @@
package org.dromara.cailiaoshebei.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.cailiaoshebei.domain.BusCailiaoshebeiPici;
import org.dromara.cailiaoshebei.service.IBusCailiaoshebeiPiciService;
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.springframework.stereotype.Service;
import org.dromara.cailiaoshebei.domain.bo.BusMaterialsorderBo;
import org.dromara.cailiaoshebei.domain.vo.BusMaterialsorderVo;
import org.dromara.cailiaoshebei.domain.BusMaterialsorder;
import org.dromara.cailiaoshebei.mapper.BusMaterialsorderMapper;
import org.dromara.cailiaoshebei.service.IBusMaterialsorderService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 物资-设备订货Service业务层处理
*
* @author Lion Li
* @date 2025-08-02
*/
@RequiredArgsConstructor
@Service
public class BusMaterialsorderServiceImpl extends ServiceImpl<BusMaterialsorderMapper, BusMaterialsorder> implements IBusMaterialsorderService {
private final BusMaterialsorderMapper baseMapper;
private final IBusCailiaoshebeiPiciService busCailiaoshebeiPiciService;
/**
* 查询物资-设备订货
*
* @param id 主键
* @return 物资-设备订货
*/
@Override
public BusMaterialsorderVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询物资-设备订货列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 物资-设备订货分页列表
*/
@Override
public TableDataInfo<BusMaterialsorderVo> queryPageList(BusMaterialsorderBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<BusMaterialsorder> lqw = buildQueryWrapper(bo);
Page<BusMaterialsorderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的物资-设备订货列表
*
* @param bo 查询条件
* @return 物资-设备订货列表
*/
@Override
public List<BusMaterialsorderVo> queryList(BusMaterialsorderBo bo) {
LambdaQueryWrapper<BusMaterialsorder> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<BusMaterialsorder> buildQueryWrapper(BusMaterialsorderBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<BusMaterialsorder> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(BusMaterialsorder::getId);
lqw.eq(StringUtils.isNotBlank(bo.getBatchId()), BusMaterialsorder::getBatchId, bo.getBatchId());
lqw.eq(bo.getProjectId() != null, BusMaterialsorder::getProjectId, bo.getProjectId());
lqw.eq(bo.getCailiaoshebeiId() != null, BusMaterialsorder::getCailiaoshebeiId, bo.getCailiaoshebeiId());
lqw.eq(bo.getSuppliespriceId() != null, BusMaterialsorder::getSuppliespriceId, bo.getSuppliespriceId());
lqw.eq(StringUtils.isNotBlank(bo.getMaterialCode()), BusMaterialsorder::getMaterialCode, bo.getMaterialCode());
lqw.like(StringUtils.isNotBlank(bo.getName()), BusMaterialsorder::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), BusMaterialsorder::getUnit, bo.getUnit());
lqw.eq(StringUtils.isNotBlank(bo.getSpecification()), BusMaterialsorder::getSpecification, bo.getSpecification());
lqw.eq(bo.getDemandQuantity() != null, BusMaterialsorder::getDemandQuantity, bo.getDemandQuantity());
lqw.eq(bo.getArrivalTime() != null, BusMaterialsorder::getArrivalTime, bo.getArrivalTime());
lqw.eq(bo.getOrderQuantity() != null, BusMaterialsorder::getOrderQuantity, bo.getOrderQuantity());
lqw.eq(bo.getExpectedArrival() != null, BusMaterialsorder::getExpectedArrival, bo.getExpectedArrival());
lqw.eq(bo.getProductionTime() != null, BusMaterialsorder::getProductionTime, bo.getProductionTime());
return lqw;
}
/**
* 新增物资-设备订货
*
* @param bo 物资-设备订货
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(BusMaterialsorderBo bo) {
BusMaterialsorder add = MapstructUtils.convert(bo, BusMaterialsorder.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改物资-设备订货
*
* @param bo 物资-设备订货
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusMaterialsorderBo bo) {
BusMaterialsorder update = MapstructUtils.convert(bo, BusMaterialsorder.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusMaterialsorder entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除物资-设备订货信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 通过批次号获取到主数据的所有供应商,然后分成不同订单存储
*
* @param batchNumber 批次号
* @return 是否新增成功
*/
@Override
@Transactional
public Boolean extractDataNewAddition(String batchNumber,Long projectId) {
//1、生成批次ID
BusCailiaoshebeiPici busCailiaoshebeiPici = new BusCailiaoshebeiPici().
setProjectId(projectId).
setBatchType("3").
setBatchNumber(BatchNumberGenerator.generateBatchNumber("DH-"));
boolean save = busCailiaoshebeiPiciService.save(busCailiaoshebeiPici);
if (!save) {
return false;
}
//2、根据批次号查询主数据
BusCailiaoshebeiPici busCailiaoshebeiPici1 = busCailiaoshebeiPiciService.getById(busCailiaoshebeiPici.getId());
return null;
}
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.cailiaoshebei.mapper.BusMaterialsorderMapper">
</mapper>