东方骏驰工价计算历史人员相关代码同步
parent
933fcd2e37
commit
80b285ce56
@ -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<String> 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<Map<String, String>> baseDatasList = new ArrayList<>();
|
||||
Map<String, String> 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<String, Map<String, String>> unitPricesMap = new HashMap<>();
|
||||
Map<String, String> 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<String, Map<String, String>> lpToDjMap = new HashMap<>();
|
||||
|
||||
for (Map.Entry<String, Map<String, String>> 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<String, String> djMap = lpToDjMap.get(lp);
|
||||
djMap.put("dj", dj);
|
||||
djMap.put("dj2", dj2);
|
||||
djMap.put("dj3", dj3);
|
||||
} else {
|
||||
Map<String, String> djMap = new HashMap<>();
|
||||
djMap.put("dj", dj);
|
||||
djMap.put("dj2", dj2);
|
||||
djMap.put("dj3", dj3);
|
||||
lpToDjMap.put(lp, djMap);
|
||||
}
|
||||
}
|
||||
|
||||
//获取虚拟产线和料品的对应关系
|
||||
Map<String, List<String>> xncxToLpMap = new HashMap<>();
|
||||
|
||||
for (Map.Entry<String, Map<String, String>> entry : unitPricesMap.entrySet()) {
|
||||
|
||||
String xncx = entry.getValue().get("xncx");
|
||||
String lp = entry.getValue().get("lp");
|
||||
|
||||
if (StringUtil.isNotBlank(xncx)) {
|
||||
if (xncxToLpMap.containsKey(xncx)) {
|
||||
List<String> lpList = xncxToLpMap.get(xncx);
|
||||
lpList.add(lp);
|
||||
} else {
|
||||
List<String> 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<ProWagDetPO> proDetList = getProDets(acqProMainByMonthSql, acqProDetBatSql, nowMonth, unitPricesMap, rs);
|
||||
// out.print("------proDetList: " + proDetList );
|
||||
|
||||
//根据料号id处理
|
||||
for ( Map<String,String> baseData:baseDatasList) {
|
||||
basebean.writeLog("=================== " );
|
||||
basebean.writeLog("------baseData: " + baseData );
|
||||
String lhid = baseData.get("lhid");//料号id
|
||||
String rksl = baseData.get("rksl");//入库数量
|
||||
Map<String, String> 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<ProWagDetPO> 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<String> 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<List> oldDetDatas = new ArrayList<>();
|
||||
List<String> detIds = proWList.stream()
|
||||
.map(pro -> pro.getId())
|
||||
.collect(Collectors.toList());
|
||||
Map<String, String> 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<String> lpTmpList = xncxToLpMap.get(xncx);
|
||||
List<ProWagDetPO> 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<String> 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<List> oldDetDatas = new ArrayList<>();
|
||||
List<String> detIds = proWList.stream()
|
||||
.map(pro -> pro.getId())
|
||||
.collect(Collectors.toList());
|
||||
Map<String, Map<String, Object>> idToLpStoNumMap = proWList.stream()
|
||||
.filter(proWagDetPO -> detIds.contains(proWagDetPO.getId()))
|
||||
.collect(Collectors.toMap(
|
||||
proWagDetPO -> proWagDetPO.getId(),
|
||||
proWagDetPO -> {
|
||||
Map<String, Object> innerMap = new HashMap<>();
|
||||
innerMap.put("lp", proWagDetPO.getLp());
|
||||
innerMap.put("storageNumber", proWagDetPO.getStorageNumber());
|
||||
return innerMap;
|
||||
}
|
||||
));
|
||||
for (String detId : detIds) {
|
||||
Map<String, Object> 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<String, String> 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<String> 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<String> getEveryDate(String fromDate, String toDate) {
|
||||
List<String> everyDate = new ArrayList<>();
|
||||
|
||||
// 创建一个格式化器
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
// 将字符串转换为 LocalDate 对象
|
||||
LocalDate startLocalDate = LocalDate.parse(fromDate, formatter);
|
||||
LocalDate endLocalDate = LocalDate.parse(toDate, formatter);
|
||||
|
||||
// 创建一个列表来存储日期
|
||||
List<LocalDate> 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<ProWagDetPO> getProDets(String acqProMainByMonthSql, String acqProDetBatSql, String nowMonth, Map<String, Map<String, String>> unitPricesMap, RecordSet rs) {
|
||||
List<String> proMainList = new ArrayList<>();
|
||||
List<ProWagDetPO> 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<String, String> 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;
|
||||
}
|
||||
%>
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue