仓库管理-物料信息

develop-QA
wusiyu 3 months ago
parent 3dca71367e
commit 06855268a3
  1. 167
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StGoodsController.java
  2. 326
      blade-service/blade-wms/src/main/java/org/springblade/wms/excel/StGoodsExcel.java
  3. 47
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsMapper.java
  4. 109
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGoodsMapper.xml
  5. 24
      blade-service/blade-wms/src/main/java/org/springblade/wms/pojo/dto/StGoodsDTO.java
  6. 277
      blade-service/blade-wms/src/main/java/org/springblade/wms/pojo/entity/StGoods.java
  7. 24
      blade-service/blade-wms/src/main/java/org/springblade/wms/pojo/vo/StGoodsVO.java
  8. 55
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStGoodsService.java
  9. 200
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StGoodsServiceImpl.java
  10. 39
      blade-service/blade-wms/src/main/java/org/springblade/wms/wrapper/StGoodsWrapper.java

@ -0,0 +1,167 @@
package org.springblade.wms.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.wms.excel.StGoodsExcel;
import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.vo.StGoodsVO;
import org.springblade.wms.service.IStGoodsService;
import org.springblade.wms.wrapper.StGoodsWrapper;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsController
* @description:
* @autor: WuSiYu
* @create 2025-12-10 11:39
**/
@RestController
@AllArgsConstructor
@RequestMapping("/stGoods")
@Tag(name = "物料信息表", description = "物料信息表接口")
public class StGoodsController extends BladeController {
private final IStGoodsService stGoodsService;
/**
* 物料信息表 详情
*/
@GetMapping("/detail")
@ApiOperationSupport(order = 1)
@Operation(summary = "详情", description = "传入stGoods")
public R<StGoodsVO> detail(StGoods stGoods) {
StGoods detail = stGoodsService.getOne(Condition.getQueryWrapper(stGoods));
return R.data(StGoodsWrapper.build().entityVO(detail));
}
/**
* 物料信息表 分页
*/
@GetMapping("/list")
@ApiOperationSupport(order = 2)
@Operation(summary = "分页", description = "传入stGoods")
public R<IPage<StGoodsVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> stGoods, Query query) {
QueryWrapper<StGoods> wrapper = Condition.getQueryWrapper(stGoods, StGoods.class);
wrapper.eq("is_deleted", 0);
IPage<StGoods> pages = stGoodsService.page(Condition.getPage(query), Condition.getQueryWrapper(stGoods, StGoods.class));
return R.data(StGoodsWrapper.build().pageVO(pages));
}
/**
* 物料信息表 自定义分页
*/
@GetMapping("/page")
@ApiOperationSupport(order = 3)
@Operation(summary = "分页", description = "传入stGoods")
public R<IPage<StGoodsVO>> page(StGoodsVO stGoods, Query query) {
stGoods.setIsDeleted(0);
IPage<StGoodsVO> pages = stGoodsService.selectStGoodsPage(Condition.getPage(query), stGoods);
return R.data(pages);
}
/**
* 物料信息表 新增
*/
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入stGoods")
public R save(@Valid @RequestBody String goodsCode) throws Exception{
stGoodsService.saveGoods(goodsCode);
return R.success();
}
/**
* 物料信息表 修改
*/
@PostMapping("/update")
@ApiOperationSupport(order = 5)
@Operation(summary = "修改", description = "传入stGoods")
public R update(@Valid @RequestBody StGoods stGoods) {
return R.status(stGoodsService.updateById(stGoods));
}
/**
* 物料信息表 新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入stGoods")
public R submit(@Valid @RequestBody StGoods stGoods) {
return R.status(stGoodsService.saveOrUpdate(stGoods));
}
/**
* 物料信息表 删除
*/
@PostMapping("/remove")
@ApiOperationSupport(order = 7)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(stGoodsService.deleteLogic(Func.toLongList(ids)));
}
/**
* 设置物料状态
*/
@PostMapping("/setUsed")
@ApiOperationSupport(order = 8)
@Operation(summary = "设置物料状态", description = "传入goodsId(物料ID)和used(状态:true=启用,false=禁用)")
public R setUsed(@Validated @RequestBody StGoods stGoods) throws Exception {
stGoodsService.changeUsed(stGoods.getId(), stGoods.getUsed());
return R.success();
}
/**
* 根据物料编码查询物料
*/
@GetMapping("/getGoodsByGoodsCode")
@ApiOperationSupport(order = 9)
@Operation(summary = "根据物料编码查询物料", description = "传入物料编码goodsCode(路径参数)")
public R getGoodsByGoodsCode(
@Validated
@PathVariable(value = "goodsCode") String goodsCode
) throws Exception {
Object goods = stGoodsService.queryByCode(goodsCode);
return R.data(goods);
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-stGoods")
@ApiOperationSupport(order = 10)
@Operation(summary = "导出数据", description = "传入stGoods")
public void exportStGoods(@Parameter(hidden = true) @RequestParam Map<String, Object> stGoods, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<StGoods> queryWrapper = Condition.getQueryWrapper(stGoods, StGoods.class);
//if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(StGoods::getTenantId, bladeUser.getTenantId());
//}
//queryWrapper.lambda().eq(StGoodsEntity::getIsDeleted, BladeConstant.DB_NOT_DELETED);
List<StGoodsExcel> list = stGoodsService.exportStGoods(queryWrapper);
ExcelUtil.export(response, "物料信息表数据" + DateUtil.time(), "物料信息表数据表", list, StGoodsExcel.class);
}
}

@ -0,0 +1,326 @@
package org.springblade.wms.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsExcel
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:26
**/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class StGoodsExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ColumnWidth(20)
@ExcelProperty("主键")
private Long id;
/**
* 租户ID默认值000000
*/
@ColumnWidth(20)
@ExcelProperty("租户ID(默认值:000000)")
private String tenantId;
/**
* 是否已删除默认值0
*/
@ColumnWidth(20)
@ExcelProperty("是否已删除(默认值:0)")
private Long isDeleted;
/**
* 物料编码
*/
@ColumnWidth(20)
@ExcelProperty("物料编码")
private String goodsCode;
/**
* 物料名称
*/
@ColumnWidth(20)
@ExcelProperty("物料名称")
private String goodsName;
/**
* 最高库存
*/
@ColumnWidth(20)
@ExcelProperty("最高库存")
private Double maxNum;
/**
* 最低库存
*/
@ColumnWidth(20)
@ExcelProperty("最低库存")
private Double minNum;
/**
* 采购数量
*/
@ColumnWidth(20)
@ExcelProperty("采购数量")
private Double purchaseQuantity;
/**
* 必检标识
*/
@ColumnWidth(20)
@ExcelProperty("必检标识")
private Short mustCheck;
/**
* 是否停用默认值0
*/
@ColumnWidth(20)
@ExcelProperty("是否停用(默认值:0)")
private Boolean used;
/**
* 使用件数核算
*/
@ColumnWidth(20)
@ExcelProperty("使用件数核算")
private Short numAcc;
/**
* 产地
*/
@ColumnWidth(20)
@ExcelProperty("产地")
private String madeIn;
/**
* 单价
*/
@ColumnWidth(20)
@ExcelProperty("单价")
private Double price;
/**
* 等级
*/
@ColumnWidth(20)
@ExcelProperty("等级")
private String grade;
/**
* 来源 1=自制 2=外购
*/
@ColumnWidth(20)
@ExcelProperty("来源 1=自制 2=外购")
private Short source;
/**
* 组件模式
*/
@ColumnWidth(20)
@ExcelProperty("组件模式")
private String prtType;
/**
* 版本
*/
@ColumnWidth(20)
@ExcelProperty("版本")
private String releaseNo;
/**
* 版本时间
*/
@ColumnWidth(20)
@ExcelProperty("版本时间")
private Date releaseNoTime;
/**
* 型号
*/
@ColumnWidth(20)
@ExcelProperty("型号")
private String materialModel;
/**
* 重量
*/
@ColumnWidth(20)
@ExcelProperty("重量")
private Double weight;
/**
* 计量单位
*/
@ColumnWidth(20)
@ExcelProperty("计量单位")
private String unitName;
/**
* 产品类别
*/
@ColumnWidth(20)
@ExcelProperty("产品类别")
private String productCategory;
/**
* 规格型号
*/
@ColumnWidth(20)
@ExcelProperty("规格型号")
private String specifications;
/**
* 技术条件
*/
@ColumnWidth(20)
@ExcelProperty("技术条件")
private String productTechSpec;
/**
* 密度
*/
@ColumnWidth(20)
@ExcelProperty("密度")
private Double density;
/**
* 图号
*/
@ColumnWidth(20)
@ExcelProperty("图号")
private String drawingNo;
/**
* 变更通告编号
*/
@ColumnWidth(20)
@ExcelProperty("变更通告编号")
private String ecnNo;
/**
* 是否成品默认值0
*/
@ColumnWidth(20)
@ExcelProperty("是否成品(默认值:0)")
private Short endItem;
/**
* 优选等级
*/
@ColumnWidth(20)
@ExcelProperty("优选等级")
private String priority;
/**
* 超级链接
*/
@ColumnWidth(20)
@ExcelProperty("超级链接")
private String partLink;
/**
* 腔数
*/
@ColumnWidth(20)
@ExcelProperty("腔数")
private String cavityNo;
/**
* 采购部门
*/
@ColumnWidth(20)
@ExcelProperty("采购部门")
private Long deptId;
/**
* 物料类别
*/
@ColumnWidth(20)
@ExcelProperty("物料类别")
private Long gcId;
/**
* 生命周期状态
*/
@ColumnWidth(20)
@ExcelProperty("生命周期状态")
private String partRevisionStatus;
/**
* 牌号
*/
@ColumnWidth(20)
@ExcelProperty("牌号")
private String tradeMark;
/**
* 备注
*/
@ColumnWidth(20)
@ExcelProperty("备注")
private String remark;
/**
* 锁料数量
*/
@ColumnWidth(20)
@ExcelProperty("锁料数量")
private Double lockQuantity;
/**
* 在途数量
*/
@ColumnWidth(20)
@ExcelProperty("在途数量")
private Double onthewayQuantity;
/**
* 当前库存
*/
@ColumnWidth(20)
@ExcelProperty("当前库存")
private Double currentQuantity;
/**
* 物料类型
*/
@ColumnWidth(20)
@ExcelProperty("物料类型")
private Long goodsType;
/**
* 大类
*/
@ColumnWidth(20)
@ExcelProperty("大类")
private String matBigClassify;
/**
* 小类
*/
@ColumnWidth(20)
@ExcelProperty("小类")
private String matSmallClassify;
/**
* 检验编号
*/
@ColumnWidth(20)
@ExcelProperty("检验编号")
private String checkCode;
/**
* 批次号
*/
@ColumnWidth(20)
@ExcelProperty("批次号")
private String batch;
/**
* 表面积
*/
@ColumnWidth(20)
@ExcelProperty("表面积")
private Double sectionArea;
/**
* 物料属性
*/
@ColumnWidth(20)
@ExcelProperty("物料属性")
private Long materialProperty;
/**
* PDM单位
*/
@ColumnWidth(20)
@ExcelProperty("PDM单位")
private String pdmUnit;
/**
* 是否工艺审批
*/
@ColumnWidth(20)
@ExcelProperty("是否工艺审批")
private String processApproval;
/**
* 是否最低库存预警
*/
@ColumnWidth(20)
@ExcelProperty("是否最低库存预警")
private String minWarning;
}

