Commit Graph
658 Commits
Author SHA1 Message Date
rcx 5ba6a3b73d 发测试 2026-08-31 13:43:11 +08:00
rcx da84b7bb69 feat(wms,oms):库存管理-库存查询新增进货日期、入库日期查询条件,新增进货日期字段贯通收货-上架-库存全链路
需求:OMS/WMS 库存管理-库存查询页增加查询条件:物料分类(后端已支持,无需改动)、
进货日期(新增字段)、入库日期。

一、DDL(sql/20260831_wms_oms_add_purchase_date.sql)
    WMS 收货明细、上架明细、物料库存及 OMS 预留库存共 4 张表新增 PURCHASE_DATE DATE 列,
    附批次明细配置模板、执行前检查与回滚语句;须先执行 DDL 再发布服务。

二、进货日期录入与落库链路(收货→上架→WMS库存→OMS库存)
    1、录入入口为收货批次属性「进货日期」标签(批次规则配置,标签须一字不差),
       ReceiptMaterialDetailImpl 两处标签解析新增分支;
    2、收货明细→上架明细:StockReceiptOrderDomainService 6 处日期拷贝点补 setPurchaseDate(含子项);
    3、上架落库:stockIn/sj 赋值写入 material_inventory;
    4、同步 OMS:MaterialInventoryOmsParamDO 新增字段经 Feign omsEdit 传递,
       写入 reservation_material_inventory;
    5、库存行合并键:批次规则勾选后进货日期参与分行(getParam 映射 + selectListByWhere 全等匹配),
       OMS omsEdit 行匹配同步按进货日期区分,避免不同进货日期误合并到同一行。

三、查询条件(两模块 /list 接口)
    1、进货日期:purchaseDate(单日精确)+ purchaseDateStart/purchaseDateEnd(区间,End 含当天);
    2、入库日期:WMS 新增 createTimeStart/createTimeEnd(按库存行创建时间过滤,与 OMS 现有口径一致);
    3、列表/导出返回新增 purchaseDate 字段,分组查询取 MAX(purchase_date)。

说明:历史库存进货日期为空,按进货日期查询查不到存量数据(无来源可回填),区间查询会排除空值行。
2026-08-31 13:41:19 +08:00
rcx 2d1e4b5912 feat(oms):出入库导入按编号自动匹配名称并校验客户/物料存在性,模板列位改为动态识别
需求:①入库业务单导入模板只填物料编号+客户编号,物料名称/客户名称按编号自动匹配库中数据
②③出库导入校验客户/物料是否已存在,不存在提示"进行维护" ④库中查询结果为空(确无数据)时报错

一、入库导入(ReservationStockInOrderImpl.parseStockInExcel):
1. 物料逐编号查库,缺失料号收集后一次性报错"物料[xx]不存在,请先维护物料信息后再导入"
2. 明细新增客户编号:去重后查库,为空报错"客户[编号]不存在,请先维护客户信息后再导入";
   查到则以该客户为单据货主并自动匹配名称;与物料归属货主不一致时拦截并提示两者编号
3. 明细回填库中物料名称;未填客户编号时维持原"货主取自物料"逻辑,兼容老模板

二、出库导入(parseExcelFile):
1. 物料/客户校验前移到落库前(原为先落库后查客户,报错会留半截数据)
2. 物料查不到收集后报错维护提示;客户查不到报错维护提示,客户ID/名称改取库中匹配值
  (替换仅返回id且查不到时静默存null的queryShipperId)
3. 產品編號/客户編号漏填的行直接报错提示补全

三、模板解析改为按列头文字动态定位列(繁简体归一化),列/行顺序调整不影响解析,
   识别不到时回落老模板固定列位,老模板行为不变:
1. StockInExcelListener(入库):以產品編號为锚点识别列头行,新增客戶編號列支持
2. DynamicDeliveryExcelListener(出库):左右分栏各自锚点识别;送货日期/线号/车次/
   发票张数/小计/纪录合共改按标签文字定位,行号列号不再写死

四、Mapper:ReservationStockOutOrderMapper新增queryCustomerByCode(按组织查询,
   USER_MEMBER_CODE或USER_SHIPPER.CUSTOMER_NC_CODE任一命中),删除queryShipperId
2026-08-31 11:15:41 +08:00
rcx 2781f0d8d9 feat(oms):库存查询导出新增库存为0是否导出参数 /reservationMaterialInventoryApi/list 新增可选参数 excludeZeroInventoryQuantity,前端"库存为0是否导出"选"是"时传 true,SQL 以 HAVING IFNULL(SUM(inventory_quantity),0)>0 排除汇总库存为0的数据;所有查询维度(all/hz/wl/kw/wlkw/wlExpiry)共6条查询在 GROUP BY 后统一挂载公共片段 excludeZeroInventoryHaving,与 sort_order 对0库存的定义保持一致;不传参数时 SQL 不拼接条件,行为与原来完全一致 2026-08-31 10:17:53 +08:00
rcx 5127123236 发31 2026-08-27 16:38:33 +08:00
rcx 7b0d08a132 发30 2026-08-27 16:33:43 +08:00
zhaoqing ccdbbda165 Merge remote-tracking branch 'origin/dev' into dev-ty1.2 2026-08-27 14:27:16 +08:00
zhaoqing e3058d8eb1 fix(oms):明细表修改 2026-08-27 14:24:58 +08:00
rcx 5e3a0d86d0 发测试 2026-08-27 14:21:23 +08:00
rcx 76d95c1b2d feat(oms):入库业务单导入模板OrderNO改为只作业务单号,去掉格式校验并按业务单号查重
需求:导入模板表格OrderNO值回显到字段"业务单号";"入库业务单号"仍由系统
原本逻辑生成;业务单号重复不允许导入并提示"业务单号已存在";模板未填单号
保持现有系统逻辑;业务单号去掉规则校验。
一、导入流程(ReservationStockInOrderImpl.parseStockInExcel):
   1. 模板OrderNO只写入业务单号(business_order_no),不再同时作为入库业务单号
   2. 删除validateTemplateOrderNo格式规则校验(R+年月日+3位序号),模板单号不再限格式
   3. 查重由按in_order_number跨两表改为按business_order_no查入库业务单表,
      Mapper新增existsByBusinessOrderNo;重复时报"业务单号已存在:xxx,请修改
      模板中的OrderNO后重新导入"
   4. 入库业务单号(in_order_number)统一由insertDomain按原逻辑生成
      (R+年月日+当日累加,跨reservation/reserve两表取号防撞)
二、insertDomain业务单号赋值改为仅在为空时默认=入库单号,导入带模板单号时不覆盖;
   模板未填单号保持现有逻辑。页面手工新增(DomainService.insert)与客户预约下发
   (ReserveStockInOrderDomainService)为独立链路,不受影响。
2026-08-27 14:10:38 +08:00
rcx f1dec2298d 发 31 2026-08-26 18:04:44 +08:00
rcx 7b52764ae1 发 30 2026-08-26 17:52:23 +08:00
rcx 9eb2f347f7 发测试 2026-08-26 15:55:03 +08:00
rcx 0be73e9bfe fix(oms): 出入库联合列表(inAndOutList)查询条件修复与补全
1. 修复 ReflectionException:mapper XML <if> 引用 inOrOut/orderNumber 但 DO 无对应字段,
   DO/DTO 新增 inOrOut、orderNumber 查询字段(BeanUtils 同名自动拷贝,前端参数直达 mapper)
2. inOrOut 排除空串与 'all'(前端"全部"约定值),避免拼出 ="all" 查空
3. orderNumber 排除空串并改为 like 模糊匹配(与出库单列表单号搜索口径一致)
4. status 新增精确筛选(0 为有效条件值,按前端约定直传,"全部"时不传)
2026-08-26 15:49:38 +08:00
秦鸿展 5e369bdd99 31 2026-08-26 14:23:36 +08:00
rcx 42ab5160ed 发30 2026-08-26 14:03:42 +08:00
rcx 7a5e124f98 fix(oms): 入库模板导入优化异常提示信息 2026-08-25 17:51:54 +08:00
rcx c5a2508a36 发测试 2026-08-25 16:29:15 +08:00
rcx 7353021d92 feat(oms):入库模板导入支持模板自带业务单号,重复拦截并按R+年月日规则生成
1. 模板OrderNO解析兼容无标签新模板(E1直接为单号值)
2. 导入单号优先模板自带:先校验R+年月日+3位序号格式(含年月日有效性),
   再跨reservation/reserve两表查重,重复提示"入库业务单号已存在"
