新火炬后端单体项目初始化代码
zhangherong
13 小时以前 399e7d565f19f59a8da82277da8f3eab527c2c56
art: 上料接口,上下料查询接口
已添加1个文件
已修改12个文件
629 ■■■■■ 文件已修改
db/双林新火炬MES数据库设计.pdma.json 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInventoryController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/lsw/vo/MaterialInventoryVO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/controller/MesMaterialLoadingController.java 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/mapper/MesMaterialLoadingMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialLoadingMapper.xml 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/IMesMaterialLoadingService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialLoadingServiceImpl.java 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/Ë«ÁÖлð¾æMESÊý¾Ý¿âÉè¼Æ.pdma.json
@@ -4,7 +4,7 @@
  "avatar": "",
  "version": "4.9.2",
  "createdTime": "2025-3-10 16:38:19",
  "updatedTime": "2025-9-8 15:48:21",
  "updatedTime": "2025-9-9 17:51:22",
  "dbConns": [],
  "profile": {
    "default": {
@@ -65634,6 +65634,24 @@
          "extProps": {},
          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
          "id": "8D7E6299-FC48-42A2-86FD-0AC3B881BB8B"
        },
        {
          "defKey": "unloading_flag",
          "defName": "下料标记",
          "comment": "",
          "type": "",
          "len": "",
          "scale": "",
          "primaryKey": false,
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": false,
          "refDict": "",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
          "extProps": {},
          "domain": "6F7C1C5C-D159-41E6-BF9D-54DEEFA79AFF",
          "id": "52642C9A-5EA8-4B30-91CB-5B154D75A139"
        }
      ],
      "correlations": [],
src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInventoryController.java
@@ -13,6 +13,7 @@
import org.jeecg.modules.lsw.enums.MaterialInventoryStatusEnum;
import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
import org.jeecg.modules.lsw.vo.MaterialInventoryStatisticsVO;
import org.jeecg.modules.lsw.vo.MaterialInventoryVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -62,13 +63,20 @@
    public Result<String> statisticsInventory(@RequestParam(name = "materialId") String materialId) {
        //库存统计数量
        List<MaterialInventoryStatisticsVO> list = lswMaterialInventoryService.statisticsInventory(materialId);
        if(CollectionUtil.isEmpty(list)){
        if (CollectionUtil.isEmpty(list)) {
            return Result.OK("0");
        }
        StringBuilder sb = new StringBuilder();
        for(MaterialInventoryStatisticsVO vo : list){
        for (MaterialInventoryStatisticsVO vo : list) {
            sb.append(vo.getWarehouseName()).append(": ").append(vo.getMaterialQuantity().stripTrailingZeros().toPlainString()).append(" | ");
        }
        return Result.OK(sb.toString());
    }
    @ApiOperation(value = "物料库存信息-根据产线查询库存", notes = "物料库存信息-根据产线查询库存")
    @GetMapping(value = "/queryMaterialInventory")
    public Result<List<MaterialInventoryVO>> queryMaterialInventory(@RequestParam(name = "factoryId") String factoryId) {
        List<MaterialInventoryVO> list = lswMaterialInventoryService.queryMaterialInventory(factoryId);
        return Result.OK(list);
    }
}
src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java
@@ -5,6 +5,7 @@
import org.jeecg.modules.lsw.entity.LswMaterialInventory;
import org.jeecg.modules.lsw.vo.LswMaterialInventoryVo;
import org.jeecg.modules.lsw.vo.MaterialInventoryStatisticsVO;
import org.jeecg.modules.lsw.vo.MaterialInventoryVO;
import java.util.List;
@@ -25,4 +26,12 @@
     * @return
     */
    List<MaterialInventoryStatisticsVO> statisticsInventory(@Param("materialId") String materialId);
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“å­˜
     * @param warehouseId
     * @param materialCategoryList
     * @return
     */
    List<MaterialInventoryVO> queryMaterialInventory(@Param("warehouseId") String warehouseId, @Param("materialCategoryList") List<String> materialCategoryList);
}
src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml
@@ -29,4 +29,19 @@
        left join base_line_side_warehouse m2 on m1.warehouse_id = m2.id
    </select>
    <select id="queryMaterialInventory" resultType="org.jeecg.modules.lsw.vo.MaterialInventoryVO">
        select t2.material_number,
        t2.material_name,
        t2.material_category,
        t1.batch_number,
        t1.quantity
        from lsw_material_inventory t1
        left join lsw_material t2 on t1.material_id = t2.id
        where t1.inventory_status = 'NORMAL'
        and t1.warehouse_id = #{warehouseId}
        and t2.material_category in
        <foreach collection="materialCategoryList" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
    </select>
</mapper>
src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java
@@ -4,6 +4,7 @@
import org.jeecg.modules.lsw.entity.LswMaterialInventory;
import org.jeecg.modules.lsw.vo.LswMaterialInventoryVo;
import org.jeecg.modules.lsw.vo.MaterialInventoryStatisticsVO;
import org.jeecg.modules.lsw.vo.MaterialInventoryVO;
import java.util.List;
@@ -32,4 +33,11 @@
     * @return
     */
    LswMaterialInventory queryByMaterialNumberAndBatchNumber(String materialNumber, String batchNumber, String warehouseId);
    /**
     * æŸ¥è¯¢ç‰©æ–™åº“å­˜
     * @param factoryId
     * @return
     */
    List<MaterialInventoryVO> queryMaterialInventory(String factoryId);
}
src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java
@@ -2,17 +2,26 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.base.entity.Factory;
import org.jeecg.modules.base.entity.LineSideWarehouse;
import org.jeecg.modules.base.enums.ProductionTypeEnum;
import org.jeecg.modules.base.service.IFactoryService;
import org.jeecg.modules.base.service.ILineSideWarehouseService;
import org.jeecg.modules.lsw.entity.LswMaterial;
import org.jeecg.modules.lsw.entity.LswMaterialInventory;
import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
import org.jeecg.modules.lsw.enums.MaterialInventoryStatusEnum;
import org.jeecg.modules.lsw.mapper.LswMaterialInventoryMapper;
import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
import org.jeecg.modules.lsw.service.ILswMaterialService;
import org.jeecg.modules.lsw.vo.LswMaterialInventoryVo;
import org.jeecg.modules.lsw.vo.MaterialInventoryStatisticsVO;
import org.jeecg.modules.lsw.vo.MaterialInventoryVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@@ -28,6 +37,10 @@
    private LswMaterialInventoryMapper lswMaterialInventoryMapper;
    @Autowired
    private ILswMaterialService materialService;
    @Autowired
    private ILineSideWarehouseService lineSideWarehouseService;
    @Autowired
    private IFactoryService factoryService;
    @Override
    public List<LswMaterialInventoryVo> selectLineSideMaterialInventoryByMaterialNumber(List<String> bomMaterialNumberList, String factoryId) {
@@ -52,4 +65,31 @@
        queryWrapper.eq(LswMaterialInventory::getInventoryStatus, MaterialInventoryStatusEnum.NORMAL.name());
        return lswMaterialInventoryMapper.selectOne(queryWrapper);
    }
    @Override
    public List<MaterialInventoryVO> queryMaterialInventory(String factoryId) {
        Factory factory = factoryService.getById(factoryId);
        if (factory == null) {
            return Collections.emptyList();
        }
        LineSideWarehouse warehouse = lineSideWarehouseService.queryByFactoryId(factoryId);
        if (warehouse == null) {
            return Collections.emptyList();
        }
        List<String> materialCategory = new ArrayList<>();
        if (ProductionTypeEnum.ASSEMBLE.name().equals(factory.getProductionType())) {
            materialCategory.add(MaterialCategoryEnum.OUTER_FLANGE.name());
            materialCategory.add(MaterialCategoryEnum.INNER_FLANGE.name());
            materialCategory.add(MaterialCategoryEnum.SMALL_INNER_RING.name());
            materialCategory.add(MaterialCategoryEnum.STEEL_BALL.name());
            materialCategory.add(MaterialCategoryEnum.COMPONENTS.name());
        } else if (ProductionTypeEnum.INNERFLANGE.name().equals(factory.getProductionType())) {
            materialCategory.add(MaterialCategoryEnum.BLANK.name());
        } else if (ProductionTypeEnum.OUTERFLANGE.name().equals(factory.getProductionType())) {
            materialCategory.add(MaterialCategoryEnum.BLANK.name());
        } else if (ProductionTypeEnum.HEATTREATMENT.name().equals(factory.getProductionType())) {
            materialCategory.add(MaterialCategoryEnum.BLANK.name());
        }
        return lswMaterialInventoryMapper.queryMaterialInventory(warehouse.getId(), materialCategory);
    }
}
src/main/java/org/jeecg/modules/lsw/vo/MaterialInventoryVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.lsw.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class MaterialInventoryVO {
    //物料编号
    private String materialNumber;
    //物料名称
    private String materialName;
    //物料类型
    private String materialCategory;
    //批次号
    private String batchNumber;
    //库存数量
    private BigDecimal quantity;
}
src/main/java/org/jeecg/modules/mes/controller/MesMaterialLoadingController.java
@@ -1,6 +1,5 @@
package org.jeecg.modules.mes.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -9,175 +8,104 @@
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.mes.entity.MesMaterialLoading;
import org.jeecg.modules.mes.service.IMesMaterialLoadingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Map;
/**
* @Description: ä¸Šæ–™
* @Author: jeecg-boot
* @Date:   2025-07-07
* @Version: V1.0
*/
@Api(tags="上料")
 * @Description: ä¸Šæ–™
 * @Author: jeecg-boot
 * @Date: 2025-07-07
 * @Version: V1.0
 */
@Api(tags = "上料")
@RestController
@RequestMapping("/mes/mesMaterialLoading")
@Slf4j
public class MesMaterialLoadingController extends JeecgController<MesMaterialLoading, IMesMaterialLoadingService> {
   @Autowired
   private IMesMaterialLoadingService mesMaterialLoadingService;
    @Autowired
    private IMesMaterialLoadingService mesMaterialLoadingService;
   /**
    * åˆ†é¡µåˆ—表查询
    *
    * @param mesMaterialLoading
    * @param pageNo
    * @param pageSize
    * @param req
    * @return
    */
   //@AutoLog(value = "上料-分页列表查询")
   @ApiOperation(value="上料-分页列表查询", notes="上料-分页列表查询")
   @GetMapping(value = "/list")
   public Result<IPage<MesMaterialLoading>> queryPageList(MesMaterialLoading mesMaterialLoading,
                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                  HttpServletRequest req) {
       Map<String, String[]> parameterMap = req.getParameterMap();
       QueryWrapper<MesMaterialLoading> queryWrapper = QueryGenerator.initQueryWrapper(mesMaterialLoading, parameterMap);
       Page<MesMaterialLoading> page = new Page<MesMaterialLoading>(pageNo, pageSize);
       IPage<MesMaterialLoading> pageList = mesMaterialLoadingService.queryPageList(page, parameterMap);
       return Result.OK(pageList);
   }
   /**
    *   æ·»åŠ 
    *
    * @param mesMaterialLoading
    * @return
    */
   @AutoLog(value = "上料-添加")
   @ApiOperation(value="上料-添加", notes="上料-添加")
   //@RequiresPermissions("org.jeecg.modules:mes_material_loading:add")
   @PostMapping(value = "/add")
   public Result<String> add(@RequestBody MesMaterialLoading mesMaterialLoading) {
       mesMaterialLoadingService.save(mesMaterialLoading);
       return Result.OK("添加成功!");
   }
   /**
    *  ç¼–辑
    *
    * @param mesMaterialLoading
    * @return
    */
   @AutoLog(value = "上料-编辑")
   @ApiOperation(value="上料-编辑", notes="上料-编辑")
   //@RequiresPermissions("org.jeecg.modules:mes_material_loading:edit")
   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
   public Result<String> edit(@RequestBody MesMaterialLoading mesMaterialLoading) {
       mesMaterialLoadingService.updateById(mesMaterialLoading);
       return Result.OK("编辑成功!");
   }
   /**
    *   é€šè¿‡id删除
    *
    * @param id
    * @return
    */
   @AutoLog(value = "上料-通过id删除")
   @ApiOperation(value="上料-通过id删除", notes="上料-通过id删除")
   //@RequiresPermissions("org.jeecg.modules:mes_material_loading:delete")
   @DeleteMapping(value = "/delete")
   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
       mesMaterialLoadingService.removeById(id);
       return Result.OK("删除成功!");
   }
   /**
    *  æ‰¹é‡åˆ é™¤
    *
    * @param ids
    * @return
    */
   @AutoLog(value = "上料-批量删除")
   @ApiOperation(value="上料-批量删除", notes="上料-批量删除")
   //@RequiresPermissions("org.jeecg.modules:mes_material_loading:deleteBatch")
   @DeleteMapping(value = "/deleteBatch")
   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
       this.mesMaterialLoadingService.removeByIds(Arrays.asList(ids.split(",")));
       return Result.OK("批量删除成功!");
   }
   /**
    * é€šè¿‡id查询
    *
    * @param id
    * @return
    */
   //@AutoLog(value = "上料-通过id查询")
   @ApiOperation(value="上料-通过id查询", notes="上料-通过id查询")
   @GetMapping(value = "/queryById")
   public Result<MesMaterialLoading> queryById(@RequestParam(name="id",required=true) String id) {
       MesMaterialLoading mesMaterialLoading = mesMaterialLoadingService.getById(id);
       if(mesMaterialLoading==null) {
           return Result.error("未找到对应数据");
       }
       return Result.OK(mesMaterialLoading);
   }
   /**
   * å¯¼å‡ºexcel
   *
   * @param request
   * @param mesMaterialLoading
   */
   //@RequiresPermissions("org.jeecg.modules:mes_material_loading:exportXls")
   @RequestMapping(value = "/exportXls")
   public ModelAndView exportXls(HttpServletRequest request, MesMaterialLoading mesMaterialLoading) {
       return super.exportXls(request, mesMaterialLoading, MesMaterialLoading.class, "上料");
   }
   /**
     * é€šè¿‡excel导入数据
   *
   * @param request
   * @param response
   * @return
   */
   //@RequiresPermissions("mes_material_loading:importExcel")
   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
       return super.importExcel(request, response, MesMaterialLoading.class);
   }
   /**
    * é€šè¿‡loadingId查询下料信息
    *
    * @param request
    * @param response
    * @return
    */
   @RequestMapping("/queryUnloadingByLoadingId")
   public Result<?> queryUnloadingByLoadingId(HttpServletRequest request, HttpServletResponse response) {
       String loadingId = request.getParameter("loadingId");
       return Result.OK(mesMaterialLoadingService.queryUnloadingByLoadingId(loadingId));
   }
   /*
   * é€šè¿‡ workOrderId æŸ¥è¯¢ä¸Šæ–™ä¿¡æ¯
   * @param workOrderId
   * */
    @GetMapping("/queryLoadingByWorkOrderId")
    public Result<?> queryLoadingByWorkOrderId(@RequestParam(name = "workOrderId", required = true) String workOrderId) {
        return Result.OK(mesMaterialLoadingService.queryLoadingByWorkOrderId(workOrderId));
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mesMaterialLoading
     * @param pageNo
     * @param pageSize
     * @return
     */
    @ApiOperation(value = "上料-分页列表查询", notes = "上料-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<MesMaterialLoading>> queryPageList(MesMaterialLoading mesMaterialLoading,
                                                           @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
        Page<MesMaterialLoading> page = new Page<>(pageNo, pageSize);
        IPage<MesMaterialLoading> pageList = mesMaterialLoadingService.queryPageList(page, mesMaterialLoading);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param mesMaterialLoading
     * @return
     */
    @AutoLog(value = "上料-添加")
    @ApiOperation(value = "上料-添加", notes = "上料-添加")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody MesMaterialLoading mesMaterialLoading) {
        boolean b = mesMaterialLoadingService.loading(mesMaterialLoading);
        if (!b) {
            Result.error("上料失败!");
        }
        return Result.OK("上料成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param mesMaterialLoading
     * @return
     */
    @AutoLog(value = "上料-编辑")
    @ApiOperation(value = "上料-编辑", notes = "上料-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<String> edit(@RequestBody MesMaterialLoading mesMaterialLoading) {
        mesMaterialLoadingService.updateById(mesMaterialLoading);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "上料-通过id查询")
    @ApiOperation(value = "上料-通过id查询", notes = "上料-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<MesMaterialLoading> queryById(@RequestParam(name = "id", required = true) String id) {
        MesMaterialLoading mesMaterialLoading = mesMaterialLoadingService.getById(id);
        if (mesMaterialLoading == null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(mesMaterialLoading);
    }
    /**
     * é€šè¿‡loadingId查询下料信息
     *
     * @param request
     * @param response
     * @return
     */
    @RequestMapping("/queryUnloadingByLoadingId")
    public Result<?> queryUnloadingByLoadingId(HttpServletRequest request, HttpServletResponse response) {
        String loadingId = request.getParameter("loadingId");
        return Result.OK(mesMaterialLoadingService.queryUnloadingByLoadingId(loadingId));
    }
}
src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java
@@ -18,78 +18,82 @@
/**
 * @Description: ä¸Šæ–™
 * @Author: jeecg-boot
 * @Date:   2025-07-07
 * @Date: 2025-07-07
 * @Version: V1.0
 */
@Data
@TableName("mes_material_loading")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="mes_material_loading对象", description="上料")
@ApiModel(value = "mes_material_loading对象", description = "上料")
public class MesMaterialLoading implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**创建人*/
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    /**创建日期*/
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建日期")
    private Date createTime;
    /**更新人*/
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    /**更新日期*/
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "更新日期")
    private Date updateTime;
    /**删除标记*/
    @Excel(name = "删除标记", width = 15)
    /**删除标记*/
    @Excel(name = "删除标记", width = 15)
    @ApiModelProperty(value = "删除标记")
    @TableLogic
    private Integer delFlag;
    /**产线ID*/
    @Excel(name = "产线ID", width = 15)
    @ApiModelProperty(value = "产线ID")
    @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name")
    private String factoryId;
    /**库存地ID*/
    @Excel(name = "库存地ID", width = 15)
    @ApiModelProperty(value = "库存地ID")
    @Dict(dictTable = "base_line_side_warehouse", dicCode = "id", dicText = "warehouse_name")
    private String warehouseId;
    /**物料编码*/
    @Excel(name = "物料编码", width = 15)
    /**物料编码*/
    @Excel(name = "物料编码", width = 15)
    @ApiModelProperty(value = "物料编码")
    private String materialNumber;
    /**物料名称*/
    @Excel(name = "物料名称", width = 15)
    /**物料名称*/
    @Excel(name = "物料名称", width = 15)
    @ApiModelProperty(value = "物料名称")
    private String materialName;
    /**批次号*/
    @Excel(name = "批次号", width = 15)
    /**批次号*/
    @Excel(name = "批次号", width = 15)
    @ApiModelProperty(value = "批次号")
    private String batchNumber;
    /**钢球尺寸*/
    @Excel(name = "钢球尺寸", width = 15)
    @ApiModelProperty(value = "钢球尺寸")
    @Dict(dicCode = "steel_ball_size")
    private String steelBallSize;
    /**数量*/
    @Excel(name = "数量", width = 15)
    /**数量*/
    @Excel(name = "数量", width = 15)
    @ApiModelProperty(value = "数量")
    private BigDecimal quantity;
    /**剩余数量*/
    @Excel(name = "剩余数量", width = 15)
    /**剩余数量*/
    @Excel(name = "剩余数量", width = 15)
    @ApiModelProperty(value = "剩余数量")
    private BigDecimal remainingQuantity;
    /**下料标记*/
    @Excel(name = "下料标记", width = 15)
    @ApiModelProperty(value = "下料标记")
    private String unloadingFlag;
    /** åˆ†ç±» */
    @TableField(exist = false)
    @ApiModelProperty(value = "工单号")
    private String workOrderCode;
    @TableField(exist = false)
    @ApiModelProperty(value = "设备名称")
    private String equipmentName;
    private String category;
}
src/main/java/org/jeecg/modules/mes/mapper/MesMaterialLoadingMapper.java
@@ -1,7 +1,6 @@
package org.jeecg.modules.mes.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
@@ -20,8 +19,12 @@
 */
