From 80b285ce56b2ba64eacceebf88a20337b49dd7d5 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Mon, 2 Sep 2024 10:01:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9C=E6=96=B9=E9=AA=8F=E9=A9=B0=E5=B7=A5?= =?UTF-8?q?=E4=BB=B7=E8=AE=A1=E7=AE=97=E5=8E=86=E5=8F=B2=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/SyncDfjcUatBatch.jsp | 711 ++++++++++++++++++ .../interfaces/dfjc/entity/ProWagDetPO.java | 24 + 2 files changed, 735 insertions(+) create mode 100644 interface/SyncDfjcUatBatch.jsp create mode 100644 src/weaver/interfaces/dfjc/entity/ProWagDetPO.java diff --git a/interface/SyncDfjcUatBatch.jsp b/interface/SyncDfjcUatBatch.jsp new file mode 100644 index 0000000..fdfe398 --- /dev/null +++ b/interface/SyncDfjcUatBatch.jsp @@ -0,0 +1,711 @@ +<%@ page import="weaver.general.BaseBean" %> +<%@ page import="weaver.conn.RecordSetDataSource" %> +<%@ page import="cn.hutool.core.date.DateUtil" %> +<%@ page import="java.util.*" %> +<%@ page import="weaver.general.Util" %> +<%@ page import="com.wbi.util.StringUtil" %> +<%@ page import="java.math.BigDecimal" %> +<%@ page import="java.math.RoundingMode" %> +<%@ page import="java.util.stream.Collectors" %> +<%@ page import="weaver.formmode.setup.ModeRightInfo" %> +<%@ page import="weaver.conn.RecordSet" %> +<%@ page import="weaver.interfaces.dfjc.entity.ProWagDetPO" %> +<%@ page import="com.google.gson.Gson" %> +<%@ page import="java.time.format.DateTimeFormatter" %> +<%@ page import="java.time.LocalDate" %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> + +<% + + out.print("-----------SyncDfjcUatBatch start-------------"); + BaseBean basebean = new BaseBean(); + + String fromdate = request.getParameter("fromdate"); + String todate = request.getParameter("todate"); + RecordSetDataSource rsds = new RecordSetDataSource(); + RecordSet rs = new RecordSet(); + //获取当前年月日 + String today = DateUtil.format(new Date(),"yyyy-MM-dd"); +// //获取当前年月 +// String nowMonth = DateUtil.format(new Date(),"yyyy-MM"); +// //获取当前年 +// String nowYear = DateUtil.format(new Date(),"yyyy"); + + try { + basebean.writeLog("------------SyncDfjcUatBatch Try-----------"); + + //计算出开始日期和结束日期之间的每个日期 + + List everyDate = getEveryDate(fromdate, todate); + + for ( String syncdate : everyDate ) { + basebean.writeLog("syncdate: " + syncdate); + + //2023-11-22 + String nowYear = syncdate.substring(0,4); + basebean.writeLog("nowYear: " + nowYear); + + String nowMonth = syncdate.substring(0,7); + basebean.writeLog("nowMonth: " + nowMonth); + + //获取基础数据 + List> baseDatasList = new ArrayList<>(); + Map baseDataMap = new HashMap<>(); + //// String acqBaseDatasSql = " select lhid, rksl from uf_u9dddj where rksj = ?"; + //String acqBaseDatasSql = " SELECT Item, EligibleQty from MO_CompleteRpt WHERE CAST(ActualRcvTime AS DATE) = ? and DocState = 3"; + + String acqBaseDatasSql = " SELECT a.id,a.docstate,a.HandleDept, a.item,a.ActualRcvTime,a.EligibleQty,b.BusinessType FROM MO_CompleteRpt a LEFT JOIN MO_CompleteRptDocType b ON a.CompleteDocType=b.ID WHERE b.BusinessType<>48 and CAST(ActualRcvTime AS DATE) = ? and DocState = 3"; + + + //// rs.executeQuery(acqBaseDatasSql,nowDate); + rsds.executeQueryWithDatasource( acqBaseDatasSql, "u9", syncdate); + while (rsds.next()) { + String lhid = Util.null2String(rsds.getString("Item"));//料号id + String rksl = Util.null2String(rsds.getString("EligibleQty"));//入库数量 + if ( StringUtil.isNotBlank(lhid) && StringUtil.isNotBlank(rksl)) { + baseDataMap = new HashMap<>(); + baseDataMap.put("lhid",lhid); + baseDataMap.put("rksl",rksl); + baseDatasList.add(baseDataMap); + } + } + basebean.writeLog("------baseDatasList.size: " + baseDatasList.size() ); + basebean.writeLog("------baseDatasList: " + baseDatasList ); + + //获取产品单价台账 + Map> unitPricesMap = new HashMap<>(); + Map unitPriceMap = new HashMap<>(); +// String scqunitPriceSql = "select id, lhid, lh, lp, cx, xncx, rklbz1, dj, rklbz2, dj2, rklbz3, dj3 from uf_cpdjb where djnd = ?"; + String scqunitPriceSql = "select id, lhid, lh, lp, cx, xncx, rklbz1, dj, rklbz2, dj2, rklbz3, dj3 from uf_cpdjb "; + boolean b = rs.executeQuery( scqunitPriceSql); + basebean.writeLog("------b: " + b ); + while (rs.next()) { + String id = Util.null2String(rs.getString("id"));//产品单价id + String lhid = Util.null2String(rs.getString("lhid"));//料号id + String lh = Util.null2String(rs.getString("lh"));//料号 + String lp = Util.null2String(rs.getString("lp"));//料品 + String cx = Util.null2String(rs.getString("cx"));//产线 + String xncx = Util.null2String(rs.getString("xncx"));//虚拟产线 + String rklbz1 = Util.null2String(rs.getString("rklbz1"));//入库量标准1 + String dj = Util.null2String(rs.getString("dj"));//单价1 + String rklbz2 = Util.null2String(rs.getString("rklbz2"));//入库量标准2 + String dj2 = Util.null2String(rs.getString("dj2"));//单价2 + String rklbz3 = Util.null2String(rs.getString("rklbz3"));//入库量标准3 + String dj3 = Util.null2String(rs.getString("dj3"));//单价3 + if ( StringUtil.isNotBlank(lhid) && StringUtil.isNotBlank(cx) && StringUtil.isNotBlank(lp) ) { + unitPriceMap = new HashMap<>(); + unitPriceMap.put("id",id); + unitPriceMap.put("lhid",lhid); + unitPriceMap.put("lh",lh); + unitPriceMap.put("lp",lp); + unitPriceMap.put("cx",cx); + unitPriceMap.put("xncx",xncx); + unitPriceMap.put("rklbz1",rklbz1); + unitPriceMap.put("dj",dj); + unitPriceMap.put("rklbz2",rklbz2); + unitPriceMap.put("dj2",dj2); + unitPriceMap.put("rklbz3",rklbz3); + unitPriceMap.put("dj3",dj3); + unitPricesMap.put(lhid,unitPriceMap); + } + } + + basebean.writeLog("------unitPricesMap: " + new Gson().toJson(unitPricesMap)); + + //获取料号和各单价的对应关系 + Map> lpToDjMap = new HashMap<>(); + + for (Map.Entry> entry : unitPricesMap.entrySet()) { + String lp = entry.getValue().get("lp"); + String dj = entry.getValue().get("dj"); + String dj2 = entry.getValue().get("dj2"); + String dj3 = entry.getValue().get("dj3"); + + if (lpToDjMap.containsKey(lp)) { + Map djMap = lpToDjMap.get(lp); + djMap.put("dj", dj); + djMap.put("dj2", dj2); + djMap.put("dj3", dj3); + } else { + Map djMap = new HashMap<>(); + djMap.put("dj", dj); + djMap.put("dj2", dj2); + djMap.put("dj3", dj3); + lpToDjMap.put(lp, djMap); + } + } + + //获取虚拟产线和料品的对应关系 + Map> xncxToLpMap = new HashMap<>(); + + for (Map.Entry> entry : unitPricesMap.entrySet()) { + + String xncx = entry.getValue().get("xncx"); + String lp = entry.getValue().get("lp"); + + if (StringUtil.isNotBlank(xncx)) { + if (xncxToLpMap.containsKey(xncx)) { + List lpList = xncxToLpMap.get(xncx); + lpList.add(lp); + } else { + List lpList = new ArrayList<>(); + lpList.add(lp); + xncxToLpMap.put(xncx, lpList); + } + } + } + + //获取产线工价台账 + // String checkProSql = "select count(*) as number from uf_cxgj where cxmc = ? and scyf = ? "; + + //产线工价主表 + String acqProMainSql = "select id from uf_cxgj where cxmc = ? and scyf = ?"; + String acqProMainByMonthSql = "select id from uf_cxgj where scyf = ?"; + + //产线工价明细表 + // String acqProDetSql = "select id, lh, lp, rkrq, cpdj, rkcl, rkje from uf_cxgj_dt1 where mainId = ?"; + String acqProDetBatSql = "select id, mainid, lh, lp, rkrq, cpdj, rkcl, rkje from uf_cxgj_dt1 where mainid in "; + + //产线工价明细表插入 + String addProDetSql = "insert into uf_cxgj_dt1 ( mainid, lh, lp, rkrq, cpdj, rkcl, rkje ) values ( ?, ?, ?, ?, ?, ?, ? )"; + + //产线工价明细表修改 + String editProDetSql = "update uf_cxgj_dt1 set cpdj = ? ,rkje = ? where id = ? "; + + //获取当前月份的产线工价数据 + // out.print("------getProDets start"); + List proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + // out.print("------proDetList: " + proDetList ); + + //根据料号id处理 + for ( Map baseData:baseDatasList) { + basebean.writeLog("=================== " ); + basebean.writeLog("------baseData: " + baseData ); + String lhid = baseData.get("lhid");//料号id + String rksl = baseData.get("rksl");//入库数量 + Map unitPriceTmpMap = unitPricesMap.get(lhid); + + if ( unitPriceTmpMap == null || unitPriceTmpMap.isEmpty() ) { + continue; + } + + String id = unitPriceTmpMap.get("id");//产品单价id + String lp = unitPriceTmpMap.get("lp");//料品 + String lh = unitPriceTmpMap.get("lh");//料号 + String cx = unitPriceTmpMap.get("cx");//产线 + String xncx = unitPriceTmpMap.get("xncx");//虚拟产线 + String rklbz1 = unitPriceTmpMap.get("rklbz1");//标准1 + String rklbz2 = unitPriceTmpMap.get("rklbz2");//标准2 + String rklbz3 = unitPriceTmpMap.get("rklbz3");//标准3 + String dj = unitPriceTmpMap.get("dj");//单价1 + String dj2 = unitPriceTmpMap.get("dj2");//单价2 + String dj3 = unitPriceTmpMap.get("dj3");//单价3 + + //是否阶梯单价 + boolean stepUnitPriceFlag = true; + if ( StringUtil.isBlank(rklbz2) && StringUtil.isBlank(rklbz3)) { + stepUnitPriceFlag = false; + } + basebean.writeLog("------stepUnitPriceFlag: " + stepUnitPriceFlag ); + + //是否虚拟产线 + boolean virProLineFlag = true; + if ( StringUtil.isBlank(xncx)) { + virProLineFlag = false; + } + basebean.writeLog("------virProLineFlag: " + virProLineFlag ); + + Integer mainId = -1; + rs.executeQuery( acqProMainSql, cx, nowMonth); + while (rs.next()) { + mainId = Util.getIntValue( Util.null2String( rs.getString("id"))); + } + basebean.writeLog("------mainId: " + mainId ); + + Integer tempMainId = -1; + if ( mainId == -1) {//主表没有该产线的数据 + mainId = Util.getIntValue( addProMainData(cx, nowMonth, rs)); + if (cx.equals("13")) { + tempMainId = mainId; + } + } + basebean.writeLog("------mainId: " + mainId ); + + if ( !stepUnitPriceFlag ) {//非阶梯单价--直接插入一行明细 + if ( tempMainId > 0 ) { + out.print("--dj:" + dj + "--"); + out.print("--dj2:" + dj2 + "--"); + out.print("--dj3:" + dj3 + "--"); + } + + //计算入库金额 + BigDecimal depAmount = new BigDecimal(0); + if ( StringUtil.isNotBlank(rksl) && StringUtil.isNotBlank(dj)) { + BigDecimal depNum = new BigDecimal(rksl); + BigDecimal uniPri = new BigDecimal(dj); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + + rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, dj, rksl, depAmount); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + + } else {//阶梯单价 + //虚拟产线 + if ( !virProLineFlag ) { + //非虚拟产线,找同料号的明细 + if ( proDetList.isEmpty()) {//明细表没有数据 + Double unPr= 0.0; + if ( StringUtil.isBlank(dj2) ) { + unPr = Double.valueOf(dj); + } else { + if ( Double.parseDouble(rksl) < Double.parseDouble(rklbz1) ) { + unPr = Double.valueOf(dj); + } else if ( (Double.parseDouble(rksl) >= Double.parseDouble(rklbz1)) && ( StringUtil.isNotBlank(rklbz2) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz2))) ) { + unPr = Double.valueOf(dj2); + } else if ( (Double.parseDouble(rksl) >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz3)))) { + unPr = Double.valueOf(dj3); + } + } + + //计算入库金额 + BigDecimal depAmount = new BigDecimal(0); + if ( StringUtil.isNotBlank(rksl) && unPr > 0 ) { + BigDecimal depNum = new BigDecimal(rksl); + BigDecimal uniPri = new BigDecimal(unPr); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, unPr, rksl, depAmount); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + + } else { + String finalMainId = Util.null2String(mainId); + List proWList = proDetList.stream() +// .filter(pro -> pro.getMainId().equals(finalMainId) && pro.getLp() != null && pro.getLp().equals(lp)) + .filter(pro -> pro.getMainId().equals(finalMainId) ) + .collect(Collectors.toList()); +// if ( proWList.isEmpty()) {//没有同产线的明细 +// Double unPr= 0.0; +// if ( StringUtil.isBlank(dj2) ) { +// unPr = Double.valueOf(dj); +// } else { +// if (Double.parseDouble(rksl) < Double.parseDouble(rklbz1)) { +// unPr = Double.valueOf(dj); +// } else if ((Double.parseDouble(rksl) >= Double.parseDouble(rklbz1)) && (StringUtil.isNotBlank(rklbz2) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz2)))) { +// unPr = Double.valueOf(dj2); +// } else if ((Double.parseDouble(rksl) >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz3)))) { +// unPr = Double.valueOf(dj3); +// } +// } +// //计算入库金额 +// BigDecimal depAmount = new BigDecimal(0); +// if ( StringUtil.isNotBlank(rksl) && unPr > 0 ) { +// BigDecimal depNum = new BigDecimal(rksl); +// BigDecimal uniPri = new BigDecimal(unPr); +// depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); +// } +// rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, unPr, rksl, depAmount); +// proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); +// +// } else { + // 存在同产线的明细 + Double unPr= 0.0; + List rkcls = proWList.stream() + .map(pro -> pro.getStorageNumber()) + .collect(Collectors.toList()); + Double rkclSum = rkcls.stream() + .map(str -> Double.parseDouble(str)) + .reduce(0.0, Double::sum); + + rkclSum = rkclSum + Double.parseDouble(rksl); + + if ( StringUtil.isBlank(dj2) ) { + unPr = Double.valueOf(dj); + } else { + if (rkclSum < Double.parseDouble(rklbz1)) { + unPr = Double.valueOf(dj); + } else if ((rkclSum >= Double.parseDouble(rklbz1)) && (StringUtil.isNotBlank(rklbz2) && (rkclSum < Double.parseDouble(rklbz2)))) { + unPr = Double.valueOf(dj2); + } else if ((rkclSum >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (rkclSum < Double.parseDouble(rklbz3)))) { + unPr = Double.valueOf(dj3); + } + } + //计算入库金额 + BigDecimal depAmount = new BigDecimal(0); + if ( Double.parseDouble(rksl) > 0 && unPr > 0 ) { + BigDecimal depNum = new BigDecimal(rksl); + BigDecimal uniPri = new BigDecimal(unPr); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, unPr, rksl, depAmount); + //处理历史明细 + List oldDetDatas = new ArrayList<>(); + List detIds = proWList.stream() + .map(pro -> pro.getId()) + .collect(Collectors.toList()); + Map StoNumMap = proWList.stream() + .filter(pro -> detIds.contains(pro.getId())) + .collect(Collectors.toMap( + ProWagDetPO::getId, + ProWagDetPO::getStorageNumber + )); + for (String detId : detIds) { + Integer stoNum = Util.getIntValue(StoNumMap.get(detId)); + + //同产线的总量 rkclSum + //获取该料品的入库数量标准和单价 + for (ProWagDetPO pro : proWList) { + if (pro.getId().equals(detId)) { + pro.getLhid(); + } + } + unitPriceTmpMap = unitPricesMap.get(lhid); + + if ( unitPriceTmpMap == null || unitPriceTmpMap.isEmpty() ) { + continue; + } + + id = unitPriceTmpMap.get("id");//产品单价id + lp = unitPriceTmpMap.get("lp");//料品 + lh = unitPriceTmpMap.get("lh");//料号 + cx = unitPriceTmpMap.get("cx");//产线 + xncx = unitPriceTmpMap.get("xncx");//虚拟产线 + rklbz1 = unitPriceTmpMap.get("rklbz1");//标准1 + rklbz2 = unitPriceTmpMap.get("rklbz2");//标准2 + rklbz3 = unitPriceTmpMap.get("rklbz3");//标准3 + dj = unitPriceTmpMap.get("dj");//单价1 + dj2 = unitPriceTmpMap.get("dj2");//单价2 + dj3 = unitPriceTmpMap.get("dj3");//单价3 + + if ( StringUtil.isBlank(dj2) ) { + unPr = Double.valueOf(dj); + } else { + if (rkclSum < Double.parseDouble(rklbz1)) { + unPr = Double.valueOf(dj); + } else if ((rkclSum >= Double.parseDouble(rklbz1)) && (StringUtil.isNotBlank(rklbz2) && (rkclSum < Double.parseDouble(rklbz2)))) { + unPr = Double.valueOf(dj2); + } else if ((rkclSum >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (rkclSum < Double.parseDouble(rklbz3)))) { + unPr = Double.valueOf(dj3); + } + } + + //计算入库金额 + depAmount = new BigDecimal(0); + if ( stoNum > 0 && unPr > 0 ) { + BigDecimal depNum = new BigDecimal(stoNum); + BigDecimal uniPri = new BigDecimal(unPr); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + List tempList = new ArrayList<>(); + tempList.add(unPr); + tempList.add(depAmount); + tempList.add(detId); + oldDetDatas.add(tempList); +// } + + rs.executeBatchSql( editProDetSql, oldDetDatas); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + } + + } + + } else { + if ( proDetList.isEmpty()) { + Double unPr= 0.0; + if ( Double.parseDouble(rksl) < Double.parseDouble(rklbz1) ) { + unPr = Double.valueOf(dj); + } else if ( (Double.parseDouble(rksl) >= Double.parseDouble(rklbz1)) && ( StringUtil.isNotBlank(rklbz2) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz2))) ) { + unPr = Double.valueOf(dj2); + } else if ( (Double.parseDouble(rksl) >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz3)))) { + unPr = Double.valueOf(dj3); + } + //计算入库金额 + BigDecimal depAmount = new BigDecimal(0); + if ( StringUtil.isNotBlank(rksl) && unPr > 0 ) { + BigDecimal depNum = new BigDecimal(rksl); + BigDecimal uniPri = new BigDecimal(unPr); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, unPr, rksl, depAmount); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + } else { + String finalMainId = Util.null2String(mainId); + List lpTmpList = xncxToLpMap.get(xncx); + List proWList = proDetList.stream() + .filter(pro -> pro.getMainId().equals(finalMainId) && pro.getLp() != null && lpTmpList.contains(pro.getLp())) +// .filter(pro -> pro.getMainId().equals(finalMainId)) + .collect(Collectors.toList()); + if ( proWList.isEmpty()) {//没有同虚拟产线的明细 + Double unPr= 0.0; + if ( Double.parseDouble(rksl) < Double.parseDouble(rklbz1) ) { + unPr = Double.valueOf(dj); + } else if ( (Double.parseDouble(rksl) >= Double.parseDouble(rklbz1)) && ( StringUtil.isNotBlank(rklbz2) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz2))) ) { + unPr = Double.valueOf(dj2); + } else if ( (Double.parseDouble(rksl) >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (Double.parseDouble(rksl) < Double.parseDouble(rklbz3)))) { + unPr = Double.valueOf(dj3); + } + //计算入库金额 + BigDecimal depAmount = new BigDecimal(0); + if ( StringUtil.isNotBlank(rksl) && unPr > 0 ) { + BigDecimal depNum = new BigDecimal(rksl); + BigDecimal uniPri = new BigDecimal(unPr); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, unPr, rksl, depAmount); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + + } else {//存在同虚拟产线 + Double unPr= 0.0; + String stage = "dj"; + List rkcls = proWList.stream() + .map(pro -> pro.getStorageNumber()) + .collect(Collectors.toList()); + Double rkclSum = rkcls.stream() + .map(str -> Double.parseDouble(str)) + .reduce(0.0, Double::sum); + + rkclSum = rkclSum + Double.parseDouble(rksl); + + if ( rkclSum < Double.parseDouble(rklbz1) ) { + unPr = Double.valueOf(dj); + } else if ( (rkclSum >= Double.parseDouble(rklbz1)) && ( StringUtil.isNotBlank(rklbz2) && (rkclSum < Double.parseDouble(rklbz2))) ) { + unPr = Double.valueOf(dj2); + stage = "dj2"; + } else if ( (rkclSum >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (rkclSum < Double.parseDouble(rklbz3)))) { + unPr = Double.valueOf(dj3); + stage = "dj3"; + } + //计算入库金额 + BigDecimal depAmount = new BigDecimal(0); + if ( Double.parseDouble(rksl) > 0 && unPr > 0 ) { + BigDecimal depNum = new BigDecimal(rksl); + BigDecimal uniPri = new BigDecimal(unPr); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + rs.executeUpdate( addProDetSql, mainId, id, lp, syncdate, unPr, rksl, depAmount); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + //处理历史明细 + List oldDetDatas = new ArrayList<>(); + List detIds = proWList.stream() + .map(pro -> pro.getId()) + .collect(Collectors.toList()); + Map> idToLpStoNumMap = proWList.stream() + .filter(proWagDetPO -> detIds.contains(proWagDetPO.getId())) + .collect(Collectors.toMap( + proWagDetPO -> proWagDetPO.getId(), + proWagDetPO -> { + Map innerMap = new HashMap<>(); + innerMap.put("lp", proWagDetPO.getLp()); + innerMap.put("storageNumber", proWagDetPO.getStorageNumber()); + return innerMap; + } + )); + for (String detId : detIds) { + Map innerMap = idToLpStoNumMap.get(detId); + //计算入库金额 + depAmount = new BigDecimal(0); + String lpTmp = Util.null2String(innerMap.get("lp")); + Integer stoNumTmp = Util.getIntValue( Util.null2String(innerMap.get("storageNumber"))); + +// Map djTmpMap = lpToDjMap.get(lpTmp); +// Double unPrTmp = Util.getDoubleValue(djTmpMap.get(stage)); + + //获取该料品的入库数量标准和单价 + for (ProWagDetPO pro : proWList) { + if (pro.getId().equals(detId)) { + pro.getLhid(); + } + } + unitPriceTmpMap = unitPricesMap.get(lhid); + + if ( unitPriceTmpMap == null || unitPriceTmpMap.isEmpty() ) { + continue; + } + + id = unitPriceTmpMap.get("id");//产品单价id + lp = unitPriceTmpMap.get("lp");//料品 + lh = unitPriceTmpMap.get("lh");//料号 + cx = unitPriceTmpMap.get("cx");//产线 + xncx = unitPriceTmpMap.get("xncx");//虚拟产线 + rklbz1 = unitPriceTmpMap.get("rklbz1");//标准1 + rklbz2 = unitPriceTmpMap.get("rklbz2");//标准2 + rklbz3 = unitPriceTmpMap.get("rklbz3");//标准3 + dj = unitPriceTmpMap.get("dj");//单价1 + dj2 = unitPriceTmpMap.get("dj2");//单价2 + dj3 = unitPriceTmpMap.get("dj3");//单价3 + + Double unPrTmp = 0.00; + + if ( StringUtil.isBlank(dj2) ) { + unPrTmp = Double.valueOf(dj); + } else { + if (rkclSum < Double.parseDouble(rklbz1)) { + unPrTmp = Double.valueOf(dj); + } else if ((rkclSum >= Double.parseDouble(rklbz1)) && (StringUtil.isNotBlank(rklbz2) && (rkclSum < Double.parseDouble(rklbz2)))) { + unPrTmp = Double.valueOf(dj2); + } else if ((rkclSum >= Double.parseDouble(rklbz2)) && (StringUtil.isNotBlank(rklbz3) && (rkclSum < Double.parseDouble(rklbz3)))) { + unPrTmp = Double.valueOf(dj3); + } + } + + if ( stoNumTmp > 0 && unPrTmp > 0 ) { + BigDecimal depNum = new BigDecimal(stoNumTmp); + BigDecimal uniPri = new BigDecimal(unPrTmp); + depAmount = depNum.multiply(uniPri).setScale(2, RoundingMode.HALF_UP); + } + List tempList = new ArrayList<>(); + tempList.add(unPrTmp); + tempList.add(depAmount); + tempList.add(detId); + oldDetDatas.add(tempList); + } + + rs.executeBatchSql( editProDetSql, oldDetDatas); + proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs); + } + + } + } + } + + + + } + + + List mainidList = new ArrayList<>(); + rs.executeQuery( acqProMainByMonthSql, nowMonth); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + if (StringUtil.isNotBlank(id)) { + mainidList.add(id); + } + } + if ( !mainidList.isEmpty()) { + String editProMainSql = "update uf_cxgj set lrrq = ? , cxzgj = (SELECT sum( rkje ) AS cxzgj FROM uf_cxgj_dt1 WHERE mainid = ?), rkzcl = (SELECT sum( rkcl ) AS rkzcl FROM uf_cxgj_dt1 WHERE mainid = ?) where id = ?"; + for (String mainid:mainidList) { + rs.executeUpdate( editProMainSql, today, mainid, mainid, mainid); + } + } + + } + + + }catch (Exception e) { + basebean.writeLog("SyncDfjcUatBatch Exception: " + e); + out.print("-----SyncDfjcUatBatch Exception: " + e); + } + + out.print("=========SyncDfjcUatBatch End=========="); +%> + +<%! + BaseBean basebean = new BaseBean(); + + public List getEveryDate(String fromDate, String toDate) { + List everyDate = new ArrayList<>(); + + // 创建一个格式化器 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + // 将字符串转换为 LocalDate 对象 + LocalDate startLocalDate = LocalDate.parse(fromDate, formatter); + LocalDate endLocalDate = LocalDate.parse(toDate, formatter); + + // 创建一个列表来存储日期 + List dates = new ArrayList<>(); + + // 计算并添加所有日期 + for (LocalDate date = startLocalDate; date.isBefore(endLocalDate.plusDays(1)); date = date.plusDays(1)) { + dates.add(date); + } + + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + for (LocalDate date : dates) { + everyDate.add(date.format(df)); + } + + return everyDate; + } + + + public String addProMainData(String cx, String nowMonth, RecordSet rs){ + String result = ""; + String addProMainSql = "insert into uf_cxgj (lrr,lrrq,cxmc,scyf,formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,modeuuid) " + + " values (?,?,?,?,?,?,?,?,?,?)"; + String acqMainIdSql = "select id from uf_cxgj where modeuuid = ? "; + + String formmodeid = "48"; + String nowDate = DateUtil.format(new Date(),"yyyy-MM-dd"); + String nowTime = DateUtil.format(new Date(),"HH:mm:ss"); + UUID uuid = UUID.randomUUID(); + String modeuuid = uuid.toString(); + boolean addFlag = rs.executeUpdate( addProMainSql, 1, nowDate, cx, nowMonth, formmodeid, 1, 0, nowDate, nowTime, modeuuid); + if ( addFlag) { + rs.executeQuery( acqMainIdSql, modeuuid); + while ( rs.next()) { + result = Util.null2String( rs.getString("id")); + } + } + + //权限重构 + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.setNewRight(true); + modeRightInfo.editModeDataShare( 1, Integer.parseInt(formmodeid), Integer.parseInt(result)); + + return result; + } + + public List getProDets(String acqProMainByMonthSql, String acqProDetBatSql, String nowMonth, Map> unitPricesMap, RecordSet rs) { + List proMainList = new ArrayList<>(); + List proDetList = new ArrayList<>(); + try { + rs.executeQuery(acqProMainByMonthSql, nowMonth); + while ( rs.next()) { + String id = Util.null2String(rs.getString("id")); + if ( StringUtil.isNotBlank(id)) { + proMainList.add(id); + } + } + basebean.writeLog("============getProDets proMainList:"+ proMainList); + basebean.writeLog("============getProDets proMainList:"+ proMainList.size()); + if ( !proMainList.isEmpty()) { + ProWagDetPO po = null; + String sqlWhere = String.join(",",proMainList); + acqProDetBatSql = acqProDetBatSql + "( " + sqlWhere + " )"; + rs.executeQuery(acqProDetBatSql); + while ( rs.next()) { + String id = Util.null2String(rs.getString("id"));//明细ID + String mainid = Util.null2String(rs.getString("mainid")); + String lhid = Util.null2String(rs.getString("lh")); + String lp = Util.null2String(rs.getString("lp")); + String rkrq = Util.null2String(rs.getString("rkrq")); + String cpdj = Util.null2String(rs.getString("cpdj")); + String rkcl = Util.null2String(rs.getString("rkcl"));//入库产量 + String rkje = Util.null2String(rs.getString("rkje")); + if ( StringUtil.isNotBlank(mainid) && StringUtil.isNotBlank(lhid)) { + po = new ProWagDetPO(); + po.setId(id); + po.setMainId(mainid); + po.setLhid(lhid); + po.setLp(lp); + po.setStorageDate(rkrq); + po.setUnitPrice(cpdj); + po.setStorageNumber(rkcl); + po.setStorageAmount(rkje); + + Map tmpMap = unitPricesMap.get(lhid); + if ( tmpMap != null && !tmpMap.isEmpty()) { + String lh = tmpMap.get("lh"); + po.setLh(lh); + } + + proDetList.add(po); + } + } + } + }catch (Exception e) { + basebean.writeLog("getProDets exception: " + e); + } + return proDetList; + } +%> diff --git a/src/weaver/interfaces/dfjc/entity/ProWagDetPO.java b/src/weaver/interfaces/dfjc/entity/ProWagDetPO.java new file mode 100644 index 0000000..dd60803 --- /dev/null +++ b/src/weaver/interfaces/dfjc/entity/ProWagDetPO.java @@ -0,0 +1,24 @@ +package weaver.interfaces.dfjc.entity; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProWagDetPO { + + private String mainId; + private String id; + private String lhid; + private String lh; + private String lp; + private String unitPrice; + private String storageDate; + private String storageNumber; + private String storageAmount; +}