Quellcode durchsuchen

调整目录结构

wuhb vor 3 Wochen
Ursprung
Commit
dcbdf8cd0f

+ 342 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsTaskInstockController.java

@@ -0,0 +1,342 @@
+package com.ktg.mes.rms.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.github.pagehelper.util.StringUtil;
+import com.ktg.common.constant.UserConstants;
+import com.ktg.mes.rms.service.IEmcsTaskInstockService;
+import com.ktg.mes.rms.domain.ClientRequest;
+import com.ktg.mes.rms.domain.RmsTaskInstock;
+import com.ktg.mes.rms.domain.RmsTaskInstockStat;
+import com.ktg.mes.rms.domain.RmsTaskStockResult;
+import com.ktg.mes.wm.domain.WmRmsBox;
+import com.ktg.mes.wm.service.IWmRmsBoxService;
+import com.ktg.system.service.ISysConfigService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.core.domain.AjaxResult;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.mes.rms.service.IRmsTaskInstockService;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.common.core.page.TableDataInfo;
+
+/**
+ * 扫码入库Controller
+ *
+ * @author wangm
+ * @date 2024-07-24
+ */
+@RestController
+@RequestMapping("/mes/md/instock")
+public class RmsTaskInstockController extends BaseController
+{
+    @Autowired
+    private IRmsTaskInstockService rmsTaskInstockService;
+    @Autowired
+    private IEmcsTaskInstockService emcsTaskInstockService;
+    @Autowired
+    private IWmRmsBoxService wmRmsBoxService;
+    @Autowired
+    private ISysConfigService sysConfigService;
+    /**
+     * 查询扫码入库列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RmsTaskInstock rmsTaskInstock)
+    {
+        startPage();
+        List<RmsTaskInstock> list = rmsTaskInstockService.selectRmsTaskInstockList(rmsTaskInstock);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询扫码入库列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:list')")
+    @GetMapping("/listSelf")
+    public TableDataInfo listSelf(RmsTaskInstock rmsTaskInstock)
+    {
+        startPage();
+        List<RmsTaskInstock> list = rmsTaskInstockService.selectRmsTaskInstockListSelf(rmsTaskInstock);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 导出扫码入库列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:export')")
+    @Log(title = "扫码入库", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RmsTaskInstock rmsTaskInstock)
+    {
+        List<RmsTaskInstock> list = rmsTaskInstockService.selectRmsTaskInstockList(rmsTaskInstock);
+        ExcelUtil<RmsTaskInstock> util = new ExcelUtil<RmsTaskInstock>(RmsTaskInstock.class);
+        util.exportExcel(response, list, "扫码入库数据");
+    }
+
+    /**
+     * 获取扫码入库详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:query')")
+    @GetMapping(value = "/{instockId}")
+    public AjaxResult getInfo(@PathVariable("instockId") Long instockId)
+    {
+        return AjaxResult.success(rmsTaskInstockService.selectRmsTaskInstockByInstockId(instockId));
+    }
+
+    /**
+     * 新增扫码入库
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:add')")
+    @Log(title = "扫码入库", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RmsTaskInstock rmsTaskInstock)
+    {
+        if(UserConstants.NOT_UNIQUE.equals(rmsTaskInstockService.checkErpInstockCodeUnique(rmsTaskInstock))){
+            return AjaxResult.error("新增入库"+rmsTaskInstock.getErpInstockCode()+"失败,入库单编码已存在");
+        }
+        rmsTaskInstock.setCreateBy(getUsername());
+        rmsTaskInstock.setStatus("0");
+        rmsTaskInstock.setFromType(3);
+        rmsTaskInstock.setIsErp(3);
+        return toAjax(rmsTaskInstockService.insertRmsTaskInstock(rmsTaskInstock));
+    }
+
+    /**
+     * 修改扫码入库
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:edit')")
+    @Log(title = "扫码入库", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RmsTaskInstock rmsTaskInstock)
+    {
+        if(UserConstants.NOT_UNIQUE.equals(rmsTaskInstockService.checkErpInstockCodeUnique(rmsTaskInstock))){
+            return AjaxResult.error("修改入库"+rmsTaskInstock.getErpInstockCode()+"失败,入库单编码已存在");
+        }
+        rmsTaskInstock.setUpdateBy(getUsername());
+        return toAjax(rmsTaskInstockService.updateRmsTaskInstockAndLine(rmsTaskInstock));
+    }
+
+    /**
+     * 删除扫码入库
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:remove')")
+    @Log(title = "扫码入库", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{instockIds}")
+    public AjaxResult remove(@PathVariable Long[] instockIds)
+    {
+        return toAjax(rmsTaskInstockService.deleteRmsTaskInstockByInstockIds(instockIds));
+    }
+
+    /**
+     * 手动入库
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:add')")
+    @Log(title = "手动入库", businessType = BusinessType.UPDATE)
+    @PostMapping("/manualInstock")
+    public AjaxResult manualInstock(@RequestBody RmsTaskInstock rmsTaskInstock)
+    {
+        rmsTaskInstock.setUpdateBy(getUsername());
+        return toAjax(rmsTaskInstockService.manualInstock(rmsTaskInstock));
+    }
+
+    /**
+     * 入库
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:edit')")
+    @Log(title = "自动入库", businessType = BusinessType.OTHER)
+    @PostMapping("/autoIn")
+    public AjaxResult autoIn(@RequestBody RmsTaskInstock rmsTaskInstock)
+    {
+        try{
+            if(rmsTaskInstock.getInstockId()==null) {
+                rmsTaskInstock.setCreateBy(getUsername());
+            }else{
+                rmsTaskInstock.setUpdateBy(getUsername());
+            }
+            rmsTaskInstock.setFromType(0);
+            rmsTaskInstock.setIsErp(0);
+            rmsTaskInstockService.autoInStock(rmsTaskInstock);
+        }catch (Exception ex){
+            return AjaxResult.error(ex.getMessage());
+        }
+        return AjaxResult.success("入库单创建成功");
+    }
+
+    /**
+     * 库位手动入库
+     */
+    @Log(title = "终端入库", businessType = BusinessType.OTHER)
+    @PostMapping("/clientIn")
+    public AjaxResult clientIn(@RequestBody ClientRequest clientRequest)
+    {
+        try{
+            String ipAddress = getLoginUser().getIpaddr();
+            clientRequest.setIp(ipAddress);
+            clientRequest.setDeviceCode(getDeviceCode());
+            String rmsAreaSize = sysConfigService.selectConfigByKey(UserConstants.rmsAreaSize);
+            if("1".equals(rmsAreaSize)){
+                //尺寸验证打开,默认为单物料出库 20250722
+                clientRequest.setFromType(4);
+            }
+            if(clientRequest.getFromType() == 2){
+                WmRmsBox rmsBox = wmRmsBoxService.selectWmRmsBoxByBoxCode(clientRequest.getBoxCode());
+                if(StringUtil.isEmpty(rmsBox.getItemOutCode())
+                        && !rmsBox.getWmRmsBoxItemList().isEmpty()){
+                    throw new Exception("当前料框没有出库单,不能再入库");
+                }
+                boolean isEmpty = wmRmsBoxService.clearBoxEmpty(rmsBox, clientRequest.getOperator());
+                if(isEmpty){
+                   return AjaxResult.success("空料框结单完成");
+                }
+            }
+            if(clientRequest.getFromType() == 4){
+                if(StringUtil.isEmpty(clientRequest.getItemCode())){
+                    return AjaxResult.error("物料编码不能为空");
+                }
+            }
+            rmsTaskInstockService.handInStock(clientRequest, getUsername());
+        }catch (Exception ex){
+            ex.printStackTrace();
+            return AjaxResult.error(ex.getMessage());
+        }
+        return AjaxResult.success("入库请求成功");
+    }
+
+    /**
+     * 查询入库单信息
+     */
+    @GetMapping(value = "/getInstockByCode")
+    public AjaxResult getInstockByCode(RmsTaskInstock rmsTaskInstock)
+    {
+        rmsTaskInstock = rmsTaskInstockService.getInstockByCode(rmsTaskInstock);
+        return AjaxResult.success(rmsTaskInstock);
+    }
+
+
+    /**
+     * AGV终端任务
+     */
+    @Log(title = "AGV终端任务", businessType = BusinessType.OTHER)
+    @PostMapping("/requestAgv")
+    public AjaxResult requestAgv(@RequestBody ClientRequest clientRequest)
+    {
+        try{
+            if(clientRequest.getFromType() == null){
+                return AjaxResult.error("入库类型不能为空");
+            }
+//            String ipAddress = getLoginUser().getIpaddr();
+//            rmsTaskInstockService.sendAgvTask(clientRequest, ipAddress);
+        }catch (Exception ex){
+            ex.printStackTrace();
+            return AjaxResult.error(ex.getMessage());
+        }
+        return AjaxResult.success("AGV请求已发送");
+    }
+
+    @Log(title = "基础修改", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateRmsTaskInstock")
+    public AjaxResult updateRmsTaskInstock(@RequestBody RmsTaskInstock rmsTaskInstock)
+    {
+        rmsTaskInstock.setUpdateBy(getUsername());
+        return toAjax(rmsTaskInstockService.updateRmsTaskInstock(rmsTaskInstock));
+    }
+
+    @GetMapping(value = "/selectErpStockInOrder")
+    public AjaxResult selectErpStockInOrder(RmsTaskInstock rmsTaskInstock) throws Exception
+    {
+        rmsTaskInstock.setCreateBy(getUsername());
+        RmsTaskInstock rmsTaskInstockSearch;
+        String erpSysOpen = sysConfigService.selectConfigByKey(UserConstants.erpSysOpen);
+        if(erpSysOpen.contains("3")){
+            // EMCS 入库单同步
+            rmsTaskInstockSearch = emcsTaskInstockService.selectErpStockInOrder(rmsTaskInstock);
+        }else if(erpSysOpen.contains("1")){
+            rmsTaskInstockSearch = rmsTaskInstockService.selectErpStockInOrder(rmsTaskInstock);
+        }else{
+            throw new Exception("没有配置关联的ERP系统");
+        }
+        return AjaxResult.success(rmsTaskInstockSearch);
+    }
+
+    @Log(title = "分拣修改入库单")
+    @PostMapping("/updateInstockForFj")
+    public AjaxResult updateInstockForFj(@RequestBody RmsTaskInstock rmsTaskInstock) throws Exception
+    {
+        if(UserConstants.NOT_UNIQUE.equals(rmsTaskInstockService.checkErpInstockCodeUnique(rmsTaskInstock))){
+            return AjaxResult.error("修改入库"+rmsTaskInstock.getErpInstockCode()+"失败,入库单编码已存在");
+        }
+        rmsTaskInstock.setUpdateBy(getUsername());
+        int result = rmsTaskInstockService.updateRmsTaskInstockAndLineForFj(rmsTaskInstock);
+        return toAjax(result);
+    }
+
+    @GetMapping("/listStock")
+    public TableDataInfo list(RmsTaskStockResult rmsTaskStockResult)
+    {
+        startPage();
+        List<RmsTaskStockResult> list = rmsTaskInstockService.selectRmsStockList(rmsTaskStockResult);
+        return getDataTable(list);
+    }
+
+    @Log(title = "入库单同步ERP")
+    @PostMapping("/syncErpForInstock")
+    public AjaxResult syncErpForInstock(@RequestBody RmsTaskInstock rmsTaskInstock) throws Exception
+    {
+        rmsTaskInstock.setUpdateBy(getUsername());
+        String erpSysOpen = sysConfigService.selectConfigByKey(UserConstants.erpSysOpen);
+        int result = 0;
+        if(erpSysOpen.contains("3")){
+            //EMCS手动同步
+            result = emcsTaskInstockService.syncErpForInstock(rmsTaskInstock);
+        }else if(erpSysOpen.contains("1")){
+            result = rmsTaskInstockService.syncErpForInstock(rmsTaskInstock);
+        }else{
+            throw new Exception("没有配置关联的ERP系统");
+        }
+        return toAjax(result);
+    }
+
+    @Log(title = "入库统计分页")
+    @GetMapping("/listInStat")
+    public TableDataInfo listInStat(RmsTaskInstock rmsTaskInstock)
+    {
+        startPage();
+        List<RmsTaskInstock> rmsTaskInstocks = rmsTaskInstockService.selectRmsTaskInstockListSelf(rmsTaskInstock);
+        TableDataInfo dataTable = getDataTable(rmsTaskInstocks);
+        List<RmsTaskInstockStat> list = rmsTaskInstockService.convertRmsTaskInstockStatList(rmsTaskInstocks);
+        TableDataInfo dataTableConvert = getDataTable(list);
+        dataTableConvert.setTotal(dataTable.getTotal());
+        return dataTableConvert;
+    }
+
+    @GetMapping(value = "/selectErpStockInOrderList")
+    public AjaxResult selectErpStockInOrderList(RmsTaskInstock rmsTaskInstock) throws Exception
+    {
+        String erpSysOpen = sysConfigService.selectConfigByKey(UserConstants.erpSysOpen);
+        List<RmsTaskInstock> list = new ArrayList<>();
+        if(erpSysOpen.contains("3")){
+            //EMCS采购单号获取多个入入库单
+            list = emcsTaskInstockService.selectErpStockInOrderList(rmsTaskInstock);
+        }else if(erpSysOpen.contains("1")){
+            list = rmsTaskInstockService.selectErpStockInOrderList(rmsTaskInstock);
+        }else{
+            throw new Exception("没有配置关联的ERP系统");
+        }
+        return AjaxResult.success(list);
+    }
+}

+ 117 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsTaskInstockLineAreaController.java

@@ -0,0 +1,117 @@
+package com.ktg.mes.rms.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.core.domain.AjaxResult;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.mes.rms.domain.RmsTaskInstockLineArea;
+import com.ktg.mes.rms.service.IRmsTaskInstockLineAreaService;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.common.core.page.TableDataInfo;
+
+/**
+ * 入库明细库位Controller
+ * 
+ * @author wuhb
+ * @date 2025-03-11
+ */
+@RestController
+@RequestMapping("/mes/md/inStockLineArea")
+public class RmsTaskInstockLineAreaController extends BaseController
+{
+    @Autowired
+    private IRmsTaskInstockLineAreaService rmsTaskInstockLineAreaService;
+
+    /**
+     * 查询入库明细库位列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RmsTaskInstockLineArea rmsTaskInstockLineArea)
+    {
+        startPage();
+        List<RmsTaskInstockLineArea> list = rmsTaskInstockLineAreaService.selectRmsTaskInstockLineAreaList(rmsTaskInstockLineArea);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出入库明细库位列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:export')")
+    @Log(title = "入库明细库位", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RmsTaskInstockLineArea rmsTaskInstockLineArea)
+    {
+        List<RmsTaskInstockLineArea> list = rmsTaskInstockLineAreaService.selectRmsTaskInstockLineAreaList(rmsTaskInstockLineArea);
+        ExcelUtil<RmsTaskInstockLineArea> util = new ExcelUtil<RmsTaskInstockLineArea>(RmsTaskInstockLineArea.class);
+        util.exportExcel(response, list, "入库明细库位数据");
+    }
+
+    /**
+     * 获取入库明细库位详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:query')")
+    @GetMapping(value = "/{lineAreaId}")
+    public AjaxResult getInfo(@PathVariable("lineAreaId") Long lineAreaId)
+    {
+        return AjaxResult.success(rmsTaskInstockLineAreaService.selectRmsTaskInstockLineAreaByLineAreaId(lineAreaId));
+    }
+
+    /**
+     * 新增入库明细库位
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:add')")
+    @Log(title = "入库明细库位", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RmsTaskInstockLineArea rmsTaskInstockLineArea)
+    {
+        return toAjax(rmsTaskInstockLineAreaService.insertRmsTaskInstockLineArea(rmsTaskInstockLineArea));
+    }
+
+    @Log(title = "PAD入库", businessType = BusinessType.INSERT)
+    @PostMapping(value = "saveArea")
+    public AjaxResult saveArea(@RequestBody RmsTaskInstockLineArea rmsTaskInstockLineArea)
+    {
+        try {
+            int ix = rmsTaskInstockLineAreaService.saveInstockLineArea(rmsTaskInstockLineArea);
+            return toAjax(ix);
+        } catch (Exception e) {
+            logger.error("入库保存失败:", e);
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 修改入库明细库位
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:edit')")
+    @Log(title = "入库明细库位", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RmsTaskInstockLineArea rmsTaskInstockLineArea)
+    {
+        return toAjax(rmsTaskInstockLineAreaService.updateRmsTaskInstockLineArea(rmsTaskInstockLineArea));
+    }
+
+    /**
+     * 删除入库明细库位
+     */
+    @PreAuthorize("@ss.hasPermi('md:instock:remove')")
+    @Log(title = "入库明细库位", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{lineAreaIds}")
+    public AjaxResult remove(@PathVariable Long[] lineAreaIds)
+    {
+        return toAjax(rmsTaskInstockLineAreaService.deleteRmsTaskInstockLineAreaByLineAreaIds(lineAreaIds));
+    }
+}

+ 165 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsTaskInstockLineController.java

@@ -0,0 +1,165 @@
+package com.ktg.mes.rms.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ktg.common.utils.StringUtils;
+import com.ktg.mes.wm.domain.WmStorageArea;
+import com.ktg.mes.wm.service.IWmStorageAreaService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.core.domain.AjaxResult;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.mes.rms.domain.RmsTaskInstockLine;
+import com.ktg.mes.rms.service.IRmsTaskInstockLineService;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.common.core.page.TableDataInfo;
+
+/**
+ * 扫码入库明细Controller
+ * 
+ * @author wangm
+ * @date 2024-07-24
+ */
+@RestController
+@RequestMapping("/mes/md/line")
+public class RmsTaskInstockLineController extends BaseController
+{
+    @Autowired
+    private IRmsTaskInstockLineService rmsTaskInstockLineService;
+    @Autowired
+    private IWmStorageAreaService wmStorageAreaService;
+
+    /**
+     * 查询扫码入库明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RmsTaskInstockLine rmsTaskInstockLine)
+    {
+        startPage();
+        List<RmsTaskInstockLine> list = rmsTaskInstockLineService.selectRmsTaskInstockLineList(rmsTaskInstockLine);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出扫码入库明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:export')")
+    @Log(title = "扫码入库明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RmsTaskInstockLine rmsTaskInstockLine)
+    {
+        List<RmsTaskInstockLine> list = rmsTaskInstockLineService.selectRmsTaskInstockLineList(rmsTaskInstockLine);
+        ExcelUtil<RmsTaskInstockLine> util = new ExcelUtil<RmsTaskInstockLine>(RmsTaskInstockLine.class);
+        util.exportExcel(response, list, "扫码入库明细数据");
+    }
+
+    /**
+     * 获取扫码入库明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:query')")
+    @GetMapping(value = "/{lineId}")
+    public AjaxResult getInfo(@PathVariable("lineId") Long lineId)
+    {
+        return AjaxResult.success(rmsTaskInstockLineService.selectRmsTaskInstockLineByLineId(lineId));
+    }
+
+    /**
+     * 新增扫码入库明细
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:add')")
+    @Log(title = "扫码入库明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RmsTaskInstockLine rmsTaskInstockLine)
+    {
+        if(StringUtils.isNotNull(rmsTaskInstockLine.getAreaId())){
+            WmStorageArea area = wmStorageAreaService.selectWmStorageAreaByAreaId(rmsTaskInstockLine.getAreaId());
+            rmsTaskInstockLine.setAreaCode(area.getAreaCode());
+        }
+        return toAjax(rmsTaskInstockLineService.insertRmsTaskInstockLine(rmsTaskInstockLine));
+    }
+
+    /**
+     * 修改扫码入库明细
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:edit')")
+    @Log(title = "扫码入库明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RmsTaskInstockLine rmsTaskInstockLine)
+    {
+        return toAjax(rmsTaskInstockLineService.updateRmsTaskInstockLine(rmsTaskInstockLine));
+    }
+
+    /**
+     * 删除扫码入库明细
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:remove')")
+    @Log(title = "扫码入库明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{lineIds}")
+    public AjaxResult remove(@PathVariable Long[] lineIds)
+    {
+        return toAjax(rmsTaskInstockLineService.deleteRmsTaskInstockLineByLineIds(lineIds));
+    }
+
+    /**
+     * 获取扫码入库明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:query')")
+    @GetMapping("/printer")
+    public AjaxResult printer(RmsTaskInstockLine rmsTaskInstockLine)
+    {
+        rmsTaskInstockLineService.printerItemLabel(rmsTaskInstockLine);
+        return AjaxResult.success(1);
+    }
+
+    @Log(title = "分拣修改入库明细")
+    @PostMapping("/updateInstockLineForFj")
+    public AjaxResult updateInstockLineForFj(@RequestBody RmsTaskInstockLine rmsTaskInstockLine) throws Exception
+    {
+        rmsTaskInstockLine.setUpdateBy(getUsername());
+        int result = rmsTaskInstockLineService.updateInstockLineForFj(rmsTaskInstockLine);
+        return toAjax(result);
+    }
+
+    /**
+     * 查找当前操作人员当天的入库记录
+     * @param rmsTaskInstockLine
+     * @return
+     */
+    @GetMapping(value = "/getInstockLinesRecord")
+    public AjaxResult getInstockLinesRecord(RmsTaskInstockLine rmsTaskInstockLine)
+    {
+        rmsTaskInstockLine.setUpdateBy(getUsername());
+        List<RmsTaskInstockLine> list = rmsTaskInstockLineService.getInstockLinesRecord(rmsTaskInstockLine);
+        return AjaxResult.success(list);
+    }
+
+    @GetMapping(value = "/getEmptyArea")
+    public AjaxResult getEmptyArea(RmsTaskInstockLine rmsTaskInstockLine){
+        if(rmsTaskInstockLine.getLineId() == null){
+            return AjaxResult.error("入库明细ID不能为空");
+        }
+        try {
+            rmsTaskInstockLine = rmsTaskInstockLineService.selectRmsTaskInstockLineByLineId(rmsTaskInstockLine.getLineId());
+            List<WmStorageArea> storageAreaList = rmsTaskInstockLineService.getEmptyArea(rmsTaskInstockLine);
+            if (storageAreaList.size() > 0) {
+                return AjaxResult.success(storageAreaList.get(0));
+            }
+            return AjaxResult.success();
+        }catch (Exception e){
+            logger.error("获取推荐库位异常:", e);
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+}

+ 284 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsTaskOutstockController.java

@@ -0,0 +1,284 @@
+package com.ktg.mes.rms.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ktg.common.constant.UserConstants;
+import com.ktg.common.utils.StringUtils;
+import com.ktg.mes.rms.domain.RmsTaskOutstockStat;
+import com.ktg.mes.rms.service.IEmcsTaskOutstockService;
+import com.ktg.mes.rms.domain.ClientRequest;
+import com.ktg.system.service.ISysConfigService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.core.domain.AjaxResult;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.mes.rms.domain.RmsTaskOutstock;
+import com.ktg.mes.rms.service.IRmsTaskOutstockService;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.common.core.page.TableDataInfo;
+
+/**
+ * ERP出库Controller
+ *
+ * @author wangm
+ * @date 2024-07-25
+ */
+@RestController
+@RequestMapping("/mes/md/outstock")
+public class RmsTaskOutstockController extends BaseController
+{
+    @Autowired
+    private IRmsTaskOutstockService rmsTaskOutstockService;
+    @Autowired
+    private IEmcsTaskOutstockService emcsTaskOutstockService;
+    @Autowired
+    private ISysConfigService sysConfigService;
+    /**
+     * 查询ERP出库列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RmsTaskOutstock rmsTaskOutstock)
+    {
+        startPage();
+        List<RmsTaskOutstock> list = rmsTaskOutstockService.selectRmsTaskOutstockList(rmsTaskOutstock);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出ERP出库列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:export')")
+    @Log(title = "ERP出库", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RmsTaskOutstock rmsTaskOutstock)
+    {
+        List<RmsTaskOutstock> list = rmsTaskOutstockService.selectRmsTaskOutstockList(rmsTaskOutstock);
+        ExcelUtil<RmsTaskOutstock> util = new ExcelUtil<RmsTaskOutstock>(RmsTaskOutstock.class);
+        util.exportExcel(response, list, "ERP出库数据");
+    }
+
+    /**
+     * 获取ERP出库详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:query')")
+    @GetMapping(value = "/{outstockId}")
+    public AjaxResult getInfo(@PathVariable("outstockId") Long outstockId)
+    {
+        return AjaxResult.success(rmsTaskOutstockService.selectRmsTaskOutstockByOutstockId(outstockId));
+    }
+
+    /**
+     * 新增ERP出库
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:add')")
+    @Log(title = "ERP出库", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RmsTaskOutstock rmsTaskOutstock)
+    {
+        if(UserConstants.NOT_UNIQUE.equals(rmsTaskOutstockService.checkErpOutstockCodeUnique(rmsTaskOutstock))){
+            return AjaxResult.error("新增出库"+rmsTaskOutstock.getErpOutstockCode()+"失败,出库单编码已存在");
+        }
+        rmsTaskOutstock.setCreateBy(getUsername());
+        rmsTaskOutstock.setFromType(0);
+        return toAjax(rmsTaskOutstockService.insertRmsTaskOutstock(rmsTaskOutstock));
+    }
+
+    /**
+     * 修改ERP出库
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:edit')")
+    @Log(title = "ERP出库", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RmsTaskOutstock rmsTaskOutstock)
+    {
+        if(UserConstants.NOT_UNIQUE.equals(rmsTaskOutstockService.checkErpOutstockCodeUnique(rmsTaskOutstock))){
+            return AjaxResult.error("修改出库"+rmsTaskOutstock.getErpOutstockCode()+"失败,出库单编码已存在");
+        }
+        rmsTaskOutstock.setUpdateBy(getUsername());
+        return toAjax(rmsTaskOutstockService.updateRmsTaskOutstockAndLine(rmsTaskOutstock));
+    }
+
+    /**
+     * 删除ERP出库
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:remove')")
+    @Log(title = "ERP出库", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{outstockIds}")
+    public AjaxResult remove(@PathVariable Long[] outstockIds)
+    {
+        return toAjax(rmsTaskOutstockService.deleteRmsTaskOutstockByOutstockIds(outstockIds));
+    }
+
+    /**
+     * 手动出库
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:add')")
+    @Log(title = "手动出库", businessType = BusinessType.UPDATE)
+    @PostMapping("/manualOutstock")
+    public AjaxResult manualOutstock(@RequestBody RmsTaskOutstock rmsTaskOutstock) throws Exception {
+        rmsTaskOutstock.setUpdateBy(getUsername());
+        return toAjax(rmsTaskOutstockService.manualOutstock(rmsTaskOutstock));
+    }
+
+    /**
+     * 出库
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:edit')")
+    @Log(title = "自动出库", businessType = BusinessType.OTHER)
+    @PostMapping("/autoOut")
+    public AjaxResult autoOut(@RequestBody RmsTaskOutstock rmsTaskOutstock)
+    {
+        if(rmsTaskOutstock.getOutstockId()==null) {
+            rmsTaskOutstock.setCreateBy(getUsername());
+            rmsTaskOutstock.setFromType(0);
+            int i = rmsTaskOutstockService.insertRmsTaskOutstock(rmsTaskOutstock);
+            if (i == 0) {
+                return AjaxResult.error("出库单创建失败");
+            }
+        }else{
+            rmsTaskOutstock.setUpdateBy(getUsername());
+            int i = rmsTaskOutstockService.updateRmsTaskOutstockAndLine(rmsTaskOutstock);
+            if (i == 0) {
+                return AjaxResult.error("出库单修改失败");
+            }
+        }
+        return AjaxResult.success("出库单创建成功");
+    }
+
+    /**
+     * 终端扫码出库
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:edit')")
+    @Log(title = "终端扫码出库", businessType = BusinessType.OTHER)
+    @PostMapping("/clientOut")
+    public AjaxResult clientOut(@RequestBody ClientRequest clientRequest)
+    {
+        try{
+            if(clientRequest.getFromType() == null){
+                return AjaxResult.error("出库类型不能为空");
+            }
+            clientRequest.setDeviceCode(getDeviceCode());
+            if(clientRequest.getAreaId() == null
+                    && StringUtils.isEmpty(clientRequest.getBoxCode())
+                    && StringUtils.isEmpty(clientRequest.getItemCode())){
+                return AjaxResult.error("参数不足,出库失败");
+            }
+            String rmsAreaSize = sysConfigService.selectConfigByKey(UserConstants.rmsAreaSize);
+            if("1".equals(rmsAreaSize)){
+                //尺寸验证打开,默认为单物料出库 20250722
+                clientRequest.setFromType(4);
+            }
+            rmsTaskOutstockService.handOutStock(clientRequest, getUsername());
+        }catch (Exception ex){
+            ex.printStackTrace();
+            return AjaxResult.error(ex.getMessage());
+        }
+        return AjaxResult.success("下架请求已发送");
+    }
+
+    @GetMapping(value = "/getOutstockByCode")
+    public AjaxResult getOutstockByCode(RmsTaskOutstock rmsTaskOutstock)
+    {
+        RmsTaskOutstock rmsTaskOutstockSearch = new RmsTaskOutstock();
+        rmsTaskOutstockSearch.setErpOutstockCode(rmsTaskOutstock.getErpOutstockCode());
+        if(StringUtils.isNotEmpty(rmsTaskOutstock.getErpOutstockCode())){
+            if(rmsTaskOutstock.getIsSplit() != null){
+                rmsTaskOutstockSearch.setIsSplit(rmsTaskOutstock.getIsSplit());
+            }
+            RmsTaskOutstock outstock = rmsTaskOutstockService.selectRmsTaskOutstock(rmsTaskOutstockSearch);
+            return AjaxResult.success(outstock);
+        }
+        return AjaxResult.success(rmsTaskOutstockSearch);
+    }
+
+    @GetMapping(value = "/selectErpStockOutOrder")
+    public AjaxResult selectErpStockOutOrder(RmsTaskOutstock rmsTaskOutstock) throws Exception
+    {
+        rmsTaskOutstock.setCreateBy(getUsername());
+        String erpSysOpen = sysConfigService.selectConfigByKey(UserConstants.erpSysOpen);
+        RmsTaskOutstock rmsTaskOutstockSearch = null;
+        if(erpSysOpen.contains("3")){
+            //EMCS 出库单同步
+            rmsTaskOutstockSearch = emcsTaskOutstockService.selectErpStockOutOrder(rmsTaskOutstock);
+        }else if(erpSysOpen.contains("1")){
+            rmsTaskOutstockSearch = rmsTaskOutstockService.selectErpStockOutOrder(rmsTaskOutstock);
+        }else{
+            throw new Exception("没有配置关联的ERP系统");
+        }
+        return AjaxResult.success(rmsTaskOutstockSearch);
+    }
+
+    @Log(title = "基础修改", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateRmsTaskOutstock")
+    public AjaxResult updateRmsTaskOutstock(@RequestBody RmsTaskOutstock rmsTaskOutstock)
+    {
+        rmsTaskOutstock.setUpdateBy(getUsername());
+        return toAjax(rmsTaskOutstockService.updateRmsTaskOutstock(rmsTaskOutstock));
+    }
+
+    @GetMapping("/orderList")
+    public AjaxResult orderList(RmsTaskOutstock rmsTaskOutstock)
+    {
+        RmsTaskOutstock outstock = rmsTaskOutstockService.selectRmsTaskOutstock(rmsTaskOutstock);
+        return AjaxResult.success(outstock);
+    }
+
+    @Log(title = "出库单同步ERP")
+    @PostMapping("/syncErpForOutstock")
+    public AjaxResult syncErpForOutstock(@RequestBody RmsTaskOutstock rmsTaskOutstock) throws Exception
+    {
+        rmsTaskOutstock.setUpdateBy(getUsername());
+        String erpSysOpen = sysConfigService.selectConfigByKey(UserConstants.erpSysOpen);
+        int result = 0;
+        if(erpSysOpen.contains("3")){
+            // EMCS 手动同步
+            result = emcsTaskOutstockService.syncErpForOutstock(rmsTaskOutstock);
+        }else if(erpSysOpen.contains("1")){
+            result = rmsTaskOutstockService.syncErpForOutstock(rmsTaskOutstock);
+        }else{
+            throw new Exception("没有配置关联的ERP系统");
+        }
+        return toAjax(result);
+    }
+
+    @Log(title = "出库统计分页")
+    @GetMapping("/listOutStat")
+    public TableDataInfo listOutStat(RmsTaskOutstock rmsTaskOutstock)
+    {
+        startPage();
+        List<RmsTaskOutstock> rmsTaskOutstocks = rmsTaskOutstockService.selectRmsTaskOutstockList(rmsTaskOutstock);
+        TableDataInfo dataTable = getDataTable(rmsTaskOutstocks);
+        List<RmsTaskOutstockStat> list = rmsTaskOutstockService.convertRmsTaskOutstockStatList(rmsTaskOutstocks);
+        TableDataInfo dataTableConvert = getDataTable(list);
+        dataTableConvert.setTotal(dataTable.getTotal());
+        return dataTableConvert;
+    }
+
+    @GetMapping(value = "/selectErpStockOutOrderList")
+    public AjaxResult selectErpStockOutOrderList(RmsTaskOutstock rmsTaskOutstock) throws Exception
+    {
+        String erpSysOpen = sysConfigService.selectConfigByKey(UserConstants.erpSysOpen);
+        List<RmsTaskOutstock> list = null;
+        if(erpSysOpen.contains("3")){
+            // EMCS 销售单获取多个出库单同步
+            list = emcsTaskOutstockService.selectErpStockOutOrderList(rmsTaskOutstock);
+        }else if(erpSysOpen.contains("1")){
+            list = rmsTaskOutstockService.selectErpStockOutOrderList(rmsTaskOutstock);
+        }else{
+            throw new Exception("没有配置关联的ERP系统");
+        }
+        return AjaxResult.success(list);
+    }
+}

+ 118 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsTaskOutstockLineAreaController.java

@@ -0,0 +1,118 @@
+package com.ktg.mes.rms.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.core.domain.AjaxResult;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.mes.rms.domain.RmsTaskOutstockLineArea;
+import com.ktg.mes.rms.service.IRmsTaskOutstockLineAreaService;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.common.core.page.TableDataInfo;
+
+/**
+ * 出库明细库位Controller
+ * 
+ * @author wuhb
+ * @date 2025-03-13
+ */
+@RestController
+@RequestMapping("/mes/md/outstockLineArea")
+public class RmsTaskOutstockLineAreaController extends BaseController
+{
+    @Autowired
+    private IRmsTaskOutstockLineAreaService rmsTaskOutstockLineAreaService;
+
+    /**
+     * 查询出库明细库位列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RmsTaskOutstockLineArea rmsTaskOutstockLineArea)
+    {
+        startPage();
+        List<RmsTaskOutstockLineArea> list = rmsTaskOutstockLineAreaService.selectRmsTaskOutstockLineAreaList(rmsTaskOutstockLineArea);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出出库明细库位列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:export')")
+    @Log(title = "出库明细库位", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RmsTaskOutstockLineArea rmsTaskOutstockLineArea)
+    {
+        List<RmsTaskOutstockLineArea> list = rmsTaskOutstockLineAreaService.selectRmsTaskOutstockLineAreaList(rmsTaskOutstockLineArea);
+        ExcelUtil<RmsTaskOutstockLineArea> util = new ExcelUtil<RmsTaskOutstockLineArea>(RmsTaskOutstockLineArea.class);
+        util.exportExcel(response, list, "出库明细库位数据");
+    }
+
+    /**
+     * 获取出库明细库位详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:query')")
+    @GetMapping(value = "/{lineAreaId}")
+    public AjaxResult getInfo(@PathVariable("lineAreaId") Long lineAreaId)
+    {
+        return AjaxResult.success(rmsTaskOutstockLineAreaService.selectRmsTaskOutstockLineAreaByLineAreaId(lineAreaId));
+    }
+
+    /**
+     * 新增出库明细库位
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:add')")
+    @Log(title = "出库明细库位", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RmsTaskOutstockLineArea rmsTaskOutstockLineArea)
+    {
+        return toAjax(rmsTaskOutstockLineAreaService.insertRmsTaskOutstockLineArea(rmsTaskOutstockLineArea));
+    }
+
+    /**
+     * 修改出库明细库位
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:edit')")
+    @Log(title = "出库明细库位", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RmsTaskOutstockLineArea rmsTaskOutstockLineArea)
+    {
+        return toAjax(rmsTaskOutstockLineAreaService.updateRmsTaskOutstockLineArea(rmsTaskOutstockLineArea));
+    }
+
+    /**
+     * 删除出库明细库位
+     */
+    @PreAuthorize("@ss.hasPermi('md:outstock:remove')")
+    @Log(title = "出库明细库位", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{lineAreaIds}")
+    public AjaxResult remove(@PathVariable Long[] lineAreaIds)
+    {
+        return toAjax(rmsTaskOutstockLineAreaService.deleteRmsTaskOutstockLineAreaByLineAreaIds(lineAreaIds));
+    }
+
+    @Log(title = "PAD出库", businessType = BusinessType.INSERT)
+    @PostMapping(value = "saveArea")
+    public AjaxResult saveArea(@RequestBody RmsTaskOutstockLineArea rmsTaskOutstockLineArea)
+    {
+        try {
+            int ix = rmsTaskOutstockLineAreaService.saveOutstockLineArea(rmsTaskOutstockLineArea);
+            return toAjax(ix);
+        } catch (Exception e) {
+            logger.error("出库保存失败:", e);
+            return AjaxResult.error(e.getMessage());
+        }
+    }
+}

+ 180 - 0
mes/ktg-mes/src/main/java/com/ktg/mes/rms/controller/RmsTaskOutstockLineController.java

@@ -0,0 +1,180 @@
+package com.ktg.mes.rms.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ktg.common.annotation.Log;
+import com.ktg.common.core.controller.BaseController;
+import com.ktg.common.core.domain.AjaxResult;
+import com.ktg.common.enums.BusinessType;
+import com.ktg.mes.rms.domain.RmsTaskOutstockLine;
+import com.ktg.mes.rms.service.IRmsTaskOutstockLineService;
+import com.ktg.common.utils.poi.ExcelUtil;
+import com.ktg.common.core.page.TableDataInfo;
+
+/**
+ * ERP出库明细Controller
+ *
+ * @author wangm
+ * @date 2024-07-25
+ */
+@RestController
+@RequestMapping("/mes/md/outstockline")
+public class RmsTaskOutstockLineController extends BaseController
+{
+    @Autowired
+    private IRmsTaskOutstockLineService rmsTaskOutstockLineService;
+
+    /**
+     * 查询ERP出库明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        startPage();
+        List<RmsTaskOutstockLine> list = rmsTaskOutstockLineService.selectRmsTaskOutstockLineList(rmsTaskOutstockLine);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出ERP出库明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:export')")
+    @Log(title = "ERP出库明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        List<RmsTaskOutstockLine> list = rmsTaskOutstockLineService.selectRmsTaskOutstockLineList(rmsTaskOutstockLine);
+        ExcelUtil<RmsTaskOutstockLine> util = new ExcelUtil<RmsTaskOutstockLine>(RmsTaskOutstockLine.class);
+        util.exportExcel(response, list, "ERP出库明细数据");
+    }
+
+    /**
+     * 获取ERP出库明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:query')")
+    @GetMapping(value = "/{lineId}")
+    public AjaxResult getInfo(@PathVariable("lineId") Long lineId)
+    {
+        return AjaxResult.success(rmsTaskOutstockLineService.selectRmsTaskOutstockLineByLineId(lineId));
+    }
+
+    /**
+     * 新增ERP出库明细
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:add')")
+    @Log(title = "ERP出库明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        rmsTaskOutstockLine.setCreateBy(getUsername());
+        return toAjax(rmsTaskOutstockLineService.insertRmsTaskOutstockLine(rmsTaskOutstockLine));
+    }
+
+    /**
+     * 修改ERP出库明细
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:edit')")
+    @Log(title = "ERP出库明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        rmsTaskOutstockLine.setUpdateBy(getUsername());
+        return toAjax(rmsTaskOutstockLineService.updateRmsTaskOutstockLine(rmsTaskOutstockLine));
+    }
+
+    /**
+     * 删除ERP出库明细
+     */
+    @PreAuthorize("@ss.hasPermi('md:line:remove')")
+    @Log(title = "ERP出库明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{lineIds}")
+    public AjaxResult remove(@PathVariable Long[] lineIds)
+    {
+        return toAjax(rmsTaskOutstockLineService.deleteRmsTaskOutstockLineByLineIds(lineIds));
+    }
+
+    /**
+     * 打印出库标签
+     */
+    @GetMapping("/printer")
+    public AjaxResult printer(RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        try {
+            rmsTaskOutstockLineService.printerItemLabel(rmsTaskOutstockLine);
+        } catch (Exception e) {
+            logger.error("打印异常:", e);
+            return AjaxResult.error(e.getMessage());
+        }
+        return AjaxResult.success(1);
+    }
+
+    /**
+     * 出库明细核对
+     */
+    @PostMapping("/checkOutLine")
+    public AjaxResult checkOutLine(@RequestBody RmsTaskOutstockLine rmsTaskOutstockLine) throws Exception
+    {
+        rmsTaskOutstockLine.setUpdateBy(getUsername());
+        return toAjax(rmsTaskOutstockLineService.checkOutLine(rmsTaskOutstockLine));
+    }
+
+    /**
+     * 查找已核对未重新入库的出库明细
+     * @param rmsTaskOutstockLine
+     * @return
+     */
+    @GetMapping(value = "/getOutstockLinesInXb")
+    public AjaxResult getOutstockLinesInXb(RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        List<RmsTaskOutstockLine> list = rmsTaskOutstockLineService.getOutstockLinesInXb(rmsTaskOutstockLine);
+        return AjaxResult.success(list);
+    }
+
+    /**
+     * 查找当前操作人员当天的出库记录
+     * @param rmsTaskOutstockLine
+     * @return
+     */
+    @GetMapping(value = "/getOutstockLinesRecord")
+    public AjaxResult getOutstockLinesRecord(RmsTaskOutstockLine rmsTaskOutstockLine)
+    {
+        rmsTaskOutstockLine.setUpdateBy(getUsername());
+        List<RmsTaskOutstockLine> list = rmsTaskOutstockLineService.getOutstockLinesRecord(rmsTaskOutstockLine);
+        return AjaxResult.success(list);
+    }
+
+
+    @PostMapping("/cancelPushLine")
+    public AjaxResult cancelPushPool(@RequestBody RmsTaskOutstockLine rmsTaskOutstockLine){
+        try{
+            rmsTaskOutstockLineService.cancelPushPool(rmsTaskOutstockLine);
+            return AjaxResult.success("取消成功");
+        }catch (Exception ex){
+            return AjaxResult.error(ex.getMessage());
+        }
+    }
+
+    /**
+     * 料框或库位换绑
+     * @param rmsTaskOutstockLine
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/changeBoxOrAreaForOutLine")
+    public AjaxResult changeBoxOrAreaForOutLine(@RequestBody RmsTaskOutstockLine rmsTaskOutstockLine) throws Exception
+    {
+        return toAjax(rmsTaskOutstockLineService.changeBoxOrAreaForOutLine(rmsTaskOutstockLine));
+    }
+}