3. 模板无单号时按R+年月日+当日累加生成(insertDomain不再无条件覆盖已设置单号,清理无效的仓库规则生成死代码)
2026-08-25 16:11:19 +08:00
rcx 735cf9af9f feat(oms):入库导入模板饮用日期解析修复,入库单列表联查带出饮用有效日期
1. 入库/执行入库Excel解析监听器:扩充日期格式支持(yyyy年M月d日、d/M/yyyy、M/d/yyyy、dd.MM.yyyy等16种),
   改为严格解析防止宽松解析产生公元1~99年脏数据,新增Excel日期序列号兜底及年份合理性校验,
   解析失败抛出带行号的明确提示而非静默置空
2. parse-excel接口异常时返回具体错误信息(原为空body 500)
3. 入库单列表queryList联查明细表取最早饮用日期(MIN drink_date),PO及resultMap补drinkDate映射
2026-08-25 15:07:04 +08:00
rcx 83f4cce451 feat(oms):App端出入库明细跳详情补入库按单号查询,预约单修改限待提交状态
需求:入库/出库明细列表点击跳详情;待提交预约单可修改(暂存/提交均走/edit,与PC共用链路)
1.ReserveStockInOrderApi新增getInfoByInOrderNumber按单号查详情:
  入库明细行只带inOrderNumber(明细表无in_order_id列),对齐出库侧getInfoOutOrderNumber;
  del_flag=1过滤已删单+getOne不抛单号重复
2.ReserveStockInOrderMapper.xml MaterialDetailResult显式映射in_order_number,
  明细行单号不再依赖驼峰自动映射开关(出库侧:363本就有,入库侧补齐)
3.入库/出库DomainService.update加状态闸门:仅status=1(已创建)且issueStatus!=3(未确认)允许修改,
  防已确认下发/已流转单据被改写(仓码确认只置issueStatus=3不改status,原校验缺此维度必然漏防);
  明细为空改报'请添加货物明细'(原getMaterialDetailList().size()空指针500);出库update补@Transactional
2026-08-24 18:12:50 +08:00
王奎兴 5298e9d4e3 发30 2026-08-22 19:35:56 +08:00
王奎兴 06f61d7957 发31 2026-08-22 19:32:52 +08:00
王奎兴 4567f00858 发测试 2026-08-22 18:46:36 +08:00
rcx e8328b0159 Merge remote-tracking branch 'origin/dev' into dev 2026-08-22 18:39:12 +08:00
rcx bb3dfaed4a fix(oms):出库业务单线路/车次同步运输业务单,补齐触发入口与拆单时序
出库业务单与运输业务单为两张独立表,仅靠发票号经配送明细关联,
此前无字段同步逻辑,出库单填写的线路/车次不会流到运输业务单。

1. ReservationStockOutOrderDomainService新增syncLineInfoToBusinessOrder:
   按关联链 出库单号->reservation_delivery_details_link.invoiceNumber
   ->business_delivery_details_link.invoiceNumber 定位关联业务单,
   以出库业务单为源头覆盖lineCode/lineName/shuttleNo。
2. 触发入口三个:审核通过(auditState)/下发(issueOrder)/执行并下发
   (executeAndIssue);取消下发不触发。下发与执行并下发不经过审核
   动作,只挂审核入口会漏同步。
3. 同步目标同时覆盖orderId(未拆单业务单/拆单后主单)与subOrderId
   (拆单子单):仅同步subOrderId时,出库先审核而运输单尚未拆单
   (subOrderId为空)会落空,且主单无值导致后续拆单子单拷贝不到。
4. 同步失败仅记error日志,不阻断审核/下发主流程
   (状态更新与同步非同一事务,关联数据异常不应导致接口报错)。

边界:运输业务单手工创建且未录配送明细时无关联链不同步,需页面自行
填写;关联依赖发票号两侧一致,与既有退货回写为同一关联假设。
2026-08-22 18:38:39 +08:00
王奎兴 0eb2f323c7 发31 2026-08-22 18:29:36 +08:00
王奎兴 d1b1b27ab0 发30 2026-08-22 17:46:47 +08:00
王奎兴 4a6a2798e8 发31 2026-08-22 17:36:27 +08:00
rcx 2a4e39f755 Merge remote-tracking branch 'origin/dev-ty1.2' into dev-ty1.2 2026-08-22 14:10:07 +08:00
rcx a08d8a7fd5 feat(oms):出库导入校验送貨線號/車次并回填线路名称
1. 出库导入(预约/执行两侧)增加validateLineAndShuttle校验:
   送貨線號/車次缺失直接报错;线路须在WMS线路管理存在(route_code精确匹配);
   车次须在该线路车次清单(shuttle_json)内;校验通过回填lineName,
   线路/车次一并落lineCode/lineName/shuttleNo。