@ -0,0 +1,47 @@
package org.springblade.wms.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.springblade.wms.excel.StGoodsExcel;
import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.vo.StGoodsVO;
import java.util.List;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsMapper
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:23
**/
public interface StGoodsMapper extends BaseMapper<StGoods> {
/**
* 自定义分页
*
* @param page 分页参数
* @param stGoods 查询参数
* @return List<StGoodsVO>
*/
List<StGoodsVO> selectStGoodsPage(IPage page, StGoodsVO stGoods);
StGoods queryByCode(@Param("goodsCode") String goodsCode);
/**
* 获取导出数据
*
* @param queryWrapper 查询条件
* @return List<StGoodsExcel>
*/
List<StGoodsExcel> exportStGoods(@Param("ew") Wrapper<StGoods> queryWrapper);
StGoods queryByCodeAndVersion(@Param("patno") String prtno, @Param("releaseNo") String releaseNo);
List<StGoodsVO> selectFindAllGoodsPage(IPage<StGoodsVO> page, StGoodsVO stGoods);
}

@ -0,0 +1,109 @@
<?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.springblade.wms.mapper.StGoodsMapper">
<!-- 通用查询映射结果 -->
<resultMap id="stGoodsResultMap" type="org.springblade.wms.pojo.entity.StGoods">
<result column="ID" property="id"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="GOODS_CODE" property="goodsCode"/>
<result column="GOODS_NAME" property="goodsName"/>
<result column="MAX_NUM" property="maxNum"/>
<result column="MIN_NUM" property="minNum"/>
<result column="PURCHASE_QUANTITY" property="purchaseQuantity"/>
<result column="MUST_CHECK" property="mustCheck"/>
<result column="USED" property="used"/>
<result column="NUM_ACC" property="numAcc"/>
<result column="MADE_IN" property="madeIn"/>
<result column="PRICE" property="price"/>
<result column="GRADE" property="grade"/>
<result column="SOURCE" property="source"/>
<result column="PRT_TYPE" property="prtType"/>
<result column="RELEASE_NO" property="releaseNo"/>
<result column="RELEASE_NO_TIME" property="releaseNoTime"/>
<result column="MATERIAL_MODEL" property="materialModel"/>
<result column="WEIGHT" property="weight"/>
<result column="UNIT_NAME" property="unitName"/>
<result column="PRODUCT_CATEGORY" property="productCategory"/>
<result column="SPECIFICATIONS" property="specifications"/>
<result column="PRODUCT_TECH_SPEC" property="productTechSpec"/>
<result column="DENSITY" property="density"/>
<result column="DRAWING_NO" property="drawingNo"/>
<result column="ECN_NO" property="ecnNo"/>
<result column="END_ITEM" property="endItem"/>
<result column="PRIORITY" property="priority"/>
<result column="PART_LINK" property="partLink"/>
<result column="CAVITY_NO" property="cavityNo"/>
<result column="DEPT_ID" property="deptId"/>
<result column="GC_ID" property="gcId"/>
<result column="PART_REVISION_STATUS" property="partRevisionStatus"/>
<result column="TRADE_MARK" property="tradeMark"/>
<result column="REMARK" property="remark"/>
<result column="LOCK_QUANTITY" property="lockQuantity"/>
<result column="ONTHEWAY_QUANTITY" property="onthewayQuantity"/>
<result column="CURRENT_QUANTITY" property="currentQuantity"/>
<result column="GOODS_TYPE" property="goodsType"/>
<result column="MAT_BIG_CLASSIFY" property="matBigClassify"/>
<result column="MAT_SMALL_CLASSIFY" property="matSmallClassify"/>
<result column="CHECK_CODE" property="checkCode"/>
<result column="BATCH" property="batch"/>
<result column="SECTION_AREA" property="sectionArea"/>
<result column="MATERIAL_PROPERTY" property="materialProperty"/>
<result column="PDM_UNIT" property="pdmUnit"/>
<result column="PROCESS_APPROVAL" property="processApproval"/>
<result column="MIN_WARNING" property="minWarning"/>
</resultMap>
<select id="selectStGoodsPage" resultMap="stGoodsResultMap">
select * from ST_GOODS where is_deleted = 0
</select>
<select id="selectFindAllGoodsPage" resultMap="stGoodsResultMap">
SELECT t.*
FROM st_goods t
<where>
AND t.is_deleted = 0
AND t.used = 1
<!-- 原逻辑:物料编码goodsCode 模糊查询,传值则生效 -->
<if test="goodsCode != null and goodsCode != ''">
AND t.goods_code LIKE '%' || #{goodsCode} || '%'
</if>
</where>
</select>
<select id="exportStGoods" resultType="org.springblade.wms.excel.StGoodsExcel">
SELECT * FROM ST_GOODS ${ew.customSqlSegment}
</select>
<select id="queryByCode" resultMap="stGoodsResultMap">
SELECT * FROM (
SELECT * FROM ST_GOODS
WHERE GOODS_CODE = #{goodsCode}
AND USED = 1
AND IS_DELETED = 0
ORDER BY ID DESC
) WHERE ROWNUM &lt;= 1
</select>
<select id="queryByCodeAndVersion" resultMap="stGoodsResultMap">
SELECT *
FROM (
SELECT *
FROM co_goods
WHERE goods_code = #{code}
AND release_no = #{releaseNo}
AND is_deleted = 0
AND used = 1
ORDER BY id
)
WHERE ROWNUM = 1
</select>
</mapper>