public interface MesMaterialLoadingMapper extends BaseMapper<MesMaterialLoading> {
    List<MesMaterialUnloading> queryUnloadingByLoadingId(@Param("loadingId") String loadingId);
    List<MesMaterialLoading> queryLoadingByWorkOrderId(@Param("workOrderId") String workOrderId);
    IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page,
                                            @Param(Constants.WRAPPER) Wrapper<MesMaterialLoading> queryWrapper);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param queryWrapper
     * @return
     */
    IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page, @Param(Constants.WRAPPER) Wrapper<MesMaterialLoading> queryWrapper);
}
src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialLoadingMapper.xml
@@ -4,21 +4,41 @@
    <select id="queryUnloadingByLoadingId" resultType="org.jeecg.modules.mes.entity.MesMaterialUnloading">
        select * from mes_material_unloading where loading_id = #{loadingId} and del_flag = 0 order by create_time desc
    </select>
    <select id="queryLoadingByWorkOrderId" resultType="org.jeecg.modules.mes.entity.MesMaterialLoading">
        select mml.* ,mpwo.work_order_code as workOrderCode
        from mes_material_loading mml
                 left join mes_production_work_order mpwo on mml.work_order_id = mpwo.id
        where mml.work_order_id = #{workOrderId}
          and mml.del_flag = 0
    </select>
    <select id="queryPageList" resultType="org.jeecg.modules.mes.entity.MesMaterialLoading">
        SELECT
            t1.*,
            t2.work_order_code workOrderCode,
            t3.equipment_name equipmentName
        FROM mes_material_loading t1
        LEFT JOIN mes_production_work_order t2 ON t1.work_order_id = t2.id
        LEFT JOIN eam_equipment t3 ON t1.equipment_id = t3.id
        ${ew.customSqlSegment}
        select *
        from (SELECT m.id,
                     m.create_by,
                     m.create_time,
                     m.material_number,
                     m.material_name,
                     m.factory_id,
                     m.warehouse_id,
                     m.batch_number,
                     m.steel_ball_size,
                     m.quantity,
                     m.remaining_quantity,
                     m.unloading_flag,
                     'LOADING' AS category
              FROM mes_material_loading m
              WHERE m.del_flag = 0
              UNION ALL
              SELECT t1.id,
                     t1.create_by,
                     t1.create_time,
                     t1.material_number,
                     t1.material_name,
                     t2.factory_id,
                     t2.warehouse_id,
                     t2.batch_number,
                     t2.steel_ball_size,
                     t2.quantity,
                     t2.remaining_quantity,
                     t2.unloading_flag,
                     'UNLOADING' AS category
              FROM mes_material_unloading t1
              INNER JOIN mes_material_loading t2 ON t1.loading_id = t2.id
              WHERE t1.del_flag = 0) mml
            ${ew.customSqlSegment}
    </select>
