新火炬后端单体项目初始化代码
已添加1个文件
已修改25个文件
796 ■■■■■ 文件已修改
db/双林新火炬MES数据库设计.pdma.json 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/entity/CuttingReceiveDetail.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/CuttingReceiveMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | 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/controller/MesProductionOrderController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java 8 ●●●●● 补丁 | 查看 | 原始文档 | 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/mapper/xml/MesProductionWorkOrderMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | 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/cms/controller/CuttingReceiveController.java
@@ -12,13 +12,12 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import liquibase.pro.packaged.G;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.cms.entity.CuttingInbound;
import org.jeecg.modules.cms.entity.CuttingInboundDetail;
import org.jeecg.modules.cms.entity.CuttingReceive;
import org.jeecg.modules.cms.entity.CuttingReceiveDetail;
import org.jeecg.modules.cms.entity.*;
import org.jeecg.modules.cms.service.ICuttingInventoryService;
import org.jeecg.modules.cms.service.ICuttingReceiveDetailService;
import org.jeecg.modules.cms.service.ICuttingReceiveService;
@@ -59,7 +58,6 @@
    @Autowired
    private ICuttingReceiveDetailService cuttingReceiveDetailService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
@@ -93,13 +91,16 @@
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody JSONObject jSONObject) {
        // ä¿å­˜ä¸»è¡¨æ•°æ®
        CuttingReceive cuttingReceive = jSONObject.toJavaObject(CuttingReceive.class);
        cuttingReceive.setOrderStatus("1");
        cuttingReceiveService.saveOrUpdate(cuttingReceive);
        //删除原关联数据
        // åˆ é™¤åŽŸæœ‰å…³è”çš„æ˜Žç»†æ•°æ®
        List<CuttingReceiveDetail> cuttingReceiveDetailList = cuttingReceiveDetailService.lambdaQuery().eq(CuttingReceiveDetail::getOrderId, cuttingReceive.getId()).list();
        cuttingReceiveDetailService.removeBatchByIds(cuttingReceiveDetailList);
        //添加新关联数据
        // é‡æ–°æ·»åŠ æ–°çš„æ˜Žç»†æ•°æ®
        JSONArray jsonArray = jSONObject.getJSONArray("detailData");
        List<CuttingReceiveDetail> list = jsonArray.toJavaList(CuttingReceiveDetail.class);
        for (int i = 0; i < list.size(); i++) {
@@ -209,4 +210,16 @@
        return Result.ok(list);
    }
    /**
     * é€‰æ‹©åº“存刀具的列表
     *
     * @return
     */
    @GetMapping("/getInventoryToolList")
    public Result<?> getInventoryToolList(@RequestParam("pageNo") Integer pageNo,
                                         @RequestParam("pageSize") Integer pageSize,
                                         @RequestParam Map<String, Object> params) {
        IPage<Map<String, Object>> inventoryTooList = cuttingReceiveService.getInventoryToolList(pageNo, pageSize, params);
        return Result.ok(inventoryTooList);
    }
}
src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java
@@ -4,10 +4,8 @@
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.common.constant.CommonConstant;
@@ -121,4 +119,5 @@
    @Excel(name = "归还确认意见", width = 15)
    @ApiModelProperty(value = "归还确认意见")
    private String returnConfirmComment;
}
src/main/java/org/jeecg/modules/cms/entity/CuttingReceiveDetail.java
@@ -4,10 +4,8 @@
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
src/main/java/org/jeecg/modules/cms/mapper/CuttingReceiveMapper.java
@@ -1,7 +1,9 @@
package org.jeecg.modules.cms.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.cms.entity.CuttingReceive;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -14,4 +16,5 @@
 */
public interface CuttingReceiveMapper extends BaseMapper<CuttingReceive> {
    IPage<Map<String, Object>> getInventoryToolList(IPage<Map> pageData, Map<String, Object> params);
}
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml
@@ -9,11 +9,15 @@
            t1.cutting_id cuttingId,
            t1.workpiece_material workpieceMaterial,
            t1.used_life usedLife,
            t2.cutting_code cuttingCode,
            t2.cutting_name cuttingName
            t2.cutting_barcode cuttingCBarcode,
            t2.inventory_status inventoryStatus,
            t2.current_life currentLife,
            t3.cutting_code cuttingCode,
            t3.cutting_name cuttingName
        FROM
            cms_cutting_receive_detail t1
                LEFT JOIN cms_cutting_tool t2 ON t1.cutting_id = t2.id
            LEFT JOIN cms_cutting_inventory t2 ON t1.inventory_id = t2.id
            LEFT JOIN cms_cutting_tool t3 ON t1.cutting_id = t3.id
        WHERE t1.order_id = #{orderId}
    </select>
</mapper>
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveMapper.xml
@@ -2,4 +2,21 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.cms.mapper.CuttingReceiveMapper">
    <select id="getInventoryToolList" parameterType="Map" resultType="Map">
        SELECT
            t1.cutting_id cuttingId,
            t1.id,
            t1.cutting_barcode cuttingBarcode,
            t1.current_life currentLife,
            t2.cutting_code cuttingCode,
            t2.cutting_name cuttingName,
            t2.cutting_category,
            t3.item_text cuttingCategory
        FROM cms_cutting_inventory t1
        LEFT JOIN cms_cutting_tool t2 ON t1.cutting_id = t2.id
        LEFT JOIN (select * from v_sys_dict where dict_code = 'cutting_category') t3 on t3.item_value = t2.cutting_category
        WHERE t1.inventory_status = '正常'
        AND t2.del_flag = 0
    </select>