2. WmsServiceFeign新增listLineManagement(复用WMS /lineManagementApi/listByApp)
   供OMS跨库查线路,附降级实现;顺带移除FeignClient写死的本机url,恢复Nacos服务发现。
3. 执行侧DynamicDeliveryExcelListener(关键字版)补送貨線號/車次独立成行的解析,
   原实现仅支持与送貨日期同行取值,该模板为分行布局导致解析不到。
2026-08-22 14:08:22 +08:00
王奎兴 1b3b1a6394 Merge branch 'dev' into dev-ty1.2
# Conflicts:
#	mhd_wms/src/main/resources/bootstrap.yml
2026-08-22 13:59:22 +08:00
王奎兴 072a4f7d1f 退货验证发票号是否重复;维他奶导入单号添加校验; 2026-08-22 11:17:42 +08:00
王奎兴 63a19fbbcd 退货入库单编辑后才显示数量; 2026-08-22 10:26:54 +08:00
rcx 5fc491f612 fix(oms,wms):执行单重复下发致WMS收货明细翻倍修复,executeAndIssue获取仓库信息失败修复
一、收货明细翻倍(executionStockInOrderApi/issueOrder下发后,WMS收货管理详情明细×2):
根因:执行单下发接口无防重 + WMS接收端无幂等。executeAndIssue已自动下发过的执行单
仍可被手动再次下发(issueTime已置但无校验),重复推送使WMS插入同号入库主单+第二份
in_material_detail,再生成第二张同号收货单(收货单号"RV-"+入库单号确定性生成),
收货管理详情按单号查明细即双倍。四层防御:
1. OMS执行单issueOrder补防重:issueTime非空拒绝下发(与executeAndIssue对齐),
   inOrderIds去重防同请求重复推送
2. WMS omsOrderAdd主单幂等:同单号有效单(del_flag=1)已存在则跳过插入
3. WMS omsOrderAddDetail明细幂等:按oms_in_material_detail判重,已存在行不再插入;
   未传ID的行保持原插入行为
4. WMS autoAuditOmsInOrder取单补orderByAsc(in_order_id)消除同号取单随机性;
   auditApprove生成收货单前按收货单号查重过滤,已生成过的单不再重复生成
二、executeAndIssue报"获取仓库信息失败":
1. 明细行warehouseId=0时兜底改用主表仓库(与下发issueOrder兜底逻辑对齐),
   不再拿无效仓库ID调system服务
2. executeAndIssue/issueOrder两处报错增强为带仓库ID与错误信息,便于定位
存量已翻倍数据(重复入库单/明细/收货单)需另行软删清理,本次仅防新增
2026-08-21 18:21:03 +08:00
rcx b209d8cb6d fix(oms):出库明细materialBaseInfoId自动纠正,杜绝脏物料ID落库
问题:客户端推单把materialInventoryId传进materialBaseInfoId字段(或漏传为0),
出库明细存脏ID,编辑/保存报"物料基础信息不存在"(如DCCK034存了库存ID477/444,
真实物料ID应为233/231)。预约端校验原先静默跳过,脏数据持续入库(7-15起200+行)。

一、新增MaterialBaseInfoResolveService三级解析:
    baseId直查 → 库存ID反查纠正 → 物料编码+组织兜底,全部失败返回null
二、三处setMaterialDetailInfo改为纠正+回填(预约/业务/执行出库单):
    查不到抛错带定位信息(baseId/库存ID/物料编码/单号);
    纠正后的ID随保存落库,旧脏单重新保存即自愈;
    预约端由静默跳过改为抛错
三、两处pushOutOrderDetail推送入口(预约/业务)加纠正,
    反查不到拒绝保存,脏数据不再入库