@ -0,0 +1,24 @@
package org.springblade.wms.pojo.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.wms.pojo.entity.StGoods;
import java.io.Serial;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsDTO
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:14
**/
@Data
@EqualsAndHashCode(callSuper = true)
public class StGoodsDTO extends StGoods {
@Serial
private static final long serialVersionUID = 1L;
}

@ -0,0 +1,277 @@
package org.springblade.wms.pojo.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.util.Date;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoods
* @description:
* @autor: WuSiYu
* @create 2025-12-09 18:11
**/
@Data
@TableName("ST_GOODS")
@Schema(description = "StGoods对象")
@EqualsAndHashCode(callSuper = true)
public class StGoods extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 物料编码
*/
@Schema(description = "物料编码")
private String goodsCode;
/**
* 物料名称
*/
@Schema(description = "物料名称")
private String goodsName;
/**
* 最高库存
*/
@Schema(description = "最高库存")
private Double maxNum;
/**
* 最低库存
*/
@Schema(description = "最低库存")
private Double minNum;
/**
* 采购数量
*/
@Schema(description = "采购数量")
private Double purchaseQuantity;
/**
* 必检标识
*/
@Schema(description = "必检标识")
private Short mustCheck;
/**
* 是否停用默认值0
*/
@Schema(description = "是否停用(默认值:0)")
private Boolean used;
/**
* 使用件数核算
*/
@Schema(description = "使用件数核算")
private Short numAcc;
/**
* 产地
*/
@Schema(description = "产地")
private String madeIn;
/**
* 单价
*/
@Schema(description = "单价")
private Double price;
/**
* 等级
*/
@Schema(description = "等级")
private String grade;
/**
* 来源 1=自制 2=外购
*/
@Schema(description = "来源 1=自制 2=外购")
private Short source;
/**
* 组件模式
*/
@Schema(description = "组件模式")
private String prtType;
/**
* 版本
*/
@Schema(description = "版本")
private String releaseNo;
/**
* 版本时间
*/
@Schema(description = "版本时间")
private Date releaseNoTime;
/**
* 型号
*/
@Schema(description = "型号")
private String materialModel;
/**
* 重量
*/
@Schema(description = "重量")
private Double weight;
/**
* 计量单位
*/
@Schema(description = "计量单位")
private String unitName;
/**
* 产品类别
*/
@Schema(description = "产品类别")
private String productCategory;
/**
* 规格型号
*/
@Schema(description = "规格型号")
private String specifications;
/**
* 技术条件
*/
@Schema(description = "技术条件")
private String productTechSpec;
/**
* 密度
*/
@Schema(description = "密度")
private Double density;
/**
* 图号
*/
@Schema(description = "图号")
private String drawingNo;
/**
* 变更通告编号
*/
@Schema(description = "变更通告编号")
private String ecnNo;
/**
* 是否成品默认值0
*/
@Schema(description = "是否成品(默认值:0)")
private Short endItem;
/**
* 优选等级
*/
@Schema(description = "优选等级")
private String priority;
/**
* 超级链接
*/
@Schema(description = "超级链接")
private String partLink;
/**
* 腔数
*/
@Schema(description = "腔数")
private String cavityNo;
/**
* 采购部门
*/
@Schema(description = "采购部门")
private Long deptId;
/**
* 物料类别
*/
@Schema(description = "物料类别")
private Long gcId;
/**
* 生命周期状态
*/
@Schema(description = "生命周期状态")
private String partRevisionStatus;
/**
* 牌号
*/
@Schema(description = "牌号")
private String tradeMark;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 锁料数量
*/
@Schema(description = "锁料数量")
private Double lockQuantity;
/**
* 在途数量
*/
@Schema(description = "在途数量")
private Double onthewayQuantity;
/**
* 当前库存
*/
@Schema(description = "当前库存")
private Double currentQuantity;
/**
* 物料类型
*/
@Schema(description = "物料类型")
private Long goodsType;
/**
* 大类
*/
@Schema(description = "大类")
private String matBigClassify;
/**
* 小类
*/
@Schema(description = "小类")
private String matSmallClassify;
/**
* 检验编号
*/
@Schema(description = "检验编号")
private String checkCode;
/**
* 批次号
*/
@Schema(description = "批次号")
private String batch;
/**
* 表面积
*/
@Schema(description = "表面积")
private Double sectionArea;
/**
* 物料属性
*/
@Schema(description = "物料属性")
private Long materialProperty;
/**
* PDM单位
*/
@Schema(description = "PDM单位")
private String pdmUnit;
/**
* 是否工艺审批
*/
@Schema(description = "是否工艺审批")
private String processApproval;
/**
* 是否最低库存预警
*/
@Schema(description = "是否最低库存预警")
private String minWarning;
/**
* 自制
*/
public static Short MAKE_PROPERTIES_SELF = 1;
/**
* 外购
*/
public static Short MAKE_PROPERTIES_OUT = 2;
public void setSourceByStr(String str) {
if ("自制".equals(str)) {
this.source = MAKE_PROPERTIES_SELF;
} else if ("外购".equals(str)) {
this.source = MAKE_PROPERTIES_OUT;
}
}
}