</mapper>
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml
@@ -4,21 +4,21 @@
    <select id="getCuttingToolList"  parameterType="Map" resultType="Map">
        SELECT
        t1.id,
        t1.cutting_code cuttingCode,
        t1.cutting_name cuttingName,
        t1.cutting_category,
        t1.store_location storeLocation,
        t1.supplier_id supplierId,
        t1.minimum_package_unit minimumPackageUnit,
        t1.cutting_material cuttingMaterial,
        t1.cutting_model cuttingModel,
        t1.drawing_number drawingNumber,
        t1.inventory_warning inventoryWarning,
        t1.remark remark,
        t2.item_text cuttingCategory
            t1.id,
            t1.cutting_code cuttingCode,
            t1.cutting_name cuttingName,
            t1.cutting_category,
            t1.store_location storeLocation,
            t1.supplier_id supplierId,
            t1.minimum_package_unit minimumPackageUnit,
            t1.cutting_material cuttingMaterial,
            t1.cutting_model cuttingModel,
            t1.drawing_number drawingNumber,
            t1.inventory_warning inventoryWarning,
            t1.remark remark,
            t2.item_text cuttingCategory
        FROM
        cms_cutting_tool t1
            cms_cutting_tool t1
        left join (select * from v_sys_dict where dict_code = 'cutting_category') t2 on t2.item_value = t1.cutting_category
        WHERE t1.del_flag = 0
        <if test="params.cuttingCode != null and params.cuttingCode != ''">
src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java
@@ -1,7 +1,10 @@
package org.jeecg.modules.cms.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.cms.entity.CuttingReceive;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
/**
 * @Description: åˆ€å…·é¢†ç”¨å•
@@ -11,4 +14,5 @@
 */
public interface ICuttingReceiveService extends IService<CuttingReceive> {
    IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params);
}
src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java
@@ -1,11 +1,15 @@
package org.jeecg.modules.cms.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.cms.entity.CuttingReceive;
import org.jeecg.modules.cms.mapper.CuttingReceiveMapper;
import org.jeecg.modules.cms.service.ICuttingReceiveService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Map;
/**
 * @Description: åˆ€å…·é¢†ç”¨å•
@@ -16,4 +20,9 @@
@Service
public class CuttingReceiveServiceImpl extends ServiceImpl<CuttingReceiveMapper, CuttingReceive> implements ICuttingReceiveService {
    @Override
    public IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params) {
        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
        return super.getBaseMapper().getInventoryToolList(pageData,params);
    }
}
src/main/java/org/jeecg/modules/eam/service/impl/EamEquipmentServiceImpl.java
@@ -209,31 +209,48 @@
        return Collections.emptyList();
    }
    //    @Override
//    public EamEquipment selectByEquipmentCode(String equipmentCode) {
//        if (StringUtils.isBlank(equipmentCode)) {
//            return null;
//        }
//        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
//        //用户数据权限
//        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//        if (sysUser == null) {
//            return null;
//        }
//        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
//            //选择了设备,根据设备id过滤设备
//            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
//            queryWrapper.in("equipment_code", equipArr);
//        } else {
//            //没有选择设备,根据车间过滤设备
//            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=org_id", sysUser.getId());
//        }
//        queryWrapper.eq("equipment_code", equipmentCode);
//        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
//
//        return eamEquipmentMapper.selectOne(queryWrapper);
//    }
    /**
     *
     * @param equipmentCode
     * @return
     */
    @Override
    public EamEquipment selectByEquipmentCode(String equipmentCode) {
        if (StringUtils.isBlank(equipmentCode)) {
            return null;
        }
        QueryWrapper<EamEquipment> queryWrapper = new QueryWrapper<>();
        //用户数据权限
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (sysUser == null) {
            return null;
        }
        if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
            //选择了设备,根据设备id过滤设备
            List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
            queryWrapper.in("equipment_code", equipArr);
        } else {
            //没有选择设备,根据车间过滤设备
            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id={0} and t.pro_id=org_id", sysUser.getId());
        }
        // ç§»é™¤ç”¨æˆ·æ•°æ®æƒé™è¿‡æ»¤ï¼Œç›´æŽ¥æ ¹æ®è®¾å¤‡ç¼–码查询
        queryWrapper.eq("equipment_code", equipmentCode);
        queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0);
        return eamEquipmentMapper.selectOne(queryWrapper);
    }
    /**
     * èŽ·å–æ‰€æœ‰çš„äº§çº¿id(包含所有上级)
     */
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/controller/MesProductionOrderController.java
@@ -104,6 +104,7 @@
        List<Map<String, Object>> res = orderList.stream().map(order -> {
            Map<String, Object> map = new HashMap<>();
            map.put("title", order.getOrderCode());
            map.put("text", order.getOrderCode());
            map.put("label", order.getOrderCode());
            map.put("value", order.getId());
            return map;
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/entity/MesProductionWorkOrder.java
@@ -162,4 +162,12 @@
    /**班次名称*/
    @TableField(exist = false)
    private String shiftName;
    /**生产工单*/
    @TableField(exist = false)
    private String text;
    /**生产工单id*/
    @TableField(exist = false)
    private String value;
}
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/mapper/xml/MesProductionWorkOrderMapper.xml
@@ -5,6 +5,8 @@
    <select id="queryPageList" resultType="org.jeecg.modules.mes.entity.MesProductionWorkOrder">
        SELECT
            t1.*,
            t1.work_order_code AS text,
            t1.id AS value,
            t2.factory_code factoryCode,
            t3.shift_code shiftCode
        FROM mes_production_work_order t1
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;
    }
}