From 787c0a65d5c230e43509a0fe020f4dc02cc971fd Mon Sep 17 00:00:00 2001 From: "1378012178@qq.com" <1378012178@qq.com> Date: Wed, 31 Dec 2025 13:42:03 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81pad=E7=AB=AF=E9=80=80=E8=B4=A7?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4=EF=BC=9A=E6=9C=8D=E5=8A=A1=E6=8C=87=E4=BB=A4=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E5=BC=80=E5=A7=8B=E7=BB=93=E6=9D=9F=E8=B7=9F=E9=80=80?= =?UTF-8?q?=E8=B4=A7=E5=8D=95=E4=B8=9A=E5=8A=A1=E4=B8=8D=E5=86=8D=E7=9B=B8?= =?UTF-8?q?=E4=BA=92=E5=BD=B1=E5=93=8D=EF=BC=8C=E9=9A=8F=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=BC=80=E5=A7=8B/=E7=BB=93=E6=9D=9F=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=8C=87=E4=BB=A4=E5=B7=A5=E5=8D=95=202=E3=80=81pad?= =?UTF-8?q?=E7=AB=AF=E8=AF=B7=E9=A2=86=E6=B5=81=E7=A8=8B=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4=EF=BC=9A=E6=8A=A4=E7=90=86?= =?UTF-8?q?=E5=91=98=E3=80=81=E5=BA=93=E7=AE=A1=E6=9C=8D=E5=8A=A1=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E5=B7=A5=E5=8D=95=E6=9D=A5=E6=BA=90=E5=9D=87=E4=B8=BA?= =?UTF-8?q?=E6=97=A5=E5=B8=B8/=E5=8D=B3=E6=97=B6=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=86=8D=E6=A0=B9=E6=8D=AE=E8=AF=B7=E9=A2=86?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E6=8F=90=E4=BA=A4=E7=94=9F=E6=88=90=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=8C=87=E4=BB=A4=E5=B7=A5=E5=8D=95=EF=BC=8C=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E5=8F=AF=E9=9A=8F=E6=97=B6=E7=82=B9=E5=87=BB=E5=BC=80?= =?UTF-8?q?=E5=A7=8B/=E7=BB=93=E6=9D=9F=E3=80=82=E8=AF=B7=E9=A2=86?= =?UTF-8?q?=E5=8D=95=E4=B8=9A=E5=8A=A1=E6=B5=81=E7=A8=8B=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E8=B7=9F=E6=8C=87=E4=BB=A4=E5=B7=A5=E5=8D=95=E7=9B=B8=E4=BA=92?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=EF=BC=8C=E5=8F=AA=E4=BF=9D=E7=95=99=E8=AF=B7?= =?UTF-8?q?=E9=A2=86=E4=B8=9A=E5=8A=A1=E6=9C=AC=E8=BA=AB=E7=9A=84=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=EF=BC=8C=E5=A6=82=E8=AF=B7=E9=A2=86=E5=8D=95=E5=B7=B2?= =?UTF-8?q?=E8=A2=AB=E4=BD=9C=E5=BA=9F=E6=97=B6=EF=BC=8C=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E6=B2=A1=E5=88=B7=E6=96=B0=E7=95=8C=E9=9D=A2=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E4=BA=86=E5=85=A5=E5=BA=93=E6=8C=89=E9=92=AE=E7=9A=84=E5=88=A4?= =?UTF-8?q?=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qld/service/impl/QingLingServiceImpl.java | 381 ++--- .../service/impl/QingLingServiceImpl_BK.java | 1421 +++++++++++++++++ 2 files changed, 1614 insertions(+), 188 deletions(-) create mode 100644 nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl_BK.java diff --git a/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl.java b/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl.java index 694831da..a155a9cd 100644 --- a/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl.java +++ b/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl.java @@ -273,17 +273,17 @@ public class QingLingServiceImpl implements IQinglingApi { Map result = Maps.newHashMap(); if (StringUtils.isNotBlank(dto.getQldNo())) { //检测是否已经开始服务 - { - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_sq"); - p_.setBizId(dto.getQldNo()); - Map j = invoicingQlOrdersApi.izCanReSubmit(p_); - if(!j.get("error_code").equals("0")){ - result.put("status", "faild"); - result.put("message", j.get("msg")); - return result; - } - } +// { +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_sq"); +// p_.setBizId(dto.getQldNo()); +// Map j = invoicingQlOrdersApi.izCanReSubmit(p_); +// if(!j.get("error_code").equals("0")){ +// result.put("status", "faild"); +// result.put("message", j.get("msg")); +// return result; +// } +// } //检测是否可以正常提交 if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "3")) { @@ -293,14 +293,14 @@ public class QingLingServiceImpl implements IQinglingApi { } //检测是否有物料 - QueryWrapper infoQW = new QueryWrapper<>(); - infoQW.eq("qld_no", dto.getQldNo()); - List infoList = invoicingQldInfoMapper.selectList(infoQW); - if (CollectionUtils.isEmpty(infoList)) { - result.put("status", "faild"); - result.put("message", "不存在物料,无法提交"); - return result; - } +// QueryWrapper infoQW = new QueryWrapper<>(); +// infoQW.eq("qld_no", dto.getQldNo()); +// List infoList = invoicingQldInfoMapper.selectList(infoQW); +// if (CollectionUtils.isEmpty(infoList)) { +// result.put("status", "faild"); +// result.put("message", "不存在物料,无法提交"); +// return result; +// } //回退单-提交 QueryWrapper qw = new QueryWrapper<>(); @@ -312,7 +312,6 @@ public class QingLingServiceImpl implements IQinglingApi { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - //日志表插记录 NuInvoicingQldLog logData = new NuInvoicingQldLog(); logData.setQldNo(dto.getQldNo());//请领单号 @@ -339,28 +338,28 @@ public class QingLingServiceImpl implements IQinglingApi { //检测 必须有新的指令 并且已经点击开始 { //指令工单处判断是否允许提交 - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_sq"); - p_.setNuId(dto.getNuId()); - p_.setElderId(dto.getElderId()); - Map j = invoicingQlOrdersApi.izCanSubmit(p_); - if(!j.get("error_code").equals("0")){ - result.put("status", "faild"); - result.put("message", j.get("msg")); - return result; - } +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_sq"); +// p_.setNuId(dto.getNuId()); +// p_.setElderId(dto.getElderId()); +// Map j = invoicingQlOrdersApi.izCanSubmit(p_); +// if(!j.get("error_code").equals("0")){ +// result.put("status", "faild"); +// result.put("message", j.get("msg")); +// return result; +// } //检测通过了 继续检测对应护理单元是否有未完结请领单 - QueryWrapper qw = new QueryWrapper<>(); - qw.eq("nu_id", dto.getNuId()); - qw.eq("elder_id", dto.getElderId()); - qw.in("status", "1", "3", "4"); - List list = invoicingQldMainMapper.selectList(qw); - if (!CollectionUtils.isEmpty(list)) { - result.put("status", "faild"); - result.put("message", "有未完结请领单,暂时无法提交"); - return result; - } +// QueryWrapper qw = new QueryWrapper<>(); +// qw.eq("nu_id", dto.getNuId()); +// qw.eq("elder_id", dto.getElderId()); +// qw.in("status", "1", "3", "4"); +// List list = invoicingQldMainMapper.selectList(qw); +// if (!CollectionUtils.isEmpty(list)) { +// result.put("status", "faild"); +// result.put("message", "有未完结请领单,暂时无法提交"); +// return result; +// } } //购物车-提交 @@ -371,13 +370,13 @@ public class QingLingServiceImpl implements IQinglingApi { List gwcList = invoicingQldGwcService.list(gwcQW); //请购车未添加物料 - if (CollectionUtils.isEmpty(gwcList)) { - result.put("status", "empty"); - result.put("message", "请选择请领物料"); - return result; - } +// if (CollectionUtils.isEmpty(gwcList)) { +// result.put("status", "empty"); +// result.put("message", "请选择请领物料"); +// return result; +// } - //检测哪些物料有未完成请领流程的 + //检测哪些“物料”有未完成请领流程的 { //请领流程未完成物料id List disabledWlList = invoicingQldMainMapper.queryUnFinishWlid(dto); @@ -506,14 +505,14 @@ public class QingLingServiceImpl implements IQinglingApi { result.put("status", "success"); result.put("message", "提交成功"); - InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); - orderEntity.setFlowCode("ql_sq");//指令流程flow_code 看接口有标明 - orderEntity.setBizId(saveData.getQldNo());//请领单号 - orderEntity.setNuId(saveData.getNuId()); - orderEntity.setElderId(saveData.getElderId());//长者id - orderEntity.setInitiatorId(sysUser.getEmployessId());//员工id +// InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); +// orderEntity.setFlowCode("ql_sq");//指令流程flow_code 看接口有标明 +// orderEntity.setBizId(saveData.getQldNo());//请领单号 +// orderEntity.setNuId(saveData.getNuId()); +// orderEntity.setElderId(saveData.getElderId());//长者id +// orderEntity.setInitiatorId(sysUser.getEmployessId());//员工id //修改指令工单中的业务单号 - invoicingQlOrdersApi.updateOrderBizId(orderEntity); +// invoicingQlOrdersApi.updateOrderBizId(orderEntity); return result; } } @@ -636,30 +635,30 @@ public class QingLingServiceImpl implements IQinglingApi { String nowStatus = one.getStatus(); //检测是否已经开始服务 - if ("3".equals(nowStatus)) { - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_sq"); - p_.setIzRollback("Y"); - p_.setBizId(dto.getQldNo()); - Map j = invoicingQlOrdersApi.izCanGoOn(p_); - if(!j.get("error_code").equals("0")){ - result.put("status", "faild"); - result.put("message", j.get("msg")); - return result; - } - } +// if ("3".equals(nowStatus)) { +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_sq"); +// p_.setIzRollback("Y"); +// p_.setBizId(dto.getQldNo()); +// Map j = invoicingQlOrdersApi.izCanGoOn(p_); +// if(!j.get("error_code").equals("0")){ +// result.put("status", "faild"); +// result.put("message", j.get("msg")); +// return result; +// } +// } //检测是否可作废 - if ("1".equals(nowStatus)) { - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_ck"); - p_.setBizId(dto.getQldNo()); - Map j = invoicingQlOrdersApi.izCanCancel(p_); - if(!j.get("error_code").equals("0")){ - result.put("status", "faild"); - result.put("message", j.get("msg")); - return result; - } - } +// if ("1".equals(nowStatus)) { +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_ck"); +// p_.setBizId(dto.getQldNo()); +// Map j = invoicingQlOrdersApi.izCanCancel(p_); +// if(!j.get("error_code").equals("0")){ +// result.put("status", "faild"); +// result.put("message", j.get("msg")); +// return result; +// } +// } //日志表插记录 NuInvoicingQldLog logData = new NuInvoicingQldLog(); @@ -681,16 +680,16 @@ public class QingLingServiceImpl implements IQinglingApi { InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); orderEntity.setBizId(dto.getQldNo());//请领单号 orderEntity.setInitiatorId(sysUser.getEmployessId());//员工id - if ("1".equals(nowStatus)) { - //已提交直接作废 - orderEntity.setFlowCode("ql_zf");//指令流程flow_code 看接口有标明 - invoicingQlOrdersApi.flowQlzf(orderEntity); - } - if ("3".equals(nowStatus)) { - //回退单作废 - orderEntity.setFlowCode("ql_htzf");//指令流程flow_code 看接口有标明 - invoicingQlOrdersApi.flowQlzf(orderEntity); - } +// if ("1".equals(nowStatus)) { +// //已提交直接作废 +// orderEntity.setFlowCode("ql_zf");//指令流程flow_code 看接口有标明 +// invoicingQlOrdersApi.flowQlzf(orderEntity); +// } +// if ("3".equals(nowStatus)) { +// //回退单作废 +// orderEntity.setFlowCode("ql_htzf");//指令流程flow_code 看接口有标明 +// invoicingQlOrdersApi.flowQlzf(orderEntity); +// } invoicingQldMainService.updateById(one); result.put("status", "success"); result.put("message", "作废成功"); @@ -734,17 +733,17 @@ public class QingLingServiceImpl implements IQinglingApi { Map result = Maps.newHashMap(); //检测是否已经开始服务 - { - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_sh"); - p_.setBizId(dto.getQldNo()); - Map j = invoicingQlOrdersApi.izCanGoOn(p_); - if(!j.get("error_code").equals("0")){ - result.put("status", "faild"); - result.put("message", j.get("msg")); - return result; - } - } +// { +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_sh"); +// p_.setBizId(dto.getQldNo()); +// Map j = invoicingQlOrdersApi.izCanGoOn(p_); +// if(!j.get("error_code").equals("0")){ +// result.put("status", "faild"); +// result.put("message", j.get("msg")); +// return result; +// } +// } //检测是否可以正常收货 if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "4")) { @@ -931,17 +930,17 @@ public class QingLingServiceImpl implements IQinglingApi { public Map orderReturn(InvoicingQldMainEntity dto) { Map result = Maps.newHashMap(); //检测是否已经开始服务 - { - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_ck"); - p_.setBizId(dto.getQldNo()); - Map j = invoicingQlOrdersApi.izCanGoOn(p_); - if(!j.get("error_code").equals("0")){ - result.put("status", "faild"); - result.put("message", j.get("msg")); - return result; - } - } +// { +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_ck"); +// p_.setBizId(dto.getQldNo()); +// Map j = invoicingQlOrdersApi.izCanGoOn(p_); +// if(!j.get("error_code").equals("0")){ +// result.put("status", "faild"); +// result.put("message", j.get("msg")); +// return result; +// } +// } //检测是否可以正常回退 if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "1,4")) { @@ -992,17 +991,17 @@ public class QingLingServiceImpl implements IQinglingApi { //出库一次只会有一个出库单了 Map map = new HashMap<>(); //检测是否已经开始服务 - { - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setFlowCode("ql_ck"); - p_.setBizId(dto.getQldNo()); - Map j = invoicingQlOrdersApi.izCanGoOn(p_); - if(!j.get("error_code").equals("0")){ - map.put("status", "faild"); - map.put("message", j.get("msg")); - return map; - } - } +// { +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setFlowCode("ql_ck"); +// p_.setBizId(dto.getQldNo()); +// Map j = invoicingQlOrdersApi.izCanGoOn(p_); +// if(!j.get("error_code").equals("0")){ +// map.put("status", "faild"); +// map.put("message", j.get("msg")); +// return map; +// } +// } //检测单子状态是否正确 if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "1")) { @@ -1301,88 +1300,94 @@ public class QingLingServiceImpl implements IQinglingApi { @Override @Transactional(rollbackFor = Exception.class) public Map finishDirectiveServe(InvoicingQldQueryEntity dto) { - Map map = new HashMap(); - map.put("error_code","0"); - map.put("msg","可以提交"); - //获取工单,请领单,判断是否可完成 - InvoicingOrdersEntity ioe = new InvoicingOrdersEntity(); - ioe.setId(dto.getId()); - InvoicingOrdersEntity entity = invoicingOrdersApi.getOrderInfo(ioe); - if(entity!=null){ - String qldNo = entity.getBizId();//业务单号 - if(qldNo!=null&&!qldNo.equals("")){ - //获取请领单 - QueryWrapper qw = new QueryWrapper<>(); - qw.eq("qld_no", qldNo); - NuInvoicingQldMain main = invoicingQldMainService.getOne(qw); - if (main != null) { - map = this.izCanFinish(entity.getFlowCode(),main.getStatus()); - if(!map.get("error_code").equals("0")){ - return map; - } - //满足完成条件 - //完成 - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); - p_.setId(dto.getId()); - p_.setInitiatorId(sysUser.getEmployessId()); - map = invoicingOrdersApi.finishOrder(p_); - if(!map.get("error_code").equals("0")){ - return map; - } - //生成新单据 - createNextOrder(entity,main); - }else{ - map.put("error_code","1"); - map.put("msg","请领单不存在"); - return map; - } - }else{ - map.put("error_code","1"); - map.put("msg","请先提交请领单"); - return map; - } - }else{ - map.put("error_code","1"); - map.put("msg","工单不存在"); - return map; - } - return map; +// Map map = new HashMap(); +// map.put("error_code","0"); +// map.put("msg","可以提交"); +// //获取工单,请领单,判断是否可完成 +// InvoicingOrdersEntity ioe = new InvoicingOrdersEntity(); +// ioe.setId(dto.getId()); +// InvoicingOrdersEntity entity = invoicingOrdersApi.getOrderInfo(ioe); +// if(entity!=null){ +// String qldNo = entity.getBizId();//业务单号 +// if(qldNo!=null&&!qldNo.equals("")){ +// //获取请领单 +// QueryWrapper qw = new QueryWrapper<>(); +// qw.eq("qld_no", qldNo); +// NuInvoicingQldMain main = invoicingQldMainService.getOne(qw); +// if (main != null) { +// map = this.izCanFinish(entity.getFlowCode(),main.getStatus()); +// if(!map.get("error_code").equals("0")){ +// return map; +// } +// //满足完成条件 +// //完成 +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); +// p_.setId(dto.getId()); +// p_.setInitiatorId(sysUser.getEmployessId()); +// map = invoicingOrdersApi.finishOrder(p_); +// if(!map.get("error_code").equals("0")){ +// return map; +// } +// //生成新单据 +// createNextOrder(entity,main); +// }else{ +// map.put("error_code","1"); +// map.put("msg","请领单不存在"); +// return map; +// } +// }else{ +// map.put("error_code","1"); +// map.put("msg","请先提交请领单"); +// return map; +// } +// }else{ +// map.put("error_code","1"); +// map.put("msg","工单不存在"); +// return map; +// } +// return map; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setId(dto.getId()); + p_.setInitiatorId(sysUser.getEmployessId()); + return invoicingOrdersApi.finishOrder(p_); } /** * 判断是否可结束工单 + * * @return */ - private Map izCanFinish(String flowCode,String status){ - Map map = new HashMap(); - map.put("error_code","0"); - map.put("msg","可以结束"); + private Map izCanFinish(String flowCode, String status) { + Map map = new HashMap(); + map.put("error_code", "0"); + map.put("msg", "可以结束"); //完成结束判断算法: //一、申请可完成 flowCode=ql_sq,完成时只有2种判断,1、业务单号qldNo不为空 ;2、已提交status=1 //二、出库可完成 flowCode=ql_ck,完成时只有2种判断,1、已出库status=4 ;2、已回退status=3 //三、收货可完成 flowCode=ql_sh,完成时只有1种判断,1、已收货status=5 //不考虑作废情况,作废时会将ql_sq的工单状态恢复成最原始状态,判断算法使用根据一、申请可完成 //一、申请可完成判断 - if(flowCode.equals("ql_sq")){ - if(!status.equals("1")){ - map.put("error_code","1"); - map.put("msg","请先提交请领单"); + if (flowCode.equals("ql_sq")) { + if (!status.equals("1")) { + map.put("error_code", "1"); + map.put("msg", "请先提交请领单"); } } //二、出库可完成判断 - if(flowCode.equals("ql_ck")){ - if(status.equals("3")||status.equals("4")){ - }else{ - map.put("error_code","1"); - map.put("msg","请先出库或回退"); + if (flowCode.equals("ql_ck")) { + if (status.equals("3") || status.equals("4")) { + } else { + map.put("error_code", "1"); + map.put("msg", "请先出库或回退"); } } //三、收货可完成判断 - if(flowCode.equals("ql_sh")){ - if(!status.equals("5")){ - map.put("error_code","1"); - map.put("msg","请先收货"); + if (flowCode.equals("ql_sh")) { + if (!status.equals("5")) { + map.put("error_code", "1"); + map.put("msg", "请先收货"); } } return map; @@ -1391,7 +1396,7 @@ public class QingLingServiceImpl implements IQinglingApi { /** * 生成下一服务指令工单 */ - private void createNextOrder(InvoicingOrdersEntity entity,NuInvoicingQldMain main){ + private void createNextOrder(InvoicingOrdersEntity entity, NuInvoicingQldMain main) { String flowCode = entity.getFlowCode(); String status = main.getStatus(); InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); @@ -1402,16 +1407,16 @@ public class QingLingServiceImpl implements IQinglingApi { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); orderEntity.setInitiatorId(sysUser.getEmployessId());//提交人id //生成请领下一步服务指令 - if(flowCode.equals("ql_sq")){ + if (flowCode.equals("ql_sq")) { invoicingQlOrdersApi.flowQlsq(orderEntity); } - if(flowCode.equals("ql_ck")){ + if (flowCode.equals("ql_ck")) { //生成出库下一步服务指令 - if(status.equals("4")){ + if (status.equals("4")) { invoicingQlOrdersApi.flowQlck(orderEntity); } //生成回退下一步服务指令 - if(status.equals("3")){ + if (status.equals("3")) { invoicingQlOrdersApi.flowQlht(orderEntity); } } diff --git a/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl_BK.java b/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl_BK.java new file mode 100644 index 00000000..854207db --- /dev/null +++ b/nursing-unit-invoicing/nu-invoicing-biz/src/main/java/com/nu/modules/qld/service/impl/QingLingServiceImpl_BK.java @@ -0,0 +1,1421 @@ +package com.nu.modules.qld.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.text.StrBuilder; +import com.alibaba.fastjson.JSONObject; +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.google.common.collect.Maps; +import com.nu.entity.*; +import com.nu.modules.ConfigMaterial.entity.ConfigMaterialCategory; +import com.nu.modules.ConfigMaterial.entity.ConfigMaterialInfo; +import com.nu.modules.ConfigMaterial.mapper.ConfigMaterialInfoMapper; +import com.nu.modules.ConfigMaterial.service.IConfigMaterialCategoryService; +import com.nu.modules.cgd.entity.NuWarehouseMaterialCrkInfo; +import com.nu.modules.cgd.service.INuWarehouseMaterialCrkInfoService; +import com.nu.modules.elder.api.IElderInfoApi; +import com.nu.modules.invoicing.api.IInvoicingOrdersApi; +import com.nu.modules.invoicing.api.IInvoicingQlOrdersApi; +import com.nu.modules.invoicing.api.IQinglingApi; +import com.nu.modules.nu.entity.NuInvoicingNuCrkLog; +import com.nu.modules.nu.entity.NuInvoicingNuKcsl; +import com.nu.modules.nu.service.INuInvoicingNuCrkLogService; +import com.nu.modules.nu.service.INuInvoicingNuKcslService; +import com.nu.modules.qld.entity.*; +import com.nu.modules.qld.mapper.NuInvoicingQldGwcMapper; +import com.nu.modules.qld.mapper.NuInvoicingQldInfoMapper; +import com.nu.modules.qld.mapper.NuInvoicingQldLogMapper; +import com.nu.modules.qld.mapper.NuInvoicingQldMainMapper; +import com.nu.modules.qld.service.INuInvoicingQldGwcService; +import com.nu.modules.qld.service.INuInvoicingQldLogService; +import com.nu.modules.qld.service.INuInvoicingQldMainService; +import com.nu.modules.qld.service.INuInvoicingQldWlzdService; +import com.nu.modules.warehouseMaterialInfo.entity.BlWarehouseMaterialInfo; +import com.nu.modules.warehouseMaterialInfo.mapper.BlWarehouseMaterialInfoMapper; +import com.nu.modules.warehouseMaterialInfo.service.IBlWarehouseMaterialInfoService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.system.api.ISysBaseAPI; +import org.jeecg.common.system.vo.LoginUser; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; +//>>>>>>>>>>>>请领单跟工单相互关联版本 +/** + * @Description: 进销存-请领单-通用处理 + * @Author: jeecg-boot + * @Date: 2025-11-26 + * @Version: V1.0 + */ +//@Service +//@Slf4j +//public class QingLingServiceImpl_BK implements IQinglingApi { +public class QingLingServiceImpl_BK { + + @Autowired + private IConfigMaterialCategoryService configMaterialCategoryService; + @Autowired + private ConfigMaterialInfoMapper configMaterialInfoMapper; + @Autowired + private BlWarehouseMaterialInfoMapper mterialInfoMapper; + //请领单购物车 + @Autowired + private INuInvoicingQldGwcService invoicingQldGwcService; + @Autowired + private INuInvoicingQldWlzdService invoicingQldWlzdService; + @Autowired + private NuInvoicingQldMainMapper invoicingQldMainMapper; + @Autowired + private NuInvoicingQldLogMapper invoicingQldLogMapper; + @Autowired + private INuInvoicingQldLogService invoicingQldLogService; + @Autowired + private IElderInfoApi elderInfoApi; + @Autowired + private NuInvoicingQldGwcMapper invoicingQldGwcMapper; + @Autowired + private INuInvoicingQldMainService invoicingQldMainService; + @Autowired + private ISysBaseAPI sysBaseAPI; + @Autowired + private NuInvoicingQldInfoServiceImpl invoicingQldInfoService; + @Autowired + private NuInvoicingQldInfoMapper invoicingQldInfoMapper; + @Autowired + private INuInvoicingNuCrkLogService invoicingNuCrkLogService; + @Autowired + private INuInvoicingNuKcslService invoicingNuKcslService; + @Autowired + private IBlWarehouseMaterialInfoService warehouseMaterialInfoService; + @Autowired + private INuWarehouseMaterialCrkInfoService warehouseMaterialCrkInfoService; + @Lazy + @Autowired + private QingLingServiceImpl_BK ownService; + @Autowired + private IInvoicingOrdersApi invoicingOrdersApi; + @Autowired + private IInvoicingQlOrdersApi invoicingQlOrdersApi; + + //@Override + public List> getMaterialTreeData(MaterialCategoryEntity materialCategoryEntity) { + ConfigMaterialCategory configMaterialCategory = new ConfigMaterialCategory(); + BeanUtils.copyProperties(materialCategoryEntity, configMaterialCategory); + List> pageList = configMaterialCategoryService.getAllMaterialTreeData(configMaterialCategory); + return pageList; + } + + //@Override + public Map getTreeDataWlnum(MaterialCategoryEntity configMaterialCategory) { + Map map = new HashMap<>(); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("a.del_flag", "0"); + queryWrapper.eq("a.iz_enabled", "Y"); + queryWrapper.eq(StringUtils.isNotEmpty(configMaterialCategory.getCategoryId()), "b.category_id", configMaterialCategory.getCategoryId()); + queryWrapper.eq(StringUtils.isNotEmpty(configMaterialCategory.getTypeId()), "b.type_id", configMaterialCategory.getTypeId()); + queryWrapper.eq(StringUtils.isNotEmpty(configMaterialCategory.getMedicationId()), "b.medication_id", configMaterialCategory.getMedicationId()); + queryWrapper.in(StringUtils.isNotBlank(configMaterialCategory.getSuppliers()), "b.suppliers", configMaterialCategory.getSuppliers()); + List list = configMaterialInfoMapper.getTreeDataWlnum(queryWrapper); + map.put("success", true); + map.put("message", "物料数量"); + map.put("totalSize", list.size()); + return map; + } + + //@Override + public IPage queryInvoicingList(Integer pageNo, Integer pageSize, MaterialInfoEntity materialInfoEntityDto, HttpServletRequest req) { + if (StringUtils.isEmpty(materialInfoEntityDto.getNuId()) || StringUtils.isEmpty(materialInfoEntityDto.getElderId())) { + return new Page<>(); + } + BlWarehouseMaterialInfo warehouseMaterialInfo = new BlWarehouseMaterialInfo(); + BeanUtils.copyProperties(materialInfoEntityDto, warehouseMaterialInfo); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.apply(StringUtils.isNotBlank(warehouseMaterialInfo.getWlParamInfo()), "( material_name like '%" + warehouseMaterialInfo.getWlParamInfo() + "%' or material_no like '%" + warehouseMaterialInfo.getWlParamInfo() + "%' or pinyin like '%" + warehouseMaterialInfo.getWlParamInfo() + "%' or specification_model like '%" + warehouseMaterialInfo.getWlParamInfo() + "%' ) "); + queryWrapper.eq(StringUtils.isNotBlank(warehouseMaterialInfo.getCategoryId()), "category_id", warehouseMaterialInfo.getCategoryId()); + queryWrapper.eq(StringUtils.isNotBlank(warehouseMaterialInfo.getTypeId()), "type_id", warehouseMaterialInfo.getTypeId()); + queryWrapper.eq(StringUtils.isNotBlank(warehouseMaterialInfo.getMedicationId()), "medication_id", warehouseMaterialInfo.getMedicationId()); + queryWrapper.in(StringUtils.isNotBlank(warehouseMaterialInfo.getSuppliers()), "suppliers", warehouseMaterialInfo.getSuppliers()); + if (StringUtils.isNotBlank(materialInfoEntityDto.getIsWaring()) && "1".equals(materialInfoEntityDto.getIsWaring())) { + queryWrapper.apply("kcsl <= lower_limit"); + } + queryWrapper.eq("del_flag", "0"); + queryWrapper.eq("iz_enabled", "Y"); + Page page = new Page<>(pageNo, pageSize); + List list = mterialInfoMapper.selectListByZd(page, queryWrapper, materialInfoEntityDto); + IPage entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + entityPage.setRecords(BeanUtil.copyToList(list, MaterialInfoEntity.class)); + return entityPage; + } + + //@Override + public List queryGwcInfo(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getNuId()) || StringUtils.isBlank(queryDto.getElderId())) { + return List.of(); + } + return invoicingQldGwcMapper.queryGwcInfo(queryDto); + } + + //@Override + public boolean addGwc(InvoicingQldGwcEntity dto) { + if (StringUtils.isBlank(dto.getNuId()) || StringUtils.isBlank(dto.getElderId()) || dto.getQlNum() == null || dto.getQlNum() == 0) { + return false; + } + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("nu_id", dto.getNuId()); + qw.eq("elder_id", dto.getElderId()); + qw.eq("wl_id", dto.getWlId()); + NuInvoicingQldGwc one = invoicingQldGwcService.getOne(qw); + if (one != null) { +// dto.setQlNum(dto.getQlNum());//前端传过来的就是最终的数量 +// NuInvoicingQldGwc gwcData = new NuInvoicingQldGwc(); +// BeanUtils.copyProperties(dto, gwcData); +// return invoicingQldGwcService.update(gwcData, qw); + return false; + } else { + NuInvoicingQldGwc gwcData = new NuInvoicingQldGwc(); + BeanUtils.copyProperties(dto, gwcData); + return invoicingQldGwcService.save(gwcData); + } + } + + //@Override + public boolean deleteGwcWl(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getNuId()) || StringUtils.isBlank(queryDto.getElderId()) || StringUtils.isBlank(queryDto.getWlId())) { + return false; + } + NuInvoicingQldGwc dto = new NuInvoicingQldGwc(); + dto.setNuId(queryDto.getNuId()); + dto.setElderId(queryDto.getElderId()); + dto.setWlId(queryDto.getWlId()); + return invoicingQldGwcMapper.deletePhysics(dto) > 0 ? true : false; + } + + //@Override + public boolean deleteQldWl(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getQldNo()) || StringUtils.isBlank(queryDto.getWlId())) { + return false; + } + return invoicingQldInfoMapper.deleteQldWl(queryDto) > 0 ? true : false; + } + + //@Override + public boolean removeAllGwc(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getNuId()) || StringUtils.isBlank(queryDto.getElderId())) { + return false; + } + return invoicingQldGwcService.removeAllGwc(queryDto) > 0 ? true : false; + } + + //@Override + public boolean wlzd(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getNuId()) || StringUtils.isBlank(queryDto.getElderId()) || StringUtils.isBlank(queryDto.getWlId())) { + return false; + } + QueryWrapper qw = new QueryWrapper(); + qw.eq("nu_id", queryDto.getNuId()); + qw.eq("elder_id", queryDto.getElderId()); + qw.eq("wl_id", queryDto.getWlId()); + NuInvoicingQldWlzd one = invoicingQldWlzdService.getOne(qw); + if (!queryDto.getIzZd()) { + //取消置顶 + return invoicingQldWlzdService.wlzd(queryDto); + } + //置顶如果已存在就更新create_time + if (one == null) { + return invoicingQldWlzdService.wlzd(queryDto); + } else { + one.setCreateTime(new Date()); + return invoicingQldWlzdService.updateById(one); + } + } + + //@Override + public MaterialInfoEntity queryMaterialInfo(InvoicingQldQueryEntity queryDto) { + ConfigMaterialInfo configMaterialInfo = configMaterialInfoMapper.queryMaterialInfo(queryDto); + MaterialInfoEntity result = new MaterialInfoEntity(); + BeanUtils.copyProperties(configMaterialInfo, result); + return result; + } + + //@Override + public IPage queryQlwcLog(InvoicingQldQueryEntity queryDto, Integer pageNo, Integer pageSize) { + //长者信息 +// List elderList = elderInfoApi.queryByElderIds(new String[]{queryDto.getElderId()}); +// ElderInfoEntity elder = elderList.get(0); +// result.setElderRzsj(elder.getCreateTime()); + Page page = new Page<>(pageNo, pageSize); + return invoicingQldLogMapper.queryQlwcLog(page, queryDto); + } + + /** + * 提取nuid+elderid下购物车 数据 + * 生成请领单号 + * 将购物车信息变为info信息 + * + * @param dto + * @return + */ + //@Override + @Transactional(rollbackFor = Exception.class) + public Map submitQld(InvoicingQldGwcEntity dto) { + Map result = Maps.newHashMap(); + if (StringUtils.isNotBlank(dto.getQldNo())) { + //检测是否已经开始服务 + { + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_sq"); + p_.setBizId(dto.getQldNo()); + Map j = invoicingQlOrdersApi.izCanReSubmit(p_); + if (!j.get("error_code").equals("0")) { + result.put("status", "faild"); + result.put("message", j.get("msg")); + return result; + } + } + + //检测是否可以正常提交 + if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "3")) { + result.put("status", "faild"); + result.put("message", "提交失败,请重新提交"); + return result; + } + + //检测是否有物料 + QueryWrapper infoQW = new QueryWrapper<>(); + infoQW.eq("qld_no", dto.getQldNo()); + List infoList = invoicingQldInfoMapper.selectList(infoQW); + if (CollectionUtils.isEmpty(infoList)) { + result.put("status", "faild"); + result.put("message", "不存在物料,无法提交"); + return result; + } + + //回退单-提交 + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain one = invoicingQldMainService.getOne(qw); + dto.setNuId(one.getNuId()); + dto.setElderId(one.getElderId()); + String status = "1"; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + + //日志表插记录 + NuInvoicingQldLog logData = new NuInvoicingQldLog(); + logData.setQldNo(dto.getQldNo());//请领单号 + logData.setStatus(status);//单子操作状态 + logData.setOpeBy(sysUser.getId());//操作人 + logData.setOpeTime(new Date());//操作时间 + logData.setNuId(dto.getNuId());//护理单元id + logData.setElderId(dto.getElderId());//长者id + invoicingQldLogMapper.insert(logData); + + //更新单子为待收货 + one.setStatus(status); + one.setIzYgRead("N");//员工改为未读 + one.setIzKgRead("N");//库管改为未读 + one.setTjBy(sysUser.getId());//作废人 + one.setTjTime(new Date());//作废时间 + invoicingQldMainService.updateById(one); + + result.put("status", "success"); + result.put("message", "提交成功"); + result.put("result", ownService.queryQldByQldNo(dto.getQldNo())); + return result; + } else { + //检测 必须有新的指令 并且已经点击开始 + { + //指令工单处判断是否允许提交 + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_sq"); + p_.setNuId(dto.getNuId()); + p_.setElderId(dto.getElderId()); + Map j = invoicingQlOrdersApi.izCanSubmit(p_); + if (!j.get("error_code").equals("0")) { + result.put("status", "faild"); + result.put("message", j.get("msg")); + return result; + } + + //检测通过了 继续检测对应护理单元是否有未完结请领单 + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("nu_id", dto.getNuId()); + qw.eq("elder_id", dto.getElderId()); + qw.in("status", "1", "3", "4"); + List list = invoicingQldMainMapper.selectList(qw); + if (!CollectionUtils.isEmpty(list)) { + result.put("status", "faild"); + result.put("message", "有未完结请领单,暂时无法提交"); + return result; + } + } + + //购物车-提交 + //当前购物车信息 + QueryWrapper gwcQW = new QueryWrapper<>(); + gwcQW.eq("nu_id", dto.getNuId()); + gwcQW.eq("elder_id", dto.getElderId()); + List gwcList = invoicingQldGwcService.list(gwcQW); + + //请购车未添加物料 + if (CollectionUtils.isEmpty(gwcList)) { + result.put("status", "empty"); + result.put("message", "请选择请领物料"); + return result; + } + + //检测哪些物料有未完成请领流程的 + { + //请领流程未完成物料id + List disabledWlList = invoicingQldMainMapper.queryUnFinishWlid(dto); + if (!CollectionUtils.isEmpty(disabledWlList)) { + // 提取gwcList中的所有wlId + Set gwcWlIds = gwcList.stream() + .map(NuInvoicingQldGwc::getWlId) + .collect(Collectors.toSet()); + + // 过滤disabledWlList,只保留在gwcList中也存在的wlId + disabledWlList = disabledWlList.stream() + .filter(item -> item != null && item.getWlId() != null) + .filter(item -> gwcWlIds.contains(item.getWlId())) + .collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(disabledWlList)) { + result.put("status", "exist"); + result.put("existList", disabledWlList); + + // 将materialName用顿号拼接 + String materialNames = disabledWlList.stream() + .map(InvoicingQldInfoEntity::getMaterialName) + .collect(Collectors.joining("、")); + result.put("message", "以下物料请领中,请勿重复请领:" + materialNames); + return result; + } + } + } + + //可以正常提交 + String status = "1";//待出库(已提交) + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + //查出对应物料信息存储到info表和日志表中 + List gwcWlStrs = gwcList.stream().map(NuInvoicingQldGwc::getWlId).collect(Collectors.toList()); + List maList = configMaterialInfoMapper.queryByWlids(gwcWlStrs); + Map maMap = maList.stream().collect(Collectors.toMap(ConfigMaterialInfo::getId, item -> item)); + + + //存储主表数据 + NuInvoicingQldMain saveData = new NuInvoicingQldMain(); + //处理请领单编号 + { + // 查询机构编码 + JSONObject deptInfo = sysBaseAPI.getDeptInfo(); + String deptCode = deptInfo.getString("code"); + String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + // 构建今天的前缀模式 + String todayPrefix = "Q" + deptCode + today; + + // 查询今天所有的编号 + QueryWrapper qw = new QueryWrapper<>(); + qw.likeRight("qld_no", todayPrefix); + qw.select("qld_no"); + + List list = invoicingQldMainService.list(qw); + int maxOrderNo = 0; + + if (list != null && !list.isEmpty()) { + // 从qldNo中提取序号,找到最大值 + for (NuInvoicingQldMain item : list) { + if (item.getQldNo() != null && item.getQldNo().startsWith(todayPrefix)) { + // 提取序号部分(最后几位) + String orderStr = item.getQldNo().substring(todayPrefix.length()); + try { + int order = Integer.parseInt(orderStr); + if (order > maxOrderNo) { + maxOrderNo = order; + } + } catch (NumberFormatException e) { + // 如果解析失败,跳过 + } + } + } + } + + int nextOrderNo = maxOrderNo + 1; + String qldOrder = String.format("%03d", nextOrderNo); + saveData.setQldNo(todayPrefix + qldOrder); + } + saveData.setStatus(status); + saveData.setIzYgRead("N");//员工有新消息 + saveData.setIzKgRead("N");//库管有新消息 + saveData.setTjBy(sysUser.getId());//提交人 + saveData.setTjTime(new Date());//提交时间 + saveData.setNuId(dto.getNuId()); + saveData.setElderId(dto.getElderId()); + invoicingQldMainService.save(saveData); + + //子表存储 + List infoList = BeanUtil.copyToList(gwcList, NuInvoicingQldInfo.class); + infoList.stream().forEach(item -> { + item.setQldNo(saveData.getQldNo());//请领单单号 + item.setCreateBy(null); + item.setCreateTime(null); + item.setUpdateBy(null); + item.setUpdateTime(null); + item.setMaterialCategoryName(maMap.get(item.getWlId()).getCategoryName());//物料类别名称 + item.setMaterialTypeName(maMap.get(item.getWlId()).getTypeName());//物料类型名称 + item.setMaterialMedicationName(maMap.get(item.getWlId()).getMedicationName());//物料类型名称 + item.setMaterialName(maMap.get(item.getWlId()).getMaterialName());//物料名称 + item.setMaterialUnits(maMap.get(item.getWlId()).getMaterialUnits());//物料单位 + item.setMaterialNo(maMap.get(item.getWlId()).getMaterialNo());//物料编码 + item.setSpecificationModel(maMap.get(item.getWlId()).getSpecificationModel());//规格型号 + item.setMaterialImg(maMap.get(item.getWlId()).getMaterialImg());//物料图片 + item.setSalesUnitPrice(maMap.get(item.getWlId()).getSalesUnitPrice());//物料销售单价 + }); + invoicingQldInfoService.saveBatch(infoList); + + //清空购物车信息 + InvoicingQldQueryEntity gwcDeleteParam = new InvoicingQldQueryEntity(); + gwcDeleteParam.setNuId(dto.getNuId()); + gwcDeleteParam.setElderId(dto.getElderId()); + invoicingQldGwcService.removeAllGwc(gwcDeleteParam); + + //日志表插记录 + NuInvoicingQldLog logData = new NuInvoicingQldLog(); + logData.setQldNo(saveData.getQldNo());//请领单号 + logData.setStatus(status);//单子操作状态 + logData.setOpeBy(sysUser.getId());//操作人 + logData.setOpeTime(new Date());//操作时间 + logData.setNuId(dto.getNuId());//护理单元id + logData.setElderId(dto.getElderId());//长者id + invoicingQldLogMapper.insert(logData); + + result.put("status", "success"); + result.put("message", "提交成功"); + + InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); + orderEntity.setFlowCode("ql_sq");//指令流程flow_code 看接口有标明 + orderEntity.setBizId(saveData.getQldNo());//请领单号 + orderEntity.setNuId(saveData.getNuId()); + orderEntity.setElderId(saveData.getElderId());//长者id + orderEntity.setInitiatorId(sysUser.getEmployessId());//员工id + //修改指令工单中的业务单号 + invoicingQlOrdersApi.updateOrderBizId(orderEntity); + return result; + } + } + + /** + * 查询请领单信息 + * + * @param queryDto + * @return + */ + //@Override + public IPage queryQld(InvoicingQldQueryEntity queryDto, Integer pageNo, Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + + // 查询主表数据 + IPage mainPage = invoicingQldMainMapper.page(page, queryDto); + + // 转换为目标实体类型 + IPage resultPage = new Page<>(pageNo, pageSize, mainPage.getTotal()); + + if (mainPage != null && !mainPage.getRecords().isEmpty()) { + // 获取所有请领单号 + List qldNos = mainPage.getRecords().stream() + .map(NuInvoicingQldMain::getQldNo) + .distinct() + .collect(Collectors.toList()); + + // 批量查询操作日志 + List allLogs = new ArrayList<>(); + if (!qldNos.isEmpty()) { + allLogs = invoicingQldMainMapper.selectLogsByQldNos(qldNos); + } + + // 按请领单号分组日志 + Map> logMap = allLogs.stream() + .collect(Collectors.groupingBy(NuInvoicingQldLog::getQldNo)); + + // 转换主记录 + List entityList = new ArrayList<>(); + for (NuInvoicingQldMain main : mainPage.getRecords()) { + InvoicingQldMainEntity entity = new InvoicingQldMainEntity(); + BeanUtils.copyProperties(main, entity); + + // 处理日志列表 + List logs = logMap.get(main.getQldNo()); + if (logs != null && !logs.isEmpty()) { + List logEntities = new ArrayList<>(); + + // 处理日志过滤规则 + if (logs.size() <= 3) { + // 小于等于3条,全部保留 + for (NuInvoicingQldLog log : logs) { + InvoicingQldLogEntity logEntity = new InvoicingQldLogEntity(); + BeanUtils.copyProperties(log, logEntity); + logEntities.add(logEntity); + } + } else { + // 大于3条,只保留前三条 + int startIndex = logs.size() - 3; // 从倒数第三条开始 + for (int i = startIndex; i < logs.size(); i++) { + InvoicingQldLogEntity logEntity = new InvoicingQldLogEntity(); + BeanUtils.copyProperties(logs.get(i), logEntity); + logEntities.add(logEntity); + } + } + entity.setLogList(logEntities); + } else { + entity.setLogList(new ArrayList<>()); + } + + entityList.add(entity); + } + + resultPage.setRecords(entityList); + } else { + resultPage.setRecords(new ArrayList<>()); + } + + return resultPage; + } + + /** + * 请领单-请领单物料信息查询 + * + * @param queryDto + * @return + */ + //@Override + public List queryQldWlInfo(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getQldNo())) { + return List.of(); + } + return invoicingQldInfoMapper.queryWlInfo(queryDto); + } + + /** + * 请领单-作废 + * + * @param dto + * @return + */ + //@Override + @Transactional(rollbackFor = Exception.class) + public Map cancellation(InvoicingQldMainEntity dto) { + Map result = Maps.newHashMap(); + //检测是否可以正常作废 + if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "1,3")) { + result.put("status", "faild"); + result.put("message", "请先开始指令"); + return result; + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain one = invoicingQldMainService.getOne(qw); + dto.setNuId(one.getNuId()); + dto.setElderId(one.getElderId()); + String status = "2"; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String nowStatus = one.getStatus(); + + //检测是否已经开始服务 + if ("3".equals(nowStatus)) { + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_sq"); + p_.setIzRollback("Y"); + p_.setBizId(dto.getQldNo()); + Map j = invoicingQlOrdersApi.izCanGoOn(p_); + if (!j.get("error_code").equals("0")) { + result.put("status", "faild"); + result.put("message", j.get("msg")); + return result; + } + } + //检测是否可作废 + if ("1".equals(nowStatus)) { + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_ck"); + p_.setBizId(dto.getQldNo()); + Map j = invoicingQlOrdersApi.izCanCancel(p_); + if (!j.get("error_code").equals("0")) { + result.put("status", "faild"); + result.put("message", j.get("msg")); + return result; + } + } + + //日志表插记录 + NuInvoicingQldLog logData = new NuInvoicingQldLog(); + logData.setQldNo(dto.getQldNo());//请领单号 + logData.setStatus(status);//单子操作状态 + logData.setOpeBy(sysUser.getId());//操作人 + logData.setOpeTime(new Date());//操作时间 + logData.setNuId(dto.getNuId());//护理单元id + logData.setElderId(dto.getElderId());//长者id + invoicingQldLogMapper.insert(logData); + + //更新单子为作废 + one.setStatus(status); + one.setIzKgRead("N");//库管改为未读 + one.setZfBy(sysUser.getId());//作废人 + one.setZfTime(new Date());//作废时间 + + //服务指令流程-作废 + InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); + orderEntity.setBizId(dto.getQldNo());//请领单号 + orderEntity.setInitiatorId(sysUser.getEmployessId());//员工id + if ("1".equals(nowStatus)) { + //已提交直接作废 + orderEntity.setFlowCode("ql_zf");//指令流程flow_code 看接口有标明 + invoicingQlOrdersApi.flowQlzf(orderEntity); + } + if ("3".equals(nowStatus)) { + //回退单作废 + orderEntity.setFlowCode("ql_htzf");//指令流程flow_code 看接口有标明 + invoicingQlOrdersApi.flowQlzf(orderEntity); + } + invoicingQldMainService.updateById(one); + result.put("status", "success"); + result.put("message", "作废成功"); + return result; + } + + /** + * 请领单-单子改为已读 + * + * @param dto + * @return + */ + //@Override + public boolean transRead(InvoicingQldMainEntity dto) { + UpdateWrapper uw = new UpdateWrapper<>(); + uw.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain data = new NuInvoicingQldMain(); + if ("yg".equals(dto.getStatus())) { + data.setIzYgRead("Y"); + } else { + data.setIzKgRead("Y"); + } + return invoicingQldMainService.update(data, uw); + } + + /** + * 确认收货 + * 1、主表改为确认收货状态 + * 2、请领单操作日志表增加操作记录 + * 3、护理单元出入库日志 + * 4、护理单元货品修改对应现有数量 + * 5、添加仓库出库记录 先找出对应物料的仓库库存即为操作前库存量 请领单对应物料数即为出入库数量 两个相减即为当前库存量 crk_type 2 crk_status 3 + * 6、修改仓库库存数量 当前的值 - 操作数量 + * + * @param dto + * @return。 + */ + //@Override + @Transactional(rollbackFor = Exception.class) + public Map confirmReceipt(InvoicingQldMainEntity dto) { + Map result = Maps.newHashMap(); + + //检测是否已经开始服务 + { + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_sh"); + p_.setBizId(dto.getQldNo()); + Map j = invoicingQlOrdersApi.izCanGoOn(p_); + if (!j.get("error_code").equals("0")) { + result.put("status", "faild"); + result.put("message", j.get("msg")); + return result; + } + } + + //检测是否可以正常收货 + if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "4")) { + result.put("status", "faild"); + result.put("message", "收货失败"); + return result; + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain one = invoicingQldMainService.getOne(qw); + String status = "5";//确认收货 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //主表改为已收货 + UpdateWrapper mainUW = new UpdateWrapper<>(); + mainUW.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain mainData = new NuInvoicingQldMain(); + mainData.setStatus(status); + mainData.setShBy(sysUser.getId()); + mainData.setShTime(new Date()); + invoicingQldMainService.update(mainData, mainUW); + + //请领单操作日志表增加操作记录 + NuInvoicingQldLog logData = new NuInvoicingQldLog(); + logData.setQldNo(dto.getQldNo());//请领单号 + logData.setStatus(status);//单子操作状态 + logData.setOpeBy(sysUser.getId());//操作人 + logData.setOpeTime(new Date());//操作时间 + logData.setNuId(dto.getNuId());//护理单元id + logData.setElderId(dto.getElderId());//长者id + invoicingQldLogMapper.insert(logData); + + //护理单元出入库日志 + QueryWrapper qldInfoQW = new QueryWrapper<>(); + qldInfoQW.eq("qld_no", dto.getQldNo()); + List qldInfoList = invoicingQldInfoService.list(qldInfoQW); + List nuCrkLogList = Lists.newArrayList(); + qldInfoList.stream().forEach(item -> { + NuInvoicingNuCrkLog nuInvoicingNuCrkLog = new NuInvoicingNuCrkLog(); + BeanUtils.copyProperties(item, nuInvoicingNuCrkLog); + nuInvoicingNuCrkLog.setCreateBy(null); + nuInvoicingNuCrkLog.setCreateTime(null); + nuInvoicingNuCrkLog.setWlNum(item.getQlNum()); + nuInvoicingNuCrkLog.setType("1");//类型 1请领 + nuInvoicingNuCrkLog.setOrderNumber(item.getQldNo());//单号 + nuInvoicingNuCrkLog.setOrderType("qld");//单子类型: qld请领单 + nuInvoicingNuCrkLog.setContent("请领单:" + item.getQldNo());//备注 + + nuInvoicingNuCrkLog.setMaterialCategoryName(item.getMaterialCategoryName());//物料类别名称 + nuInvoicingNuCrkLog.setMaterialTypeName(item.getMaterialTypeName());//物料类型名称 + nuInvoicingNuCrkLog.setMaterialMedicationName(item.getMaterialMedicationName());//物料类型名称 + nuInvoicingNuCrkLog.setMaterialName(item.getMaterialName());//物料名称 + nuInvoicingNuCrkLog.setMaterialUnits(item.getMaterialUnits());//物料单位 + nuInvoicingNuCrkLog.setMaterialNo(item.getMaterialNo());//物料编码 + nuInvoicingNuCrkLog.setSpecificationModel(item.getSpecificationModel());//规格型号 + nuInvoicingNuCrkLog.setMaterialImg(item.getMaterialImg());//物料图片 + nuInvoicingNuCrkLog.setSalesUnitPrice(item.getSalesUnitPrice());//物料销售单价 + nuCrkLogList.add(nuInvoicingNuCrkLog); + }); + invoicingNuCrkLogService.saveBatch(nuCrkLogList); + + //护理单元货品修改对应现有数量 没有对应物料插入数据 有的话增加 + QueryWrapper nuKcslQW = new QueryWrapper<>(); + nuKcslQW.eq("nu_id", dto.getNuId()); + nuKcslQW.eq("elder_id", dto.getElderId()); + List nuKcslList = invoicingNuKcslService.list(nuKcslQW); + //nu库存-待新增 + List needAddList = Lists.newArrayList(); + //nu库存-待修改 + List needUpdateList = Lists.newArrayList(); + if (!CollectionUtils.isEmpty(nuKcslList)) { + Map nuKcslMap = nuKcslList.stream() + .collect(Collectors.toMap(NuInvoicingNuKcsl::getWlId, kcsl -> kcsl)); + qldInfoList.stream().forEach(item -> { + NuInvoicingNuKcsl nuInvoicingNuKcsl = new NuInvoicingNuKcsl(); + nuInvoicingNuKcsl.setNuId(item.getNuId()); + nuInvoicingNuKcsl.setElderId(item.getElderId()); + nuInvoicingNuKcsl.setWlId(item.getWlId()); + nuInvoicingNuKcsl.setKfId((item.getKfId())); + + if (nuKcslMap.containsKey(item.getWlId())) { + // 如果已有对应物料 + NuInvoicingNuKcsl existingKcsl = nuKcslMap.get(item.getWlId()); + nuInvoicingNuKcsl.setWlNum(item.getQlNum() + existingKcsl.getWlNum()); + needUpdateList.add(nuInvoicingNuKcsl); + } else { + // 如果没有对应物料 + nuInvoicingNuKcsl.setWlNum(item.getQlNum()); + needAddList.add(nuInvoicingNuKcsl); + } + }); + } else { + qldInfoList.stream().forEach(item -> { + NuInvoicingNuKcsl nuInvoicingNuKcsl = new NuInvoicingNuKcsl(); + nuInvoicingNuKcsl.setNuId(item.getNuId()); + nuInvoicingNuKcsl.setElderId(item.getElderId()); + nuInvoicingNuKcsl.setWlId(item.getWlId()); + nuInvoicingNuKcsl.setKfId((item.getKfId())); + nuInvoicingNuKcsl.setWlNum(item.getQlNum()); + needAddList.add(nuInvoicingNuKcsl); + }); + } + if (!CollectionUtils.isEmpty(needAddList)) { + invoicingNuKcslService.saveBatch(needAddList); + } + if (!CollectionUtils.isEmpty(needUpdateList)) { + needUpdateList.stream().forEach(item -> { + UpdateWrapper nuKcslUW = new UpdateWrapper<>(); + nuKcslUW.eq("nu_id", item.getNuId()); + nuKcslUW.eq("elder_id", item.getElderId()); + nuKcslUW.eq("wl_id", item.getWlId()); + invoicingNuKcslService.update(item, nuKcslUW); + }); + } + + //添加仓库出库记录 先找出对应物料的仓库库存即为操作前库存量 请领单对应物料数即为出入库数量 两个相减即为当前库存量 crk_type 2 crk_status 3 + //库房物料数量 + List kfnumList = warehouseMaterialInfoService.list(); + Map> kfWlSlMap = kfnumList.stream() + .collect(Collectors.groupingBy( + BlWarehouseMaterialInfo::getNuId, + Collectors.toMap( + BlWarehouseMaterialInfo::getWlId, + BlWarehouseMaterialInfo::getKcsl + ) + )); + List kfCrkLogList = Lists.newArrayList(); + qldInfoList.stream().forEach(item -> { + NuWarehouseMaterialCrkInfo kfCrkLog = new NuWarehouseMaterialCrkInfo(); + BeanUtils.copyProperties(item, kfCrkLog); + kfCrkLog.setId(null); + kfCrkLog.setCreateBy(null); + kfCrkLog.setCreateTime(null); + kfCrkLog.setUpdateBy(null); + kfCrkLog.setUpdateTime(null); + kfCrkLog.setCgdId(dto.getQldNo());//请领单号 + kfCrkLog.setNuId(item.getKfId());//库房id 不是nuid + kfCrkLog.setWlId(item.getWlId());//物料id + kfCrkLog.setCrkNum(item.getQlNum());//出入库数量 + kfCrkLog.setCrkType("2");//出入库类型 2请领 + kfCrkLog.setCzqkcl(kfWlSlMap.get(item.getKfId()).get(item.getWlId()));//操作前库存量 + kfCrkLog.setDqkcl((Integer.parseInt(kfWlSlMap.get(item.getKfId()).get(item.getWlId())) - item.getQlNum()) + "");//当前库存量 + kfCrkLog.setCrkStatus("3");//出入库状态 3出库 + kfCrkLog.setContent("请领单:" + dto.getQldNo());//备注 + + kfCrkLog.setMaterialCategoryName(item.getMaterialCategoryName());//物料类别名称 + kfCrkLog.setMaterialTypeName(item.getMaterialTypeName());//物料类型名称 + kfCrkLog.setMaterialMedicationName(item.getMaterialMedicationName());//物料类型名称 + kfCrkLog.setMaterialName(item.getMaterialName());//物料名称 + kfCrkLog.setMaterialUnits(item.getMaterialUnits());//物料单位 + kfCrkLog.setMaterialNo(item.getMaterialNo());//物料编码 + kfCrkLog.setSpecificationModel(item.getSpecificationModel());//规格型号 + kfCrkLog.setMaterialImg(item.getMaterialImg());//物料图片 + kfCrkLog.setSalesUnitPrice(item.getSalesUnitPrice());//物料销售单价 + kfCrkLogList.add(kfCrkLog); + }); + warehouseMaterialCrkInfoService.saveBatch(kfCrkLogList); + + //修改仓库库存数量 当前的值 - 操作数量 + Map qldWlNumMap = qldInfoList.stream() + .collect(Collectors.toMap(NuInvoicingQldInfo::getWlId, NuInvoicingQldInfo::getQlNum)); + List kfUpdateList = Lists.newArrayList(); + kfnumList.stream().forEach(item -> { + if (qldWlNumMap.get(item.getWlId()) != null) { + item.setKcsl((Integer.parseInt(item.getKcsl()) - qldWlNumMap.get(item.getWlId())) + ""); + kfUpdateList.add(item); + } + }); + warehouseMaterialInfoService.updateBatchById(kfUpdateList); + result.put("status", "success"); + result.put("message", "收货完成"); + return result; + } + + /** + * 请领单-回退 + * + * @param dto + * @return + */ + //@Override + @Transactional(rollbackFor = Exception.class) + public Map orderReturn(InvoicingQldMainEntity dto) { + Map result = Maps.newHashMap(); + //检测是否已经开始服务 + { + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_ck"); + p_.setBizId(dto.getQldNo()); + Map j = invoicingQlOrdersApi.izCanGoOn(p_); + if (!j.get("error_code").equals("0")) { + result.put("status", "faild"); + result.put("message", j.get("msg")); + return result; + } + } + + //检测是否可以正常回退 + if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "1,4")) { + result.put("status", "faild"); + result.put("message", "回退失败"); + return result; + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain one = invoicingQldMainService.getOne(qw); + dto.setNuId(one.getNuId()); + dto.setElderId(one.getElderId()); + String status = "3"; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //日志表插记录 + NuInvoicingQldLog logData = new NuInvoicingQldLog(); + logData.setQldNo(dto.getQldNo());//请领单号 + logData.setStatus(status);//单子操作状态 + logData.setOpeBy(sysUser.getId());//操作人 + logData.setOpeTime(new Date());//操作时间 + logData.setNuId(dto.getNuId());//护理单元id + logData.setElderId(dto.getElderId());//长者id + invoicingQldLogMapper.insert(logData); + + //更新单子为作废 + one.setStatus(status); + one.setIzYgRead("N");//员工改为未读 + one.setHtBy(sysUser.getId());//回退人 + one.setHtTime(new Date());//回退时间 + boolean r_ = invoicingQldMainService.updateById(one); + + result.put("status", "success"); + result.put("message", "回退成功"); + return result; + } + + /** + * 请领单-出库(单个/批量) + * + * @param dto + * @return + */ + //@Override + @Transactional(rollbackFor = Exception.class) + public Map outbound(InvoicingQldMainEntity dto) { + //出库一次只会有一个出库单了 + Map map = new HashMap<>(); + //检测是否已经开始服务 + { + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setFlowCode("ql_ck"); + p_.setBizId(dto.getQldNo()); + Map j = invoicingQlOrdersApi.izCanGoOn(p_); + if (!j.get("error_code").equals("0")) { + map.put("status", "faild"); + map.put("message", j.get("msg")); + return map; + } + } + + //检测单子状态是否正确 + if (!invoicingQldLogService.opeNodeJudgeCanStatus(dto.getQldNo(), "1")) { + map.put("status", "faild"); + map.put("message", "出库失败"); + return map; + } + //检测库房物料数量是否满足请领需求 + { + //出库物料汇总 + InvoicingQldQueryEntity q_ = new InvoicingQldQueryEntity(); + q_.setQldNo(dto.getQldNo()); + List qldInfoList = invoicingQldInfoMapper.queryWlInfo(q_); + //库房物料存量 + List kfnumList = warehouseMaterialInfoService.list(); + Map qldWlNumMap = kfnumList.stream() + .collect(Collectors.toMap(BlWarehouseMaterialInfo::getWlId, BlWarehouseMaterialInfo::getKcsl)); + StrBuilder errorWl = new StrBuilder(); + for (int i = 0; i < qldInfoList.size(); i++) { + InvoicingQldInfoEntity item = qldInfoList.get(i); + if (qldWlNumMap.get(item.getWlId()) == null || item.getQlNum() > Integer.parseInt(qldWlNumMap.get(item.getWlId()))) { + //请领数量大于库房存量的 + if (errorWl.length() > 0) { + errorWl.append("、"); + } + errorWl.append(item.getMaterialInfo().getMaterialName()); + } + } + if (!errorWl.isEmpty()) { + map.put("status", "faild"); + map.put("message", "以下物料库存不足,无法出库:" + errorWl); + return map; + } + } + + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("qld_no", dto.getQldNo()); + NuInvoicingQldMain one = invoicingQldMainService.getOne(qw); + String status = "4"; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + //日志表插记录 + NuInvoicingQldLog logData = new NuInvoicingQldLog(); + logData.setQldNo(dto.getQldNo());//请领单号 + logData.setStatus(status);//单子操作状态 + logData.setOpeBy(sysUser.getId());//操作人 + logData.setOpeTime(new Date());//操作时间 + logData.setNuId(one.getNuId());//护理单元id + logData.setElderId(one.getElderId());//长者id + invoicingQldLogService.save(logData); + + //更新单子为出库 + NuInvoicingQldMain qldData = new NuInvoicingQldMain(); + qldData.setStatus(status); + qldData.setIzYgRead("N");//员工改为未读 + qldData.setCkBy(sysUser.getId());//出库人 + qldData.setCkTime(new Date());//出库时间 + invoicingQldMainService.update(qldData, qw); + map.put("status", "success"); + map.put("message", "出库成功"); + return map; + } + //一次出库多个 +// public Map outbound(InvoicingQldMainEntity dto) { +// Map map = new HashMap<>(); +// +// //检测是否可以正常出库 +// String[] qldNosArr = dto.getQldNo().split(","); +// //本次处理单号中 - 不可出库单号 +// String cannotHandleQldNos = Arrays.stream(qldNosArr) +// .filter(qldNo -> !invoicingQldLogService.opeNodeJudgeCanStatus(qldNo, "1")) +// .collect(Collectors.joining(",")); +// //检测库房物料数量是否满足请领需求 +// { +// //出库物料汇总 +// InvoicingQldQueryEntity q_ = new InvoicingQldQueryEntity(); +// q_.setQldNo(dto.getQldNo()); +// List qldInfoList = invoicingQldInfoMapper.queryWlInfo(q_); +// //库房物料存量 +// List kfnumList = warehouseMaterialInfoService.list(); +// Map qldWlNumMap = kfnumList.stream() +// .collect(Collectors.toMap(BlWarehouseMaterialInfo::getWlId, BlWarehouseMaterialInfo::getKcsl)); +// StrBuilder errorWl = new StrBuilder(); +// for (int i = 0; i < qldInfoList.size(); i++) { +// InvoicingQldInfoEntity item = qldInfoList.get(i); +// if (qldWlNumMap.get(item.getWlId()) == null || item.getQlNum() > Integer.parseInt(qldWlNumMap.get(item.getWlId()))) { +// //请领数量大于库房存量的 +// if (errorWl.length() > 0) { +// errorWl.append("、"); +// } +// errorWl.append(item.getMaterialInfo().getMaterialName()); +// } +// } +// if (!errorWl.isEmpty()) { +// map.put("status", "faild"); +// map.put("message", "以下物料库存不足,无法出库:" + errorWl); +// return map; +// } +// } +// +// //本次处理单号中 - 可正常出库单号 +// String normalQldNos = Arrays.stream(qldNosArr) +// .filter(qldNo -> !cannotHandleQldNos.contains(qldNo)) +// .collect(Collectors.joining(",")); +// if (StringUtils.isBlank(normalQldNos)) { +// map.put("status", "faild"); +// map.put("message", "单据错误,请刷新页面"); +//// map.put("faildQldNos", cannotHandleQldNos); +// return map; +// } +// +// dto.setQldNo(normalQldNos); +// QueryWrapper qw = new QueryWrapper<>(); +// qw.in("qld_no", dto.getQldNo().split(",")); +// List list = invoicingQldMainService.list(qw); +// Map qldMap = list.stream() +// .collect(Collectors.toMap( +// NuInvoicingQldMain::getQldNo, +// qld -> qld +// )); +// String status = "4"; +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// +// //日志表插记录 +// String[] qldNoArr = dto.getQldNo().split(","); +// int length = dto.getQldNo().split(",").length; +// List logList = Lists.newArrayList(); +// for (int i = 0; i < length; i++) { +// NuInvoicingQldLog logData = new NuInvoicingQldLog(); +// logData.setQldNo(qldNoArr[i]);//请领单号 +// logData.setStatus(status);//单子操作状态 +// logData.setOpeBy(sysUser.getId());//操作人 +// logData.setOpeTime(new Date());//操作时间 +// logData.setNuId(qldMap.get(qldNoArr[i]).getNuId());//护理单元id +// logData.setElderId(qldMap.get(qldNoArr[i]).getElderId());//长者id +// logList.add(logData); +// } +// invoicingQldLogService.saveBatch(logList); +// +// //更新单子为出库 +// NuInvoicingQldMain qldData = new NuInvoicingQldMain(); +// qldData.setStatus(status); +// qldData.setIzYgRead("N");//员工改为未读 +// qldData.setCkBy(sysUser.getId());//出库人 +// qldData.setCkTime(new Date());//出库时间 +// invoicingQldMainService.update(qldData, qw); +// map.put("status", "success"); +// map.put("message", "出库成功"); +// +// //出库-服务指令流程 +// for (int i = 0; i < length; i++) { +// InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); +// orderEntity.setFlowCode("ql_ck");//指令流程flow_code 看接口有标明 +// orderEntity.setBizId(qldNoArr[i]);//请领单号 +// orderEntity.setNuId(qldMap.get(qldNoArr[i]).getNuId()); +//// orderEntity.setNuName(dto.getNuName()); +// orderEntity.setElderId(qldMap.get(qldNoArr[i]).getElderId());//长者id +//// orderEntity.setElderName(dto.getElderName());//长者姓名 +// orderEntity.setInitiatorId(sysUser.getEmployessId());//员工id +// orderEntity.setInitiatorName(sysUser.getRealname());//员工姓名 +// invoicingQlOrdersApi.flowQlck(orderEntity); +// } +// +// return map; +// } + + /** + * 请领单-调整物料数量 + * 传请领单号+物料id+物料数量 + * + * @param queryDto + * @return + */ + //@Override + public boolean updateQldWlSl(InvoicingQldQueryEntity queryDto) { + if (StringUtils.isBlank(queryDto.getQldNo()) || StringUtils.isBlank(queryDto.getWlId()) || queryDto.getQlNum() == null) { + return false; + } + return invoicingQldInfoMapper.updateQldWlSl(queryDto) > 0 ? true : false; + } + + //@Override + public InvoicingQldMainEntity queryQldByQldNo(String qldNo) { + InvoicingQldMainEntity result = invoicingQldMainMapper.queryQldByQldNo(qldNo); + // 批量查询操作日志 + List queryList = Lists.newArrayList(); + queryList.add(qldNo); + List logs = invoicingQldMainMapper.selectLogsByQldNos(queryList); + + // 处理日志列表 + if (logs != null && !logs.isEmpty()) { + List logEntities = new ArrayList<>(); + + // 处理日志过滤规则 + if (logs.size() <= 3) { + // 小于等于3条,全部保留 + for (NuInvoicingQldLog log : logs) { + InvoicingQldLogEntity logEntity = new InvoicingQldLogEntity(); + BeanUtils.copyProperties(log, logEntity); + logEntities.add(logEntity); + } + } else { + // 大于3条,只保留前三条 + int startIndex = logs.size() - 3; // 从倒数第三条开始 + for (int i = startIndex; i < logs.size(); i++) { + InvoicingQldLogEntity logEntity = new InvoicingQldLogEntity(); + BeanUtils.copyProperties(logs.get(i), logEntity); + logEntities.add(logEntity); + } + } + result.setLogList(logEntities); + } else { + result.setLogList(new ArrayList<>()); + } + + return result; + } + + /** + * 请领单-服务指令-开始服务 + * + * @param dto + * @return + */ + //@Override + public Map startDirectiveServe(InvoicingQldQueryEntity dto) { + //delete by caolei 2025-12-25 +// Map result = Maps.newHashMap(); + //检测上一操作节点是否已完成(指动作完成,非点击了结束服务) +// if (StringUtils.isNotBlank(dto.getQldNo())) { +// //提交请领车时不做检测,beginOrder方法自带检测 +// QueryWrapper mainQW = new QueryWrapper<>(); +// mainQW.eq("qld_no", dto.getQldNo()); +// NuInvoicingQldMain main = invoicingQldMainMapper.selectOne(mainQW); +// +// QueryWrapper logQW = new QueryWrapper<>(); +// logQW.eq("qld_no", dto.getQldNo()); +// logQW.orderByDesc("create_time"); +// List logList = invoicingQldLogMapper.selectList(logQW); +// +// //提交(回退后) +// if ("1".equals(dto.getStatus())) { +// if(!"3".equals(logList.get(0).getStatus())){ +// result.put("status", "faild"); +// result.put("message", "服务指令暂时无法开始"); +// return result; +// } +// } +// //作废 +// if ("2".equals(dto.getStatus())) { +// if(!"1".equals(logList.get(0).getStatus()) && !"3".equals(logList.get(0).getStatus())){ +// result.put("status", "faild"); +// result.put("message", "服务指令暂时无法开始"); +// return result; +// } +// } +// //回退 +// if ("3".equals(dto.getStatus())) { +// if(!"1".equals(logList.get(0).getStatus())){ +// result.put("status", "faild"); +// result.put("message", "服务指令暂时无法开始"); +// return result; +// } +// } +// //出库 +// if ("4".equals(dto.getStatus())) { +// if(!"1".equals(logList.get(0).getStatus())){ +// result.put("status", "faild"); +// result.put("message", "服务指令暂时无法开始"); +// return result; +// } +// } +// //确认收货 +// if ("5".equals(dto.getStatus())) { +// if(!"4".equals(logList.get(0).getStatus())){ +// result.put("status", "faild"); +// result.put("message", "服务指令暂时无法开始"); +// return result; +// } +// } +// } + + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setId(dto.getId());//执行指令id + p_.setInitiatorId(sysUser.getEmployessId()); + return invoicingOrdersApi.beginOrder(p_); + } + + /** + * 请领单-服务指令-结束服务 + * + * @param dto + * @return + */ + //@Override + @Transactional(rollbackFor = Exception.class) + public Map finishDirectiveServe(InvoicingQldQueryEntity dto) { + Map map = new HashMap(); + map.put("error_code", "0"); + map.put("msg", "可以提交"); + //获取工单,请领单,判断是否可完成 + InvoicingOrdersEntity ioe = new InvoicingOrdersEntity(); + ioe.setId(dto.getId()); + InvoicingOrdersEntity entity = invoicingOrdersApi.getOrderInfo(ioe); + if (entity != null) { + String qldNo = entity.getBizId();//业务单号 + if (qldNo != null && !qldNo.equals("")) { + //获取请领单 + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("qld_no", qldNo); + NuInvoicingQldMain main = invoicingQldMainService.getOne(qw); + if (main != null) { + map = this.izCanFinish(entity.getFlowCode(), main.getStatus()); + if (!map.get("error_code").equals("0")) { + return map; + } + //满足完成条件 + //完成 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + InvoicingOrdersEntity p_ = new InvoicingOrdersEntity(); + p_.setId(dto.getId()); + p_.setInitiatorId(sysUser.getEmployessId()); + map = invoicingOrdersApi.finishOrder(p_); + if (!map.get("error_code").equals("0")) { + return map; + } + //生成新单据 + createNextOrder(entity, main); + } else { + map.put("error_code", "1"); + map.put("msg", "请领单不存在"); + return map; + } + } else { + map.put("error_code", "1"); + map.put("msg", "请先提交请领单"); + return map; + } + } else { + map.put("error_code", "1"); + map.put("msg", "工单不存在"); + return map; + } + return map; + } + + /** + * 判断是否可结束工单 + * + * @return + */ + private Map izCanFinish(String flowCode, String status) { + Map map = new HashMap(); + map.put("error_code", "0"); + map.put("msg", "可以结束"); + //完成结束判断算法: + //一、申请可完成 flowCode=ql_sq,完成时只有2种判断,1、业务单号qldNo不为空 ;2、已提交status=1 + //二、出库可完成 flowCode=ql_ck,完成时只有2种判断,1、已出库status=4 ;2、已回退status=3 + //三、收货可完成 flowCode=ql_sh,完成时只有1种判断,1、已收货status=5 + //不考虑作废情况,作废时会将ql_sq的工单状态恢复成最原始状态,判断算法使用根据一、申请可完成 + //一、申请可完成判断 + if (flowCode.equals("ql_sq")) { + if (!status.equals("1")) { + map.put("error_code", "1"); + map.put("msg", "请先提交请领单"); + } + } + //二、出库可完成判断 + if (flowCode.equals("ql_ck")) { + if (status.equals("3") || status.equals("4")) { + } else { + map.put("error_code", "1"); + map.put("msg", "请先出库或回退"); + } + } + //三、收货可完成判断 + if (flowCode.equals("ql_sh")) { + if (!status.equals("5")) { + map.put("error_code", "1"); + map.put("msg", "请先收货"); + } + } + return map; + } + + /** + * 生成下一服务指令工单 + */ + private void createNextOrder(InvoicingOrdersEntity entity, NuInvoicingQldMain main) { + String flowCode = entity.getFlowCode(); + String status = main.getStatus(); + InvoicingOrdersEntity orderEntity = new InvoicingOrdersEntity(); + orderEntity.setFlowCode(flowCode);//ql_sq + orderEntity.setBizId(main.getQldNo());//请领单号 + orderEntity.setNuId(main.getNuId());//护理单元id + orderEntity.setElderId(main.getElderId());//长者id + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + orderEntity.setInitiatorId(sysUser.getEmployessId());//提交人id + //生成请领下一步服务指令 + if (flowCode.equals("ql_sq")) { + invoicingQlOrdersApi.flowQlsq(orderEntity); + } + if (flowCode.equals("ql_ck")) { + //生成出库下一步服务指令 + if (status.equals("4")) { + invoicingQlOrdersApi.flowQlck(orderEntity); + } + //生成回退下一步服务指令 + if (status.equals("3")) { + invoicingQlOrdersApi.flowQlht(orderEntity); + } + } + } + +}