@ -0,0 +1,24 @@
package org.springblade.wms.pojo.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.wms.pojo.entity.StGoods;
import java.io.Serial;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsVO
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:15
**/
@Data
@EqualsAndHashCode(callSuper = true)
public class StGoodsVO extends StGoods {
@Serial
private static final long serialVersionUID = 1L;
}

@ -0,0 +1,55 @@
package org.springblade.wms.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.wms.excel.StGoodsExcel;
import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.vo.StGoodsVO;
import java.util.List;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName IStGoodsService
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:18
**/
public interface IStGoodsService extends BaseService<StGoods> {
/**
* 自定义分页
*
* @param page 分页参数
* @param stGoods 查询参数
* @return IPage<StGoodsVO>
*/
IPage<StGoodsVO> selectStGoodsPage(IPage<StGoodsVO> page, StGoodsVO stGoods);
void changeUsed(Long id, Boolean used) throws Exception;
StGoods queryByCode(String goodsCode);
/**
* 导出数据
*
* @param queryWrapper 查询条件
* @return List<StGoodsExcel>
*/
List<StGoodsExcel> exportStGoods(Wrapper<StGoods> queryWrapper);
void saveGoods(String goodsCode) throws Exception;
StGoods queryByCodeAndVersion(String prtno, String releaseNo);
void addOnthewayQuantity(Long goodsId, Double num);
void addCurQuantity(Long goodsId, Double quantity);
IPage<StGoodsVO> selectFindAllGoodsPage(IPage<StGoodsVO> page, StGoodsVO stGoods);
void addLockQuantity(Long goodsId, double v);
}

