From 8426e2a2cbbf5bd6b36f757210b4afa266ba03c5 Mon Sep 17 00:00:00 2001 From: liuxy Date: Tue, 3 Jun 2025 16:46:46 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9A=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=9B=9E=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/wms/ext/service/WmsToErpService.java | 26 ++ .../ext/service/impl/WmsToErpServiceImpl.java | 54 +++ .../controller/ReturnController.java | 55 +++ .../service/ReturnService.java | 45 +++ .../service/impl/RetrunServiceImpl.java | 197 ++++++++++ .../{XgAgvDeviceDriver.xml => WmsToErp.xml} | 14 +- .../src/main/resources/logback-spring.xml | 4 +- wms/nladmin-ui/src/utils/nladmin.js | 6 +- .../wms/st/inAndOutReturn/inandoutreturn.js | 43 +++ .../src/views/wms/st/inAndOutReturn/index.vue | 355 ++++++++++++++++++ 10 files changed, 783 insertions(+), 16 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToErpService.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ReturnController.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/ReturnService.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RetrunServiceImpl.java rename wms/nladmin-system/nlsso-server/src/main/resources/log/{XgAgvDeviceDriver.xml => WmsToErp.xml} (67%) create mode 100644 wms/nladmin-ui/src/views/wms/st/inAndOutReturn/inandoutreturn.js create mode 100644 wms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToErpService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToErpService.java new file mode 100644 index 0000000..654023f --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/WmsToErpService.java @@ -0,0 +1,26 @@ +package org.nl.wms.ext.service; + +import com.alibaba.fastjson.JSONObject; + +/** + *

+ * WMS调用ERP 服务类 + *

+ * + * @author Liuxy + * @since 2025-06-03 + */ +public interface WmsToErpService { + + /** + * 出入库单据回传 + * @param whereJson { + * data: [] + * } + * @return JSONObject { + * status: 200 / !=200 + * message: 信息 + * } + */ + JSONObject uploadErp(JSONObject whereJson); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java new file mode 100644 index 0000000..45bfa41 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/service/impl/WmsToErpServiceImpl.java @@ -0,0 +1,54 @@ +package org.nl.wms.ext.service.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.SpringContextHolder; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.service.WmsToErpService; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +/** + *

+ * WMS调用ERP 实现类 + *

+ * + * @author Liuxy + * @since 2025-06-03 + */ +@Service +@Slf4j +public class WmsToErpServiceImpl implements WmsToErpService { + + @Override + public JSONObject uploadErp(JSONObject whereJson) { + log.info("uploadErp接口输入参数为:-------------------" + whereJson.toString()); + JSONObject result = new JSONObject(); + + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ERP_URL").getValue(); + String api = "CamstarApi/MomRollBakeInBound"; + url = url + api; + + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(whereJson)) + .execute().body(); + result = JSONObject.parseObject(resultMsg); + log.info("uploadErp接口输出参数为:-------------------" + result.toString()); + + + Integer status = result.getInteger("status"); + if (status != HttpStatus.OK.value()) { + throw new BadRequestException(result.getString("message")); + } + + } catch (Exception e) { + throw new BadRequestException("ERP提示错误:" + e.getMessage()); + } + return result; + + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ReturnController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ReturnController.java new file mode 100644 index 0000000..efedaed --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/controller/ReturnController.java @@ -0,0 +1,55 @@ +package org.nl.wms.warehouse_management.controller; + + +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.base.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.warehouse_management.service.ReturnService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + *

+ * 出入库回传 控制层 + *

+ * + * @author Liuxy + * @since 2025-06-03 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/iosReturn") +@Slf4j +public class ReturnController { + + @Autowired + private ReturnService returnService; + + @GetMapping + @Log("查询出入库单") + public ResponseEntity query(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(returnService.queryAll(whereJson, page)), HttpStatus.OK); + } + + @PostMapping("/upload") + @Log("回传") + public ResponseEntity upload(@RequestBody JSONObject whereJson) { + returnService.upload(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/disupload") + @Log("不回传") + public ResponseEntity disupload(@RequestBody JSONObject whereJson) { + returnService.disupload(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/ReturnService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/ReturnService.java new file mode 100644 index 0000000..c82cb50 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/ReturnService.java @@ -0,0 +1,45 @@ +package org.nl.wms.warehouse_management.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.warehouse_management.service.dao.IOStorInv; + +import java.util.Map; + + +/** + *

+ * 出入库回传 服务类 + *

+ * + * @author Liuxy + * @since 2025-06-03 + */ +public interface ReturnService extends IService { + + /** + * 分页查询 + * @param whereJson : {查询参数} + * @param page : 分页对象 + * @return 返回结果 + */ + IPage queryAll(Map whereJson, PageQuery page); + + /** + * 回传 + * @param whereJson { + * rows: [] + * } + */ + void upload(JSONObject whereJson); + + /** + * 不回传 + * @param whereJson { + * rows: [] + * } + */ + void disupload(JSONObject whereJson); +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RetrunServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RetrunServiceImpl.java new file mode 100644 index 0000000..32ee0d1 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RetrunServiceImpl.java @@ -0,0 +1,197 @@ +package org.nl.wms.warehouse_management.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; +import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService; +import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; +import org.nl.wms.basedata_manage.service.dao.MdPbMeasureunit; +import org.nl.wms.ext.service.WmsToErpService; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.ReturnService; +import org.nl.wms.warehouse_management.service.dao.IOStorInv; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 出入库回传 实现类 + *

+ * + * @author Liuxy + * @since 2025-06-03 + */ +@Service +public class RetrunServiceImpl extends ServiceImpl implements ReturnService { + + /** + * 出入库mapper服务 + */ + @Autowired + private IOStorInvDisMapper ioStorInvDisMapper; + + /** + * 物料基础服务 + */ + @Autowired + private IMdMeMaterialbaseService iMdMeMaterialbaseService; + + /** + * 计量单位服务 + */ + @Autowired + private IMdPbMeasureunitService iMdPbMeasureunitService; + + /** + * WMS调用ERP服务类 + */ + @Autowired + private WmsToErpService wmsToErpService; + + @Override + public IPage queryAll(Map whereJson, PageQuery page) { + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String io_type = MapUtil.getStr(whereJson, "io_type"); + String bill_type = MapUtil.getStr(whereJson, "bill_type"); + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String is_upload = MapUtil.getStr(whereJson, "is_upload"); + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + + LambdaQueryWrapper lambda = new QueryWrapper().lambda(); + lambda.eq(ObjectUtil.isNotEmpty(stor_id), IOStorInv::getStor_id, stor_id); + lambda.eq(ObjectUtil.isNotEmpty(io_type), IOStorInv::getIo_type, io_type); + lambda.eq(ObjectUtil.isNotEmpty(bill_type), IOStorInv::getBill_type, bill_type); + lambda.like(ObjectUtil.isNotEmpty(bill_code), IOStorInv::getBill_code, bill_code); + lambda.eq(ObjectUtil.isNotEmpty(is_upload), IOStorInv::getIs_upload, is_upload); + lambda.ge(ObjectUtil.isNotEmpty(begin_time), IOStorInv::getInput_time, begin_time); + lambda.lt(ObjectUtil.isNotEmpty(end_time), IOStorInv::getInput_time, end_time); + lambda.eq(IOStorInv::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")); + lambda.eq(IOStorInv::getBill_status, IOSEnum.CHECK_MST_STATUS.code("完成")); + lambda.orderByDesc(IOStorInv::getInput_time); + return this.baseMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()), + lambda + ); + } + + @Override + public void upload(JSONObject whereJson) { + List rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class); + // 根据主表id查询所有分配明细 + List iosDisList = ioStorInvDisMapper.selectList( + new QueryWrapper().lambda() + .in(IOStorInvDis::getIostorinv_id, rows.stream() + .map(row -> row.getString("iostorinv_id")) + .collect(Collectors.toList()) + ) + ); + // 查询所有物料 + List materList = iMdMeMaterialbaseService.list( + new QueryWrapper().lambda() + .in(MdMeMaterialbase::getMaterial_id, iosDisList.stream() + .map(IOStorInvDis::getMaterial_id) + .distinct() + .collect(Collectors.toList()) + + ) + ); + // 查询所有计量单位 + List unitList = iMdPbMeasureunitService.list( + new QueryWrapper().lambda() + .in(MdPbMeasureunit::getMeasure_unit_id, iosDisList.stream() + .map(IOStorInvDis::getQty_unit_id) + .distinct() + .collect(Collectors.toList())) + ); + + // 需回传数据集合 + List paramList = new ArrayList<>(); + for(IOStorInvDis disDao : iosDisList) { + JSONObject param = new JSONObject(); + // 物料编码 + MdMeMaterialbase materDao = materList.stream() + .filter(row -> row.getMaterial_id().equals(disDao.getMaterial_id())) + .findFirst().orElse(null); + param.put("mater_code", materDao.getExt_id()); + // 批次 + param.put("batch_no", disDao.getPcsn()); + // 数量 + param.put("quantity", disDao.getReal_qty()); + // 计量单位 + MdPbMeasureunit unitDao = unitList.stream() + .filter(row -> row.getMeasure_unit_id().equals(disDao.getQty_unit_id())) + .findFirst().orElse(null); + param.put("unit_code", unitDao.getExt_id()); + // 仓库编码 + JSONObject jsonMst = rows.stream() + .filter(row -> row.getString("iostorinv_id").equals(disDao.getIostorinv_id())) + .findFirst().orElse(null); + param.put("stor_code", jsonMst.getString("stor_code")); + // 货位编码 + param.put("point_code", disDao.getStruct_code()); + // 载具编码 + param.put("pallet_code", disDao.getStoragevehicle_code()); + // 单据号 + param.put("inv_code", jsonMst.getString("bill_code")); + // 业务类型 + param.put("task_type", jsonMst.getString("bill_type")); + paramList.add(param); + } + JSONObject jsonParam = new JSONObject(); + jsonParam.put("data", paramList); + wmsToErpService.uploadErp(jsonParam); + + // 更新主表 + this.update( + new UpdateWrapper().lambda() + .in(IOStorInv::getIostorinv_id, rows.stream() + .map(row -> row.getString("iostorinv_id")) + .collect(Collectors.toList()) + ) + .set(IOStorInv::getIs_upload, IOSConstant.IS_DELETE_YES) + .set(IOStorInv::getUpdate_optid, SecurityUtils.getCurrentUserId()) + .set(IOStorInv::getUpdate_optname, SecurityUtils.getCurrentNickName()) + .set(IOStorInv::getUpdate_time, DateUtil.now()) + ); + + } + + @Override + @Transactional + public void disupload(JSONObject whereJson) { + List rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class); + List idList = rows.stream() + .map(row -> row.getString("iostorinv_id")) + .collect(Collectors.toList()); + // 更新 + this.update( + new UpdateWrapper().lambda() + .in(IOStorInv::getIo_type, idList) + .set(IOStorInv::getIs_upload, IOSConstant.IS_DELETE_YES) + .set(IOStorInv::getUpdate_optid, SecurityUtils.getCurrentUserId()) + .set(IOStorInv::getUpdate_optname, SecurityUtils.getCurrentNickName()) + .set(IOStorInv::getUpdate_time, DateUtil.now()) + ); + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/resources/log/XgAgvDeviceDriver.xml b/wms/nladmin-system/nlsso-server/src/main/resources/log/WmsToErp.xml similarity index 67% rename from wms/nladmin-system/nlsso-server/src/main/resources/log/XgAgvDeviceDriver.xml rename to wms/nladmin-system/nlsso-server/src/main/resources/log/WmsToErp.xml index c805802..6684b21 100644 --- a/wms/nladmin-system/nlsso-server/src/main/resources/log/XgAgvDeviceDriver.xml +++ b/wms/nladmin-system/nlsso-server/src/main/resources/log/WmsToErp.xml @@ -2,12 +2,11 @@ - - + - ${LOG_HOME}/XgAgvDeviceDriver/${DEVICECODE}/%d{yyyy-MM-dd}.%i.log + ${LOG_HOME}/WmsToErp/%d{yyyy-MM-dd}.%i.log 15 @@ -22,13 +21,8 @@ - - - - - + + diff --git a/wms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/wms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml index aaedad5..a480500 100644 --- a/wms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml +++ b/wms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml @@ -15,9 +15,7 @@ https://juejin.cn/post/6844903775631572999 value="%cyan(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %blue(%msg%n)"/> - - + diff --git a/wms/nladmin-ui/src/utils/nladmin.js b/wms/nladmin-ui/src/utils/nladmin.js index fb347e6..e5f7d36 100644 --- a/wms/nladmin-ui/src/utils/nladmin.js +++ b/wms/nladmin-ui/src/utils/nladmin.js @@ -234,14 +234,14 @@ export async function blobValidate(data) { * 注:prop,title有一个必传 */ export function flexWidth(prop, tableData, title, num = 0) { + if (!tableData || tableData.length === 0) { // 表格没数据不做处理 + return + } let flexWidth = 0// 初始化表格列宽 let columnContent = ''// 占位最宽的内容 const canvas = document.createElement('canvas') const context = canvas.getContext('2d') context.font = '14px Microsoft YaHei' - if (tableData.length === 0) { // 表格没数据不做处理 - return context.measureText(title).width + 20 + num + 'px' - } // 获取占位最宽的内容 let index = 0 for (let i = 0; i < tableData.length; i++) { // 循环表格内容,获取表格内容中最长的数据 diff --git a/wms/nladmin-ui/src/views/wms/st/inAndOutReturn/inandoutreturn.js b/wms/nladmin-ui/src/views/wms/st/inAndOutReturn/inandoutreturn.js new file mode 100644 index 0000000..79241b4 --- /dev/null +++ b/wms/nladmin-ui/src/views/wms/st/inAndOutReturn/inandoutreturn.js @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/iosReturn', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/iosReturn/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/iosReturn', + method: 'put', + data + }) +} + +export function upload(data) { + return request({ + url: '/api/iosReturn/upload', + method: 'post', + data + }) +} + +export function disupload(data) { + return request({ + url: '/api/iosReturn/disupload', + method: 'post', + data + }) +} + +export default { add, edit, del, upload, disupload } diff --git a/wms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue b/wms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue new file mode 100644 index 0000000..aeb37b3 --- /dev/null +++ b/wms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue @@ -0,0 +1,355 @@ + + + +