</mapper>
src/main/java/org/jeecg/modules/mes/service/IMesMaterialLoadingService.java
@@ -12,12 +12,24 @@
/**
 * @Description: ä¸Šæ–™
 * @Author: jeecg-boot
 * @Date:   2025-07-07
 * @Date: 2025-07-07
 * @Version: V1.0
 */
public interface IMesMaterialLoadingService extends IService<MesMaterialLoading> {
    List<MesMaterialUnloading> queryUnloadingByLoadingId(String loadingId);
    List<MesMaterialLoading> queryLoadingByWorkOrderId(String workOrderId);
    IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page, Map<String, String[]> parameterMap);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     * @param page
     * @param mesMaterialLoading
     * @return
     */
    IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page, MesMaterialLoading mesMaterialLoading);
    /**
     * ä¸Šæ–™æŽ¥å£
     * @param mesMaterialLoading
     * @return
     */
    boolean loading(MesMaterialLoading mesMaterialLoading);
}
src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialLoadingServiceImpl.java
@@ -2,26 +2,53 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.base.entity.LineSideWarehouse;
import org.jeecg.modules.base.service.ILineSideWarehouseService;
import org.jeecg.modules.lsw.entity.LswMaterial;
import org.jeecg.modules.lsw.entity.LswMaterialInventory;
import org.jeecg.modules.lsw.entity.LswMaterialOutbound;
import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
import org.jeecg.modules.lsw.enums.MaterialOutboundCategory;
import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
import org.jeecg.modules.lsw.service.ILswMaterialOutboundService;
import org.jeecg.modules.lsw.service.ILswMaterialService;
import org.jeecg.modules.mes.entity.MesMaterialLoading;
import org.jeecg.modules.mes.entity.MesMaterialUnloading;
import org.jeecg.modules.mes.mapper.MesMaterialLoadingMapper;
import org.jeecg.modules.mes.service.IMesMaterialLoadingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
 * @Description: ä¸Šæ–™
 * @Author: jeecg-boot
 * @Date:   2025-07-07
 * @Date: 2025-07-07
 * @Version: V1.0
 */