@ -0,0 +1,200 @@
package org.springblade.wms.service.impl;
import cn.hutool.core.util.NumberUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.wms.excel.StGoodsExcel;
import org.springblade.wms.mapper.StGoodsClassMapper;
import org.springblade.wms.mapper.StGoodsMapper;
import org.springblade.wms.pojo.dto.StPdmPartDTO;
import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.entity.StGoodsExt;
import org.springblade.wms.pojo.vo.StGoodsVO;
import org.springblade.wms.service.IStGoodsExtService;
import org.springblade.wms.service.IStGoodsService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsServiceImpl
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:21
**/
@Service
@Slf4j
public class StGoodsServiceImpl extends BaseServiceImpl<StGoodsMapper, StGoods> implements IStGoodsService {
@Resource
private StHttpRequestService stHttpRequestService;
@Resource
private IStGoodsExtService stGoodsExtService;
@Override
public IPage<StGoodsVO> selectStGoodsPage(IPage<StGoodsVO> page, StGoodsVO stGoods) {
return page.setRecords(baseMapper.selectStGoodsPage(page, stGoods));
}
@Override
public IPage<StGoodsVO> selectFindAllGoodsPage(IPage<StGoodsVO> page, StGoodsVO stGoods) {
return page.setRecords(baseMapper.selectFindAllGoodsPage(page, stGoods));
}
@Override
public void saveGoods(String goodsCode) throws Exception {
StGoods stGoods = baseMapper.queryByCode(goodsCode);
if (stGoods != null) {
throw new Exception("该物料已存在!");
} else {
List<String> prtnoList = new ArrayList<>();
prtnoList.add(goodsCode);
// saveGoodsInfo(prtnoList);
}
}
/*public void saveGoodsInfo(List<String> prtnoList) throws Exception {
StGoods goods = null;
//查询物料信息
List<StPdmPartDTO> pdmPartInfo = stHttpRequestService.getPdmPartInfo(prtnoList);
log.debug("pdmPartInfo:{}", pdmPartInfo);
if (pdmPartInfo != null) {
for (StPdmPartDTO dto : pdmPartInfo) {
//保存物料信息
goods = this.queryByCodeAndVersion(dto.getPrtno(), dto.getReleaseNo());
if (goods == null) {
goods = new StGoods();
// goods.setDept();
goods.setDrawingNo(dto.getDrwpartno());
goods.setGoodsCode(dto.getPrtno());
goods.setGoodsName(dto.getPrtdesc());
goods.setDensity(dto.getDensity());
goods.setPrtType(dto.getPrtType());
goods.setSourceByStr(dto.getSource());
goods.setSpecifications(dto.getMtlspcf());
goods.setUnitName(dto.getPrtum());
goods.setCavityNo(dto.getCavityNo());
goods.setProductCategory(dto.getProductCategory());
goods.setEcnNo(dto.getEcnNo());
goods.setEndItem(dto.getEndItem());
goods.setMaterialModel(dto.getMaterialModel());
goods.setPartLink(dto.getPartLink());
goods.setPriority(dto.getPriority());
goods.setPartRevisionStatus(dto.getPartRevisionStatus());
goods.setProductTechSpec(dto.getProductTechSpec());
goods.setWeight(dto.getWeight());
goods.setReleaseNo(dto.getReleaseNo());
goods.setRemark(dto.getRemark());
goods.setTradeMark(dto.getTradeMark());
goods.setUsed(Boolean.TRUE);
goods.setIsDeleted(0);
goods.setCreateTime(new Date());
goods.setReleaseNoTime(dto.getRcdchgdatd());
this.save(goods);
}
}
}
}*/
@Override
public StGoods queryByCodeAndVersion(String prtno, String releaseNo) {
return baseMapper.queryByCodeAndVersion(prtno, releaseNo);
}
@Override
public void changeUsed(Long id, Boolean used) throws Exception {
StGoods stGoods = this.getById(id);
if (stGoods == null) {
return;
}
stGoods.setUsed(used);
this.updateById(stGoods);
}
@Override
public StGoods queryByCode(String goodsCode) {
return baseMapper.queryByCode(goodsCode);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addOnthewayQuantity(Long goodsId, Double num) {
StGoods coGoods = baseMapper.selectById(goodsId);
if (coGoods == null) {
throw new ServiceException("物料不存在或已停用:ID=" + goodsId);
}
// 累加在途数量(负值自动归零)
double ontheway = NumberUtil.add(
BigDecimal.valueOf(coGoods.getOnthewayQuantity()),
BigDecimal.valueOf(num)
).doubleValue();
if (ontheway < 0) {
ontheway = 0D;
}
coGoods.setOnthewayQuantity(ontheway);
baseMapper.updateById(coGoods);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addCurQuantity(Long goodsId, Double num) {
StGoods stGoods = baseMapper.selectById(goodsId);
if (stGoods == null) {
throw new ServiceException("物料不存在:ID=" + goodsId);
}
// 累加当前库存(负值自动归零)
double curQuantity = NumberUtil.add(
BigDecimal.valueOf(stGoods.getCurrentQuantity()),
BigDecimal.valueOf(num)
).doubleValue();
if (curQuantity < 0) {
curQuantity = 0D;
}
stGoods.setCurrentQuantity(curQuantity);
baseMapper.updateById(stGoods);
// 同步更新物料扩展表二级库存
StGoodsExt stGoodsExt = stGoodsExtService.getById(stGoods.getId());
if (stGoodsExt != null) {
stGoodsExt.setLastStore(curQuantity);
stGoodsExtService.updateById(stGoodsExt);
}
}
@Override
public void addLockQuantity(Long goodsId, double num) {
StGoods stGoods = this.getById(goodsId);
Double lockQuantity =
BigDecimal.valueOf(stGoods.getLockQuantity()).add(BigDecimal.valueOf(num)).doubleValue();
if (lockQuantity < 0) {
lockQuantity = 0d;
}
stGoods.setLockQuantity(lockQuantity);
}
@Override
public List<StGoodsExcel> exportStGoods(Wrapper<StGoods> queryWrapper) {
List<StGoodsExcel> stGoodsList = baseMapper.exportStGoods(queryWrapper);
//stGoodsList.forEach(stGoods -> {
// stGoods.setTypeName(DictCache.getValue(DictEnum.YES_NO, StGoods.getType()));
//});
return stGoodsList;
}
}

@ -0,0 +1,39 @@
package org.springblade.wms.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.wms.pojo.entity.StGoods;
import org.springblade.wms.pojo.vo.StGoodsVO;
import java.util.Objects;
/**
* @version 1.0
* @program: jonhon-mes-svr
* @ClassName StGoodsWrapper
* @description:
* @autor: WuSiYu
* @create 2025-12-12 14:30
**/
public class StGoodsWrapper extends BaseEntityWrapper<StGoods, StGoodsVO> {
public static StGoodsWrapper build() {
return new StGoodsWrapper();
}
@Override
public StGoodsVO entityVO(StGoods stGoods) {
StGoodsVO stGoodsVO = Objects.requireNonNull(BeanUtil.copyProperties(stGoods, StGoodsVO.class));
//User createUser = UserCache.getUser(stGoods.getCreateUser());
//User updateUser = UserCache.getUser(stGoods.getUpdateUser());
//stGoodsVO.setCreateUserName(createUser.getName());
//stGoodsVO.setUpdateUserName(updateUser.getName());
return stGoodsVO;
}
}
Loading…
Cancel
Save