注:存量脏数据修复SQL另行手动执行;下发复制链(预约→业务→执行)不走校验,
2026-08-21 18:20:22 +08:00
rcx e91c5801eb 发测试 2026-08-21 15:54:46 +08:00
rcx 8704df738c Merge remote-tracking branch 'origin/dev' into dev-ty1.2 2026-08-21 15:47:44 +08:00
rcx 000092952f feat(oms,wms):出库/运输单据增加线路车次字段,线路管理支持车次清单维护
1. OMS四张表(business_document_order/execute_order/
   reservation_stock_out_order/execution_stock_out_order)加
   LINE_CODE/LINE_NAME/SHUTTLE_NO三列,entity/DO/DTO/PO同步加字段,
   出库两链路Mapper XML补列与resultMap。
   线路编码/名称冗余存line_management的route_code/route_name
   (两库不互通无法join);SHUTTLE_NO为字符串(如4或31-4),
   前端拼"编码-车次"显示(31-4车次);不复用route(存tms_route.id)
   和train_no(入库链路占用)。
   下发链路(预约单->执行单,业务单->执行单)同名拷贝自动透传。
2. WMS line_management加SHUTTLE_JSON列(车次序号JSON数组),
   四层加字段+XML;DTO加反序列化器兼容前端传数组,
   PO加序列化器返回原样输出数组。
3. LineManagementImpl.update组织/仓库名称空串兜底,
   修复编辑线路后组织名称被刷成空串、列表查不到的问题。
4. 新增建表脚本sql/20260820_oms_outbound_transport_add_line_shuttle.sql(达梦语法)。
2026-08-21 15:28:50 +08:00
rcx 22f2b66ffa feat(oms,wms):库存导出按到期日分组排序并合并同物料同到期日库存(仅wlExpiry查询生效)
需求:库存查询导出按商品到期日分组归类、相同到期日相邻显示,相同物料相同
到期日合并库存。仅在 queryRule=wlExpiry(物料+到期日汇总查询)导出时生效,
列表显示不变;同时回退 8fedb6d6 对列表默认排序的改动。

一、列表默认查询还原(回退 8fedb6d6):OMS queryList 恢复 order by a.update_time desc,
    Api 恢复 update_time 内存重排(空值最后),两侧列表排序与改动前一致。
二、导出排序(OMS/WMS queryListByWlExpiry):/list 新增可选参数 orderByExpiryDate,
    仅 queryRule=wlExpiry 时生效:
    1. wlExpiry + orderByExpiryDate=true(导出):到期日倒序(日期近的在前)、空值最后、
       0库存靠后、同到期日按更新时间倒序;排序在SQL层,跨页/全量导出分组不被打散;
       OMS Api 传参时跳过 update_time 内存重排,避免覆盖SQL排序
    2. 仅 wlExpiry 不带参数:排序保持原样(sort_order+更新时间倒序)
    3. 其他查询方式:不受影响,参数被忽略
三、合并:wlExpiry 查询 GROUP BY 物料+到期日+货主(货主隔离),相同物料相同到期日
    合并一行,库存/可用/冻结数量及净重/毛重/体积/面积 SUM 汇总(复用现成查询,未改)
四、前端导出:/list + queryRule=wlExpiry + orderByExpiryDate=true + 当前查询条件(不分页)
2026-08-21 15:13:28 +08:00
王奎兴 3e5ed28d69 发30 2026-08-20 18:14:37 +08:00
王奎兴 78d40d35be 发31 2026-08-20 18:13:30 +08:00
rcx 8fedb6d6ed feat(oms):库存查询/导出按商品到期日分组排序 2026-08-20 17:54:23 +08:00
王奎兴 b8de1c00eb 发31 2026-08-20 17:41:09 +08:00
王奎兴 bf080609fe 发30 2026-08-20 17:39:44 +08:00
王奎兴 b415ed6fa0 出库预约业务类型查询; 2026-08-20 17:34:43 +08:00
王奎兴 694ed699ec 单号生成规则包含已删除; 2026-08-20 17:26:56 +08:00
王奎兴 0b26692a34 发31 2026-08-20 15:35:31 +08:00
王奎兴 e23edadde6 发30 2026-08-20 14:59:53 +08:00
rcx 33d085f9b9 fix(oms):入库链路计划数量翻倍修复
明细batchUpdate软删条件缺陷(入/出库共6个明细实现类):软删旧明细要求本次提交
   至少一行走更新分支,"删光旧物料全部换新物料"时提交列表全为新增行,旧行漏软删
   (del_flag仍=1),下发后执行单计划数量=旧+新叠加。改为库内有明细即对账软删
2026-08-20 14:45:13 +08:00