@Service
public class MesMaterialLoadingServiceImpl extends ServiceImpl<MesMaterialLoadingMapper, MesMaterialLoading> implements IMesMaterialLoadingService {
    @Autowired
    private ILineSideWarehouseService lineSideWarehouseService;
    @Autowired
    private ILswMaterialOutboundService lswMaterialOutboundService;
    @Autowired
    private ILswMaterialInventoryService materialInventoryService;
    @Autowired
    private ILswMaterialService materialService;
    @Override
    public List<MesMaterialUnloading> queryUnloadingByLoadingId(String loadingId) {
@@ -29,38 +56,86 @@
    }
    @Override
    public List<MesMaterialLoading> queryLoadingByWorkOrderId(String workOrderId) {
        return baseMapper.queryLoadingByWorkOrderId(workOrderId);
    public IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page, MesMaterialLoading mesMaterialLoading) {
        QueryWrapper<MesMaterialLoading> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(mesMaterialLoading.getFactoryId())) {
            queryWrapper.eq("mml.factory_id", mesMaterialLoading.getFactoryId());
        }
        if (StringUtils.isNotBlank(mesMaterialLoading.getCategory())) {
            queryWrapper.eq("mml.category", mesMaterialLoading.getCategory());
        }
        if (StringUtils.isNotBlank(mesMaterialLoading.getMaterialNumber())) {
            queryWrapper.like("mml.material_number", mesMaterialLoading.getMaterialNumber());
        }
        if (StringUtils.isNotBlank(mesMaterialLoading.getMaterialName())) {
            queryWrapper.like("mml.material_name", mesMaterialLoading.getMaterialName());
        }
        if (StringUtils.isNotBlank(mesMaterialLoading.getBatchNumber())) {
            queryWrapper.like("mml.batch_number", mesMaterialLoading.getBatchNumber());
        }
        queryWrapper.orderByDesc("mml.create_time");
        return this.baseMapper.queryPageList(page, queryWrapper);
    }
    @Override
    public IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page, Map<String, String[]> parameterMap) {
        QueryWrapper<MesMaterialLoading> queryWrapper = Wrappers.query();
        String[] factoryIds = parameterMap.get("factoryId");
        if (factoryIds != null && factoryIds.length > 0) {
            queryWrapper.eq("t2.factory_id", factoryIds[0]);
    @Transactional(rollbackFor = Exception.class)
    public boolean loading(MesMaterialLoading mesMaterialLoading) {
        if (mesMaterialLoading == null) {
            throw new JeecgBootException("参数错误!");
        }
        String[] workOrderIds = parameterMap.get("workOrderId");
        if (workOrderIds != null && workOrderIds.length > 0) {
            queryWrapper.eq("t1.work_order_id", workOrderIds[0]);
        if (StringUtils.isBlank(mesMaterialLoading.getFactoryId())
                || StringUtils.isBlank(mesMaterialLoading.getMaterialNumber())
                || mesMaterialLoading.getQuantity() == null
                || mesMaterialLoading.getQuantity().intValue() < 1
                || StringUtils.isBlank(mesMaterialLoading.getBatchNumber())) {
            throw new JeecgBootException("参数错误!");
        }
        String[] materialNumbers = parameterMap.get("materialNumber");
        if (materialNumbers != null && materialNumbers.length > 0) {
            queryWrapper.like("t1.material_number", materialNumbers[0]);
        LineSideWarehouse warehouse = lineSideWarehouseService.queryByFactoryId(mesMaterialLoading.getFactoryId());
        if (warehouse == null) {
            throw new JeecgBootException("线边库不存在,请检查!");
        }
        String[] materialNames = parameterMap.get("materialName");
        if (materialNames != null && materialNames.length > 0) {
            queryWrapper.like("t1.material_name", materialNames[0]);
        LswMaterial material = materialService.queryByMaterialNumber(mesMaterialLoading.getMaterialNumber());
        if (material == null) {
            throw new JeecgBootException("物料信息不存在,请检查!");
        }
        String[] batchNumbers = parameterMap.get("batchNumber");
        if (batchNumbers != null && batchNumbers.length > 0) {
            queryWrapper.like("t1.batch_number", batchNumbers[0]);
        if (MaterialCategoryEnum.STEEL_BALL.name().equals(material.getMaterialCategory()) && StringUtils.isBlank(mesMaterialLoading.getSteelBallSize())) {
            throw new JeecgBootException("钢球尺寸不能为空,请检查!");
        }
        String[] equipmentIds = parameterMap.get("equipmentId");
        if (equipmentIds != null && equipmentIds.length > 0) {
            queryWrapper.eq("t1.equipment_id", equipmentIds[0]);
        LswMaterialInventory inventory = materialInventoryService.queryByMaterialNumberAndBatchNumber(mesMaterialLoading.getMaterialNumber(), mesMaterialLoading.getBatchNumber(), warehouse.getId());
        if (inventory == null) {
            throw new JeecgBootException("库存不存在,请检查!");
        }
        queryWrapper.orderByDesc("t1.create_time");
        return this.baseMapper.queryPageList(page, queryWrapper);
        if (inventory.getQuantity().compareTo(mesMaterialLoading.getQuantity()) != 0) {
            throw new JeecgBootException("上料和库存数量不匹配,请检查!");
        }
        //人员信息
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null) {
            throw new JeecgBootException("用户信息获取失败!");
        }
        LswMaterialOutbound outbound = new LswMaterialOutbound();
        outbound.setMaterialNumber(mesMaterialLoading.getMaterialNumber());
        outbound.setMaterialName(mesMaterialLoading.getMaterialName());
        outbound.setQuantity(mesMaterialLoading.getQuantity());
        outbound.setFactoryId(mesMaterialLoading.getFactoryId());
        outbound.setWarehouseId(warehouse.getId());
        outbound.setBatchNumber(mesMaterialLoading.getBatchNumber());
        outbound.setOutboundCategory(MaterialOutboundCategory.MATERIAL_LOADING.name());
        outbound.setInventoryId(inventory.getId());
        outbound.setOutboundStaff(sysUser.getUsername());
        boolean b = lswMaterialOutboundService.outboundMaterial(outbound);
        if (!b) {
            throw new JeecgBootException("库存出库失败!");
        }
        mesMaterialLoading.setWarehouseId(warehouse.getId());
        mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getQuantity());
        mesMaterialLoading.setDelFlag(CommonConstant.DEL_FLAG_0);
        mesMaterialLoading.setUnloadingFlag(CommonConstant.STATUS_0);
        this.save(mesMaterialLoading);
        return true;
    }
}