<%@ 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; } %>