diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/kjs/plugin/JeckYunGoodsdocOutToU8PluginInitializer.java b/buildpackage/src/main/java/com/hzya/frame/plugin/kjs/plugin/JeckYunGoodsdocOutToU8PluginInitializer.java index 25a3dc3f..ecba8cd0 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/kjs/plugin/JeckYunGoodsdocOutToU8PluginInitializer.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/kjs/plugin/JeckYunGoodsdocOutToU8PluginInitializer.java @@ -103,8 +103,8 @@ public class JeckYunGoodsdocOutToU8PluginInitializer extends PluginBaseEntity { boolean flag = false; String minDate = ""; String maxDate = ""; -// Date now = new Date(); - Date now = DateUtil.parse("2025-07-06 05:10:11"); + Date now = new Date(); +// Date now = DateUtil.parse("2025-07-16 05:10:11"); boolean isLastDay = DateUtil.isSameDay(now, DateUtil.endOfMonth(now)); // isLastDay = true; if (isLastDay) { @@ -126,7 +126,7 @@ public class JeckYunGoodsdocOutToU8PluginInitializer extends PluginBaseEntity { } else { LocalDate today = LocalDate.now(); int dayOfMonth = today.getDayOfMonth(); - dayOfMonth = 6; +// dayOfMonth = 16; boolean isTargetDate = (dayOfMonth == 6 || dayOfMonth == 11 || dayOfMonth == 16 || dayOfMonth == 21 || dayOfMonth == 26); @@ -147,9 +147,10 @@ public class JeckYunGoodsdocOutToU8PluginInitializer extends PluginBaseEntity { logger.info(maxDate + " 23:59:59"); } } -// requestJson.put("minDate", minDate+ " 00:00:00"); - requestJson.put("minDate", "2025-07-01 00:00:00"); + requestJson.put("minDate", minDate+ " 00:00:00"); +// requestJson.put("minDate", "2025-07-01 00:00:00"); requestJson.put("maxDate", maxDate+ " 23:59:59"); +// requestJson.put("maxDate", "2025-07-15 23:59:59"); if(flag){ logger.info("开始执行"+getPluginName()+requestJson.toString()); goodsdocOutService.getJeckGoodsdocOutToU8(requestJson); diff --git a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocin/service/impl/GoodsdocInServiceImpl.java b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocin/service/impl/GoodsdocInServiceImpl.java index fe0ca185..1815d07c 100644 --- a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocin/service/impl/GoodsdocInServiceImpl.java +++ b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocin/service/impl/GoodsdocInServiceImpl.java @@ -148,6 +148,27 @@ public class GoodsdocInServiceImpl extends BaseService @Override public void getJeckGoodsdocInBak(JSONObject requestJson) { + + //备份物流信息 +// //新增到备份表 +// goodsdocInLogisticDao.saveLogisBak(logis); +// //在业务表删除数据 +// goodsdocInLogisticDao.deleteByMainId(logisEntity); +// +// //备份明细信息 +// //新增到备份表 +// goodsdocInDetailDao.saveDetailsBak(details); +// //在业务表删除数据 +// goodsdocInDetailDao.deleteByMainId(detailEntity); +// +// +// //备份主表信息 +// //将表头数据新增到备份表 +// goodsdocInDao.saveGoodsdocInBak(item); +// //删除业务表数据 +// goodsdocInDao.deleteByRecId(recId); + + GoodsdocInEntity goodsdocInEntity = new GoodsdocInEntity(); goodsdocInEntity.setState("Y"); //查询所有所有已经处理完成的出库单 @@ -275,7 +296,8 @@ public class GoodsdocInServiceImpl extends BaseService head.put("crdcode", "203");//入库类别编码 head.put("cmemo",cmemo);//TODO 这里填的是发货单的最早日期和最晚日期 head.put("cwhcode", "04009");//仓库编码 todo 正式需要切换为04009 - head.put("ddate", DateUtil.format(new Date(),"yyyy-MM-dd"));//销售类型 + head.put("ddate", DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd"));//销售类型 +// head.put("ddate", DateUtil.format(new Date(),"yyyy-MM-dd"));//销售类型 // head.put("ddate", "2025-05-31");//销售类型 head.put("ccuscode", "99989922");//todo 正式需要切换未这个客户 @@ -298,7 +320,7 @@ public class GoodsdocInServiceImpl extends BaseService details.put("iquantity",new BigDecimal(item.getQuantity()).subtract(new BigDecimal(item.getQuantity()).add(new BigDecimal(item.getQuantity())))); // details.put("iquantity", item.getQuantity());//数量 details.put("itaxrate",item.getTaxRate()); - + details.put("itaxrate","13"); body.add(details); } } @@ -320,7 +342,8 @@ public class GoodsdocInServiceImpl extends BaseService head.put("ccuscode", "99989922");//todo 正式需要切换未这个客户 // head.put("ccuscode", "01010918");//客户 head.put("cstcode", "11");//销售类型 - head.put("ddate", DateUtil.format(new Date(),"yyyy-MM-dd"));//创建时间 +// head.put("ddate", DateUtil.format(new Date(),"yyyy-MM-dd"));//创建时间 + head.put("ddate", DateUtil.format(DateUtil.offsetDay(new Date(), -1), "yyyy-MM-dd"));//创建时间 // head.put("ddate", "2025-05-31");//创建时间 jsonObject.put("head",head); JSONArray body = new JSONArray(); @@ -338,7 +361,7 @@ public class GoodsdocInServiceImpl extends BaseService details.put("isum",item.getTransHasTaxAmount()); details.put("iquantity",new BigDecimal(item.getQuantity()).subtract(new BigDecimal(item.getQuantity()).add(new BigDecimal(item.getQuantity())))); details.put("itaxrate",item.getTaxRate()); - details.put("itaxrate","0.13"); + details.put("itaxrate","13"); body.add(details); }); } diff --git a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutDetailEntity.xml b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutDetailEntity.xml index 435798c7..b67ba4f3 100644 --- a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutDetailEntity.xml +++ b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutDetailEntity.xml @@ -159,7 +159,7 @@ and goodsNo like '5%' diff --git a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutEntity.xml b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutEntity.xml index 67ea0cba..127214f6 100644 --- a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutEntity.xml +++ b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/entity/GoodsdocOutEntity.xml @@ -148,13 +148,13 @@ order by inOutDate asc inner join contrast_customer b on a.channelCode=b.jeck_code inner join contrast_warehouse c on a.warehouseCode=c.jeck_code where inouttype = '201' - and state is null - and CAST(GETDATE() AS DATE)>inoutdate - and inoutdate >= #{minDate} - and inoutdate <= #{maxDate} + and state is null + and CAST(GETDATE() AS DATE)>inoutdate + and inoutdate >= #{minDate} + and inoutdate <= #{maxDate} group by c.u8_code,b.u8_code,b.u8_accid - - + + INSERT INTO [dbo].[jeck_goodsdocout] ( diff --git a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/service/impl/GoodsdocOutServiceImpl.java b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/service/impl/GoodsdocOutServiceImpl.java index 685e3334..aa72c2a6 100644 --- a/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/service/impl/GoodsdocOutServiceImpl.java +++ b/service/src/main/java/com/hzya/frame/Jackyun/goodsdocout/service/impl/GoodsdocOutServiceImpl.java @@ -242,6 +242,7 @@ public class GoodsdocOutServiceImpl extends BaseService goodsdocOutDetailEntityList = goodsdocOutDetailDao.getGoodsdocOutDetailListGroup(item); if (goodsdocOutDetailEntityList.size()==0){ + item.setState("Y"); goodsdocOutDao.updateGoodsdocOut(item); return; @@ -308,7 +309,8 @@ public class GoodsdocOutServiceImpl extends BaseService> dlMap = saleInvDao.getU8BillData(sqlIsAudit,erdt); + if(CollectionUtils.isEmpty(dlMap)){ + return BaseU8Result.getFailureMessageEntity("单据不存在::"+cdlcode); + } + HashMap dt = dlMap.get(0); + String cVerifier = String.valueOf(dt.get("cVerifier")); + if(StrUtil.isEmpty(cVerifier)){ + return BaseU8Result.getFailureMessageEntity("未审核不允许关闭:"+cdlcode); + } + + String sqlSaleOutQty = " select cDLCode,irowno,ISNULL(iQuantity,0) as 'iQuantity',ISNULL(rs32.saleOutQty,0) as 'saleOutQty',ISNULL(iQuantity,0) - ISNULL(rs32.saleOutQty,0) as 'qty' " + + "from "+AccCode+".dbo.DispatchList dl " + + "left join "+AccCode+".dbo.DispatchLists dls on dls.DLID = dl.DLID " + + "left join ( select iDLsID,SUM(iQuantity) as 'saleOutQty' from "+AccCode+".dbo.rdrecords32 group by iDLsID )rs32 on rs32.iDLsID = dls.iDLsID " + + "where dl.cDLCode = '"+cdlcode+"' "; + List> saleOutQtyMap = saleInvDao.getU8BillData(sqlSaleOutQty,erdt); + if(CollectionUtils.isEmpty(saleOutQtyMap)){ + return BaseU8Result.getFailureMessageEntity("关闭失败,原因:校验发货单"+cdlcode+"出库数量失败:"); + } + //校验,发货单作废数量不能超过剩余出库数量 + jBody.forEach(obj -> { + JSONObject d = (JSONObject) obj; + String irowno = d.getString("irowno"); + for(int i = 0; i < saleOutQtyMap.size(); i++) { + HashMap selDis= saleOutQtyMap.get(0);; + String soRowNo = String.valueOf(selDis.get("irowno")); + if (irowno.equals(soRowNo)) { + BigDecimal qty = new BigDecimal(String.valueOf(selDis.get("qty"))); + if(qty.compareTo(d.getBigDecimal("iquantity")) <0){ + resultStr .append("关闭失败,原因:发货单"+cdlcode+"行"+soRowNo+"本次作废数量超出剩余出库数量"+qty+"!") ; + } + } + } + }); + //如果有错误信息,则返回错误信息 + if(StrUtil.isNotEmpty(resultStr.toString())){ + return BaseU8Result.getSuccessMessageEntity(resultStr.toString()); + } + //todo 处理销售出库单 + JSONObject saleOutJSON = GetSaleOutJSON(AccCode,jHead,jBody,String.valueOf(dt.get("DLID")),erdt); + //创建销售出库单 + U8ResultEntity resultEntity = saleOutServiceImpl.addSaleOut(saleOutJSON); + if(!resultEntity.issuccess()){ + return BaseU8Result.getFailureMessageEntity(resultEntity.getmessage()); + } + JSONObject rtn = GetDelJSON(AccCode,resultEntity.getmessage(),resultEntity.getmessage(),1); + //todo 处理销售退货单 + JSONObject retnJSON = new JSONObject(); + try { + retnJSON = GetDLRedJSON(AccCode,jHead,jBody,String.valueOf(dt.get("DLID")),erdt); + } catch (Exception e) { + //组装参数失败需要删除销售出库单 + //删除销售出库单 + U8ResultEntity resultDelete = saleOutServiceImpl.deleteSaleOut(rtn); + boolean deleteFlag =resultDelete.issuccess(); + throw new RuntimeException(e); + } + //创建红字发货单 + U8ResultEntity resultAddRed = AddRed(retnJSON); + if(!resultAddRed.issuccess()){ + //如果创建红字发货单失败,还是要回滚销售出库单 + U8ResultEntity resultDelete = saleOutServiceImpl.deleteSaleOut(rtn); + boolean deleteFlag =resultDelete.issuccess(); + if(resultDelete.issuccess()){ + return BaseU8Result.getFailureMessageEntity("回滚销售出库单删除失败:"+resultDelete.getmessage()); + } + return BaseU8Result.getFailureMessageEntity("红字发货单制单失败!原因:"+resultAddRed.getmessage()); + } + JSONObject saleOutRed = new JSONObject(); + //创建红字销售出库 + try { + saleOutRed = GetSaleOutRedJSON(resultAddRed.getmessage(),AccId,AccCode,erdt); + } catch (Exception e) { + //获取json失败需要删除销售出库和红字销售发货 + //删除销售出库单 + try { + rtn = GetDelJSON(AccCode,resultEntity.getmessage(),resultEntity.getmessage(),1); + U8ResultEntity resultDelete = saleOutServiceImpl.deleteSaleOut(rtn); + boolean deleteFlag =resultDelete.issuccess(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + //删除红字销售发货单 + try { + rtn = GetDelJSON(AccCode,resultAddRed.getmessage(),resultEntity.getmessage(),1); + U8ResultEntity resultDelete = saleOutServiceImpl.deleteSaleOut(rtn); + boolean deleteFlag =resultDelete.issuccess(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + throw new RuntimeException(e); + } + //开始创建红字销售出库 + U8ResultEntity resultAdd = saleOutServiceImpl.Add_DLPartialClose(saleOutRed); + if(!resultAdd.issuccess()){ + //删除销售出库单 + try { + rtn = GetDelJSON(AccCode,resultEntity.getmessage(),resultEntity.getmessage(),1); + U8ResultEntity resultDelete = saleOutServiceImpl.deleteSaleOut(rtn); + boolean deleteFlag =resultDelete.issuccess(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + //删除红字销售发货单 + try { + rtn = GetDelJSON(AccCode,resultAddRed.getmessage(),resultEntity.getmessage(),1); + U8ResultEntity resultDelete = saleOutServiceImpl.deleteSaleOut(rtn); + boolean deleteFlag =resultDelete.issuccess(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + //作废后下发给WMS一条数量为0的数据 + String querySql = "select " + + "ERP_NO,LIST_KIND,RCV_SEND_KIND,IO,CUST_NO,PROD_ID, " + + "CONVERT(FLOAT,( " + + " case " + + " when bReturnFlag = 0 then (case when ISNULL(num,0) = 0 then ISNULL(qty,0) else ISNULL(num,0) end) " + + " when bReturnFlag = 1 then (case when ISNULL(-num,0) = 0 then ISNULL(-qty,0) else ISNULL(-num,0) end) " + + " end) " + + " ) as 'QTY', " + + " PALLET_QTY, " + + " CREATION_DATE " + + " from " + + " ( " + + " select " + + " dl.cDLCode as 'ERP_NO' " + + " ,case when bReturnFlag = 0 then '销售出库' when bReturnFlag = 1 then '销售退货' end as 'LIST_KIND' " + + " ,'201' as 'RCV_SEND_KIND' " + + " ,case when bReturnFlag = 0 then 'O' when bReturnFlag = 1 then 'I' end as 'IO' " + + " ,dl.cCusCode as 'CUST_NO' " + + " ,dls.cInvCode as 'PROD_ID' " + + " --,0 as 'QTY' " + + " ,0 as 'PALLET_QTY' " + + " ,GETDATE() as 'CREATION_DATE' " + + " ,bReturnFlag " + + " ,ISNULL(iQuantity,0) - ISNULL(rs32.saleOutQty,0) as 'qty', " + + " ISNULL(iNum,0) - ISNULL(rs32.saleOutNum,0) as 'num' " + + " from "+AccCode+".dbo.DispatchList dl " + + " left join DispatchLists dls on dls.DLID = dl.DLID " + + " left join " + + " ( " + + " select " + + " iDLsID,SUM(iQuantity) as 'saleOutQty',SUM(ISNULL(iNum,0)) as 'saleOutNum' " + + " from "+AccCode+".dbo.rdrecords32 " + + " group by iDLsID " + + " )rs32 on rs32.iDLsID = dls.iDLsID " + + " where dl.cDLCode = '"+cdlcode+"' and ISNULL(dls.iQuantity,0) != 0 " + + " )a "; + List> dlsMap = saleInvDao.getU8BillData(querySql,erdt); + if(CollectionUtils.isEmpty(dlsMap)){ + logger.info("单据不存在:不写入WMS中间表"+cdlcode); + } + dlsMap.forEach(item->{ + try { + String insSql = "" + + "INSERT INTO [WMS].[dbo].[EW_IO_LIST] (" + + "[ERP_NO]," + + " [LIST_KIND]," + + " [RCV_SEND_KIND]," + + "[IO]," + + " [CUST_NO]," + + " [PROD_ID]," + + " [QTY]," + + " [RES_CODE]," + + " [CREATION_DATE]," + + " [PALLET_QTY]" + + ") VALUES (" + + " '"+item.get("ERP_NO")+"'," + + " '"+item.get("LIST_KIND")+"'," + + " '"+item.get("RCV_SEND_KIND")+"'," + + " '"+item.get("IO")+"', " + + " '"+item.get("CUST_NO")+"'," + + " '"+item.get("PROD_ID")+"'," + + " '"+item.get("QTY")+"'," + + " '"+item.get("RES_CODE")+"'," + + " '"+item.get("CREATION_DATE")+"'," + + " '"+item.get("PALLET_QTY")+"');"; + SaleInvEntity wmsErdt = new SaleInvEntity(); + wmsErdt.setDataSourceCode("WMS"); + logger.info("写入WMS中间表:"+saleInvDao.execInsertSql(insSql,wmsErdt)); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + }); + } + //所有的处理完成之后 将该明细对应的红蓝发货单自动出库 + } catch (Exception e) { + logger.info("部分作废:"+e.getMessage()); + return BaseU8Result.getFailureMessageEntity("部分作废失败,请联系U8管理员"); + } + return null; + } + @Override public U8ResultEntity deleteDelivery(JSONObject parm) { JSONObject jsonObject = parm.getJSONObject("jsonStr"); @@ -1929,16 +2181,17 @@ public class DeliveryOrderServiceImpl extends BaseService{ SaleInvEntity erdt = new SaleInvEntity(); erdt.setDataSourceCode("YONYOUU8NEW"); + try { - String sqlSaleOutQty = "select m1.dlid,m1.cDLCode,m1.iQuantity,m1.saleOutQty,m1.cdefine10,m2.cDLCode as cDLCodeD,m2.dlidd from (\n" + + String sqlSaleOutQty = "select DISTINCT m1.dlid,m1.cDLCode,m1.iQuantity,m1.saleOutQty,m1.cdefine10,m2.cDLCode as cDLCodeD,m2.dlid as dlidd from (\n" + "select \n" + "dl.cDLCode,\n" + "dl.dlid,\n" + "ISNULL(dls.iQuantity,0) as iQuantity,\n" + "ISNULL(rs32.saleOutQty,0) as saleOutQty,\n" + - "dl.cdefine10\n" + + "SUBSTRING(dl.cdefine10, 1, LEN(dl.cdefine10) - 5)as cdefine10,\n" + + "dls.cInvCode\n" + + "from "+accCode+".dbo.DispatchList dl\n" + + "left join "+accCode+".dbo.DispatchLists dls on dls.DLID = dl.DLID \n" + + "left join ( select iDLsID,SUM(iQuantity) as saleOutQty from "+accCode+".dbo.rdrecords32 group by iDLsID )rs32 on rs32.iDLsID = dls.iDLsID \n" + + "where ISNULL(rs32.saleOutQty,0) = 0\n" + + "and dl.cdefine10 is not null\n" + + "and LEN(dl.cdefine10)>5\n" + + " and cmaker in ('CRM合并发货明细reds','CRM合并发货明细blue')\n" + + " )m2 \n" + + " left join (\n" + + " select \n" + + "dl.cDLCode,\n" + + "dl.dlid,\n" + + "ISNULL(dls.iQuantity,0) as iQuantity,\n" + + "ISNULL(rs32.saleOutQty,0) as saleOutQty,\n" + + "dl.cdefine10,\n" + + "dls.cInvCode,\n" + + "rs32.iDLsID \n" + "from "+accCode+".dbo.DispatchList dl\n" + "left join "+accCode+".dbo.DispatchLists dls on dls.DLID = dl.DLID \n" + "left join ( select iDLsID,SUM(iQuantity) as saleOutQty from "+accCode+".dbo.rdrecords32 group by iDLsID )rs32 on rs32.iDLsID = dls.iDLsID \n" + @@ -2022,23 +2296,9 @@ public class DeliveryOrderServiceImpl extends BaseService0\n" + "and dl.cdefine10 is not null\n" + " and cmaker = 'CRM合并发货汇总'\n" + - ")m1\n" + - "left join (\n" + - "select \n" + - "dl.cDLCode,\n" + - "dl.dlid,\n" + - "ISNULL(dls.iQuantity,0) as iQuantity,\n" + - "ISNULL(rs32.saleOutQty,0) as saleOutQty,\n" + - "SUBSTRING(dl.cdefine10, 1, LEN(dl.cdefine10) - 5)as cdefine10\n" + - "from "+accCode+".dbo.DispatchList dl\n" + - "left join "+accCode+".dbo.DispatchLists dls on dls.DLID = dl.DLID \n" + - "left join ( select iDLsID,SUM(iQuantity) as saleOutQty from "+accCode+".dbo.rdrecords32 group by iDLsID )rs32 on rs32.iDLsID = dls.iDLsID \n" + - "where ISNULL(rs32.saleOutQty,0) = 0\n" + - "and dl.cdefine10 is not null\n" + - "and LEN(dl.cdefine10)>5\n" + - " and cmaker in ('CRM合并发货明细red','CRM合并发货明细blue')\n" + - ")m2 on m1.cdefine10 = m2.cdefine10 \n" + - "where m2.cDLCode is not null\n"; + " )m1 on m1.cdefine10 = m2.cdefine10 and m1.cInvCode = m2.cInvCode\n" + + " where m1.iDLsID is not null\n" + + "\t"; List> saleOutQtyMap = saleInvDao.getU8BillData(sqlSaleOutQty,erdt); //如果该返回不为空则证明有需要自动出库的数据,执行自动出库逻辑 //所有的发货单自动出库 @@ -2060,6 +2320,8 @@ public class DeliveryOrderServiceImpl extends BaseService> cDLCodeList = saleInvDao.getU8BillData(dlSql,erdt); + JSONObject saleInvoice = new JSONObject(); + StringBuffer sb = new StringBuffer(); + JSONArray saleInvoiceArr = new JSONArray(); + Integer i= 0; if(CollectionUtils.isNotEmpty(cDLCodeList)){ - cDLCodeList.forEach(map->{ - String cDLCode = String.valueOf(map.get("cdlcode")); + for(HashMap map : cDLCodeList){ //通过发货单号分别查询出库信息 参照出库信息进行合并开票 - - }); + String cDLCode = String.valueOf(map.get("cdlcode")); + sb.append(cDLCode); + String saleOutSql = "select\n" + + "rd.id, \n" + + "rd.cvouchtype,\n" + + "rd.cstcode,\n" + + "rd.cdepcode,\n" + + "rd.cshipaddress,\n" + + "dl.itaxrate,\n" + + "-- rd.csbvcode,\n" + + "'汇总出库自动结0生成'cmaker,\n" + + "rd.ddate,\n" + + "rd.ccuscode,\n" + + "dl.ccusname,\n" + + "CustomerBank.cBranch as ccusbank,\n" + + "CustomerBank.cAccountNum as ccusaccount,\n" + + "dl.breturnflag,\n" + + "rd.cdlcode,\n" + + "rd.cmemo,\n" + + "Customer.cCusHand as cdefine12,\n" + + "rd.csource,\n" + + "rd.cbustype,\n" + + "rd.vt_id,\n" + + "dl.cexch_name,\n" + + " dl.iexchrate,\n" + + "'0' as csocode,\n" + + "dl.bcashsale,\n" + + "'1' as idisp\n" + + "from "+accCode+".dbo.RdRecord32 rd\n" + + "left join "+accCode+".dbo.DispatchList dl on rd.cbuscode = dl.cdlcode\n" + + "left join "+accCode+".dbo.Customer Customer on rd.ccuscode = Customer.ccuscode\n" + + "left join "+accCode+".dbo.CustomerBank on rd.ccuscode = CustomerBank.ccuscode and bDefault = '1'\n" + + "where cbuscode = '"+cDLCode+"'"; + List> saleOutList = null; + try { + saleOutList = saleInvDao.getU8BillData(dlSql,erdt); + } catch (Exception e) { + throw new RuntimeException(e); + } + if(CollectionUtils.isNotEmpty(saleOutList)){ + //只要第一行作为发票头 + saleInvoice.putAll(saleOutList.get(0)); + for(HashMap out : saleOutList){ + String id = String.valueOf(out.get("id")); + //获取出库明细用于生成发票行 + String saleOutDetailSql = "select \n" + + "rds.idlsid,\n" + + "rds.AutoID as isaleoutid,\n" + + "rds.iquantity as foutquantity,\n" + + "invc.cInvCName as cinvcname,\n" + + "dls.cwhcode,\n" + + "rds.cinvcode,\n" + + "rds.iquantity,\n" + + "rds.inum,\n" + + "rds.iUnitCost iquotedprice,\n" + + "dls.iunitprice,\n" + + "dls.itaxunitprice,\n" + + "dls.imoney,\n" + + "dls.itax,\n" + + "dls.isum,\n" + + "dls.idiscount,\n" + + "dls.inatunitprice,\n" + + "dls.inatmoney,\n" + + "dls.inattax,\n" + + "dls.inatsum,\n" + + "dls.inatdiscount,\n" + + "dls.kl,\n" + + "dls.kl2,\n" + + "dls.itaxrate,\n" + + "dls.bsaleprice,\n" + + "dls.itb,\n" + + "dls.tbquantity,\n" + + "\n" + + "dls.cinvname,\n" + + "dls.bneedsign,\n" + + "dls.bgift,\n" + + "dls.bmpforderclosed,\n" + + "rds.bcosting,\n" + + "inv.cgroupcode,\n" + + "dls.cunitid,\n" + + "inv.igrouptype,\n" + + "dls.isosid,\n" + + "'001' as cfactorycode\n" + + "from "+accCode+".dbo.rdrecords32 rds\n" + + "left join "+accCode+".dbo.inventory inv on rds.cinvcode = inv.cinvcode\n" + + "left join "+accCode+".dbo.InventoryClass invc on inv.cinvccode = invc.cinvccode\n" + + "left join "+accCode+".dbo.DispatchLists dls on rds.iDLsID = dls.iDLsID\n" + + "where id = '"+id+"'"; + List> saleOutDetailList = null; + try { + saleOutDetailList = saleInvDao.getU8BillData(saleOutDetailSql,erdt); + } catch (Exception e) { + throw new RuntimeException(e); + } + for(HashMap outDetail : saleOutDetailList){ + i++; + outDetail.put("cdlcode",out.get("cdlcode")); + outDetail.put("cbsaleout",out.get("cbsaleout")); + outDetail.put("iexchrate",out.get("iexchrate")); + outDetail.put("irowno",i); + saleInvoiceArr.add(outDetail); + }; + }; + } + } } - return null; + saleInvoice.put("cdlcode",sb.toString().substring(0, sb.toString().length() - 1)); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("AccId", accCode); + jsonObject.put("billid", "123"); + jsonObject.put("head", saleInvoice); + jsonObject.put("body", saleInvoiceArr); + JSONObject result = new JSONObject(); + result.put("jsonStr", jsonObject); + return result; } public static List> removeDuplicates(List> list) { @@ -2156,12 +2532,12 @@ public class DeliveryOrderServiceImpl extends BaseService { JSONObject lineObj = JSON.parseObject(line.toString()); JSONObject details = new JSONObject(); - String iquantity = lineObj.getString("isum"); + String iquantity = lineObj.getString("iquantity"); String isum = lineObj.getString("isum"); - String idiscount = lineObj.getString("isum"); - if("red".equals( type)){ + String idiscount = lineObj.getString("idiscount"); + if("reds".equals( type)){ details.put("iquantity",new BigDecimal(iquantity).subtract(new BigDecimal(iquantity).add(new BigDecimal(iquantity)))); details.put("isum",new BigDecimal(isum).subtract(new BigDecimal(isum).add(new BigDecimal(isum)))); details.put("idiscount",new BigDecimal(idiscount).subtract(new BigDecimal(idiscount).add(new BigDecimal(idiscount)))); @@ -2202,6 +2578,7 @@ public class DeliveryOrderServiceImpl extends BaseService { */ void getU8SaleInvToCrm(JSONObject requestJson); + /** + * + * @content 销售发票-新增 + * @param parm + * @className: Administrator + * @author laborer + * @date 2024-10-18 13:48 + * + */ + U8ResultEntity addSaleInt(JSONObject parm); } diff --git a/service/src/main/java/com/hzya/frame/u8/saleinv/service/impl/SaleInvServiceImpl.java b/service/src/main/java/com/hzya/frame/u8/saleinv/service/impl/SaleInvServiceImpl.java index b25a47ad..97d20a78 100644 --- a/service/src/main/java/com/hzya/frame/u8/saleinv/service/impl/SaleInvServiceImpl.java +++ b/service/src/main/java/com/hzya/frame/u8/saleinv/service/impl/SaleInvServiceImpl.java @@ -1,6 +1,7 @@ package com.hzya.frame.u8.saleinv.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.UUID; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -16,6 +17,9 @@ import com.hzya.frame.u8.saleinv.entity.SaleInvEntity; import com.hzya.frame.u8.saleinv.service.ISaleInvService; import com.hzya.frame.u8.saleout.entity.SaleOutDetailEntity; +import com.hzya.frame.u8.util.BaseU8Result; +import com.hzya.frame.u8.util.U8ResultEntity; +import com.hzya.frame.u8.util.U8Util; import com.hzya.frame.web.entity.JsonResultEntity; import org.apache.commons.collections.CollectionUtils; import org.apache.logging.log4j.LogManager; @@ -24,7 +28,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; /** @@ -124,6 +132,132 @@ public class SaleInvServiceImpl extends BaseService implem } } + + @Override + public U8ResultEntity addSaleInt(JSONObject parm) { + String billCode = ""; + String SBVID = ""; + String AccId = ""; + try { + JSONObject jsonObject = parm.getJSONObject("jsonStr"); + logger.info("接收到的参数"+jsonObject.toString()); + StringBuffer resultStr = new StringBuffer();//回传json + String billid = jsonObject.getString("billid"); + if(StrUtil.isEmpty(billid)){ + return BaseU8Result.getFailureMessageEntity("请传入第三方唯一标识"); + } + AccId = jsonObject.getString("AccId"); + + if(StrUtil.isEmpty(AccId)){ + return BaseU8Result.getFailureMessageEntity("请传入正确的账套号"); + } + String AccCode = U8Util.accMap.get(AccId); + if(StrUtil.isEmpty(AccCode)){ + return BaseU8Result.getFailureMessageEntity("请传入正确的账套号"); + } + JSONObject jHead = jsonObject.getJSONObject("head"); + + //如果有错误信息,则返回错误信息 + if(StrUtil.isNotEmpty(resultStr.toString())){ + return BaseU8Result.getFailureMessageEntity(resultStr.toString()); + } + SaleInvEntity U8Obj = new SaleInvEntity(); + U8Obj.setDataSourceCode("YONYOUU8NEW"); + //生成单号 + String cSBVCodeSql = "SELECT ISNULL(max(CONVERT(DECIMAL(20, 0), cSBVCode))+1, CONVERT (VARCHAR (20),ddate,112) + '0001') as cSBVCode " + + "FROM "+AccCode+".dbo.SaleBillVouch " + + "WHERE cSBVCode LIKE CONVERT (VARCHAR (20),'"+DateUtil.format(jHead.getDate("ddate"),"yyyyMMdd")+"',112) + '%'" + + "AND len(cSBVCode) = 12 GROUP BY ddate"; + List> ccodeHashMaps = saleInvDao.getU8BillData(cSBVCodeSql,U8Obj); + if(CollectionUtils.isNotEmpty(ccodeHashMaps)){ + HashMap ccodeObj= ccodeHashMaps.get(0); + jHead.put("csbvcode",ccodeObj.get("cSBVCode")); + }else{ + jHead.put("csbvcode",DateUtil.format(jHead.getDate("ddate"),"yyyyMMdd")+"0001"); + } + //todo 发货单表体 + JSONArray body = new JSONArray(); + JSONArray jBody = jsonObject.getJSONArray("body"); + for (int i = 0; i < jBody.size(); i++) { + JSONObject jBodyObj = jBody.getJSONObject(i); + body.add(jBodyObj) ; + } + JSONObject main = new JSONObject(); + main.put("head",jHead); + main.put("billid",billid); + main.put("AccId",AccId); + main.put("head",jHead); + main.put("body",body); + main.put("domPosition",new ArrayList<>()); + //如果有错误信息,则返回错误信息 + if(StrUtil.isNotEmpty(resultStr.toString())){ + return BaseU8Result.getSuccessMessageEntity(resultStr.toString()); + } + + logger.info("销售发票推送前参数:"+main.toString()); + String result = U8Util.sengBillToU8(main.toString(), "8000110025"); + logger.info("销售发票新增推送U8结果:"+result); + JSONObject resultObj = JSON.parseObject(result); + boolean flag = resultObj.getBoolean("success"); + logger.info(resultObj.toString()); + if(!flag){ + return BaseU8Result.getFailureMessageEntity("新增失败:::"+resultObj.getString("message")); + }else{ + billCode = resultObj.getString("message"); + //新增成功之后调用审核接口进行审核 + //通过返回的编码获取发货单主键 + String dlSql = "select SBVID from "+AccCode+".dbo.SaleBillVouch where cSBVCode = '"+billCode+"' "; + SaleInvEntity erdt = new SaleInvEntity(); + erdt.setDataSourceCode("YONYOUU8NEW"); + List> dlMap = saleInvDao.getU8BillData(dlSql,erdt); + if(CollectionUtils.isEmpty(dlMap)){ + return BaseU8Result.getFailureMessageEntity("查询发货单主键失败::"+billCode); + } + JSONObject dt3 = new JSONObject(dlMap.get(0)); + SBVID = dt3.getString("SBVID"); + //审核 + JSONObject audit = new JSONObject(); + audit.put("billid", UUID.randomUUID()); + audit.put("AccId", AccId); + audit.put("cVoucherId", SBVID); + logger.info("发货单审核:"+main.toString()); + String resultAudit = U8Util.sengBillToU8(audit.toString(), "8000110016"); + logger.info("发货单审核结果:"+result); + JSONObject resultObjA = JSON.parseObject(resultAudit); + boolean flagAudit = resultObjA.getBoolean("success"); +// logger.info(resultObj.toString()); + if(!flagAudit){ + //如果审核失败需要调用删除接口回滚单据 + JSONObject delete = new JSONObject(); + delete.put("billid", UUID.randomUUID()); + delete.put("AccId", AccId); + delete.put("cVoucherId", SBVID); + //删除 + String resultDelete = U8Util.sengBillToU8(delete.toString(), "8000110026"); + //删除之后直接返回失败信息 + return BaseU8Result.getFailureMessageEntity("新增正常但审核失败:::"+resultObjA.getString("message")); + } + + } + // {"code":1,"success":"true","message":"2012502250010"} + return BaseU8Result.getSuccessMessageEntity(resultObj.getString("message")); + } catch (Exception e) { + if (SBVID != null) { + //如果进入异常,并且单据主键不为空,也同样删除单据进行回滚 + JSONObject delete = new JSONObject(); + delete.put("billid", UUID.randomUUID()); + delete.put("AccId", AccId); + delete.put("cVoucherId", SBVID); + //删除 + String resultDelete = U8Util.sengBillToU8(delete.toString(), "8000110028"); + } + //删除之后直接返回失败信息 + logger.info("新增失败:"+e.getMessage()); + return BaseU8Result.getFailureMessageEntity("新增失败,请联系U8管理员"); + } +// return BaseU8Result.getSuccessMessageEntity("更新成功"); + } + /** * * @content 保存日志信息 diff --git a/service/src/main/java/com/hzya/frame/u8/util/U8Util.java b/service/src/main/java/com/hzya/frame/u8/util/U8Util.java index 24bb45b9..0c40d0cf 100644 --- a/service/src/main/java/com/hzya/frame/u8/util/U8Util.java +++ b/service/src/main/java/com/hzya/frame/u8/util/U8Util.java @@ -46,7 +46,7 @@ public class U8Util { } public static String sengBillToU8(String parm, String apiCode){ - String baseUrl = "http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface"; + String baseUrl = "http://127.0.0.1:9990/kangarooDataCenterV3/entranceController/externalCallInterface"; System.out.println("推送参数"+parm); String result = HttpRequest.post(baseUrl) .header("appId", "800011")//头信息,多个头信息多次调用此方法即可