package com.ld.igds.inout.service; import com.bstek.bdf2.core.orm.jdbc.JdbcDao; import com.ld.igds.constant.Constant; import com.ld.igds.constant.DepotType; import com.ld.igds.constant.FoodVariety; import com.ld.igds.constant.TransType; import com.ld.igds.inout.InoutConstant; import com.ld.igds.inout.dto.*; import com.ld.igds.models.Depot; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.DateUtil; import com.ld.igds.view.service.HDepotService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; /** * @author vince */ @Slf4j @Component(JInoutReportService.BEAN_ID) public class JInoutReportService extends JdbcDao { public static final String BEAN_ID = "jdbcInoutReportServiceImpl"; @Autowired private HDepotService depotService; public List getInoutDepotData( Map parameter) { // 时间条件必须 Date start = (Date) parameter.get("start"); Date end = (Date) parameter.get("end"); String deptId = (String) parameter.get("deptId"); if (start == null || end == null || StringUtils.isEmpty(deptId)) return null; StringBuffer sql = new StringBuffer(); sql.append("SELECT "); sql.append("d.ID_ AS depotId, "); sql.append("d.NAME_ AS depotName, "); sql.append("d.FOOD_TYPE_ AS foodType, "); sql.append("d.FOOD_VARIETY_ AS foodVariety, "); sql.append("0 as cqkc, "); sql.append("d.STORAGE_REAL_ as qmkc, "); sql.append("a.inNum, "); sql.append("a.outNum, "); sql.append("a.lossNum, "); sql.append("a.overNum, "); sql.append("( "); sql.append("IFNULL(a.inNum, 0) + IFNULL(a.overNum, 0) "); sql.append(") AS inSum, "); sql.append("( "); sql.append("IFNULL(a.outNum, 0) + IFNULL(a.lossNum, 0) "); sql.append(") AS outSum "); sql.append("FROM "); sql.append("d_depot d "); sql.append("LEFT JOIN ( "); sql.append("SELECT "); sql.append("a.DEPOT_ID_, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ = :typeIn, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS inNum, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ = :typeOut, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS outNum, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ = :typeLoss, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS lossNum, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ = :typeOver, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS overNum "); sql.append("FROM "); sql.append("( "); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("COMPANY_ID_ = :companyId "); sql.append("AND PROGRESS_ = :progress "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND COMPLETE_TIME_ >= :start "); sql.append("AND COMPLETE_TIME_ <= :end "); sql.append("AND DEPT_ID_ = :deptId "); sql.append(") a "); sql.append("GROUP BY a.DEPOT_ID_ "); sql.append(") a ON d.ID_ = a.DEPOT_ID_ "); sql.append("WHERE d.COMPANY_ID_ = :companyId "); sql.append("AND d.DEPOT_TYPE_ <> :depotTypeOther "); sql.append("AND d.DEPT_ID_ = :deptId "); sql.append("ORDER BY d.ID_"); Map args = new HashMap<>(); args.put("deptId", deptId); args.put("companyId", ContextUtil.getCompanyId()); args.put("typeIn", InoutConstant.TYPE_IN); args.put("typeOut", InoutConstant.TYPE_OUT); args.put("typeLoss", Constant.LOSS_OVER_LOSS); args.put("typeOver", Constant.LOSS_OVER_OVER); args.put("progress", InoutConstant.PROGRESS_RECORD); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); args.put("start", DateUtil.getCurZero(start)); args.put("end", DateUtil.getNextZero(end)); args.put("depotTypeOther", DepotType.TYPE_99.getCode()); log.debug("====执行SLQ1={}", sql.toString()); List data = this.getNamedParameterJdbcTemplate() .query(sql.toString(), args, new ReportInoutDepotRowMapper()); if (null == data || data.isEmpty()) return data; // 根据开始时间获取距离最近的车辆信息,获取初期库存 sql = new StringBuffer(); args = new HashMap<>(); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("( "); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("COMPANY_ID_, "); sql.append("PROGRESS_, "); sql.append("RECORD_STATUS_, "); sql.append("DEPT_ID_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("COMPANY_ID_ =:companyId "); sql.append("AND PROGRESS_ =:progress "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND DEPT_ID_ = :deptId "); sql.append("AND COMPLETE_TIME_ < :start "); sql.append("ORDER BY COMPLETE_TIME_ DESC "); sql.append("LIMIT 9999 "); sql.append(") AS a "); sql.append("GROUP BY "); sql.append("a.DEPOT_ID_ "); args.put("deptId", deptId); args.put("companyId", ContextUtil.getCompanyId()); args.put("progress", InoutConstant.PROGRESS_RECORD); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); // 获取距离开始时间久最近的数据,当前天的第五分钟 Date date = DateUtil.getCurZero(start); args.put("start", DateUtils.addMinutes(date, 5)); log.debug("====执行SLQ2={}", sql.toString()); List list1 = this .getNamedParameterJdbcTemplate().query(sql.toString(), args, new ReportInoutStorageRowMapper()); // 获取期末库存,获取距离结束时间最近的一条数据 sql = new StringBuffer(); args = new HashMap<>(); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("( "); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("COMPANY_ID_, "); sql.append("PROGRESS_, "); sql.append("RECORD_STATUS_, "); sql.append("DEPT_ID_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("COMPANY_ID_ =:companyId "); sql.append("AND PROGRESS_ =:progress "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND DEPT_ID_ = :deptId "); sql.append("AND COMPLETE_TIME_ <:end "); sql.append("ORDER BY COMPLETE_TIME_ DESC "); sql.append("LIMIT 9999 "); sql.append(") AS a "); sql.append("GROUP BY "); sql.append("a.DEPOT_ID_ "); args.put("deptId", deptId); args.put("companyId", ContextUtil.getCompanyId()); args.put("progress", InoutConstant.PROGRESS_RECORD); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); args.put("end", DateUtil.getNextZero(end)); log.debug("====执行SLQ3={}", sql.toString()); List list2 = this .getNamedParameterJdbcTemplate().query(sql.toString(), args, new ReportInoutStorageRowMapper()); // 调整期末库存和初期库存以及合计信息 updateDepotReport(data, list1, list2); return data; } private void updateDepotReport(List data, List list1, List list2) { ReportInoutDepotData sum = new ReportInoutDepotData(); int index = 1; for (ReportInoutDepotData d : data) { // 设置序号 d.setRemarks(String.valueOf(index)); // 当前数据添加初期库存 d = this.updateDepotReportCqkc(d, list1); // d = this.updateDepotReportQmkc(d, list2); // 合计信息 sum.setCqkc(sum.getCqkc() + d.getCqkc()); sum.setInNum(sum.getInNum() + d.getInNum()); sum.setOverNum(sum.getOverNum() + d.getOverNum()); sum.setInSum(sum.getInSum() + d.getInSum()); sum.setOutNum(sum.getOutNum() + d.getOutNum()); sum.setLossNum(sum.getLossNum() + d.getLossNum()); sum.setOutSum(sum.getOutSum() + d.getOutSum()); sum.setQmkc(sum.getQmkc() + d.getQmkc()); index++; } sum.setDepotName("合计"); data.add(sum); } // 注意:如果期末库存没有临近数据,则表示获取最新的库存 public ReportInoutDepotData updateDepotReportQmkc(ReportInoutDepotData d, List list2) { ReportInoutStorageData inoutStorageData = null; for (ReportInoutStorageData storageData : list2) { if (storageData.getDepotId().equals(d.getDepotId())) { inoutStorageData = storageData; break; } } if (null == inoutStorageData) { Depot depot = depotService.getDepotById(ContextUtil.getCompanyId(), d.getDepotId()); d.setQmkc(null == depot.getStorageReal() ? 0.0 : depot .getStorageReal()); return d; } double cmkc = inoutStorageData.getCurStorage(); if (InoutConstant.TYPE_IN.equals(inoutStorageData.getType())) { cmkc = inoutStorageData.getCurStorage() + inoutStorageData.getSettleWeight(); } if (InoutConstant.TYPE_OUT.equals(inoutStorageData.getType())) { cmkc = inoutStorageData.getCurStorage() - inoutStorageData.getSettleWeight(); } if (Constant.LOSS_OVER_OVER.equals(inoutStorageData.getType())) { cmkc = inoutStorageData.getCurStorage() + inoutStorageData.getSettleWeight(); } if (Constant.LOSS_OVER_LOSS.equals(inoutStorageData.getType())) { cmkc = inoutStorageData.getCurStorage() - inoutStorageData.getSettleWeight(); } d.setQmkc(cmkc); return d; } private ReportInoutDepotData updateDepotReportCqkc(ReportInoutDepotData d, List list1) { ReportInoutStorageData inoutStorageData = null; for (ReportInoutStorageData storageData : list1) { if (storageData.getDepotId().equals(d.getDepotId())) { inoutStorageData = storageData; break; } } if (null == inoutStorageData) { d.setCqkc(0.0); return d; } double cqkc = inoutStorageData.getCurStorage(); if (InoutConstant.TYPE_IN.equals(inoutStorageData.getType())) { cqkc = inoutStorageData.getCurStorage() + inoutStorageData.getSettleWeight(); } if (InoutConstant.TYPE_OUT.equals(inoutStorageData.getType())) { cqkc = inoutStorageData.getCurStorage() - inoutStorageData.getSettleWeight(); } if (Constant.LOSS_OVER_OVER.equals(inoutStorageData.getType())) { cqkc = inoutStorageData.getCurStorage() + inoutStorageData.getSettleWeight(); } if (Constant.LOSS_OVER_LOSS.equals(inoutStorageData.getType())) { cqkc = inoutStorageData.getCurStorage() - inoutStorageData.getSettleWeight(); } d.setCqkc(cqkc); if (StringUtils.isEmpty(d.getFoodVarietyName()) && d.getCqkc() > 0) { d.setFoodVarietyName(FoodVariety.getMsg(inoutStorageData .getFoodVariety())); d.setFoodVariety(inoutStorageData.getFoodVariety()); } return d; } public List getFoodVarietyData( Map parameter) { // 时间条件必须 Date start = (Date) parameter.get("start"); Date end = (Date) parameter.get("end"); String deptId = (String) parameter.get("deptId"); if (start == null || end == null) return null; StringBuffer sql = new StringBuffer(); sql.append("SELECT "); sql.append("'NONE' as foodType, "); sql.append("0 as cqkc, "); sql.append("0 as qmkc, "); sql.append("0 as inSum, "); sql.append("0 as outSum, "); sql.append("a.FOOD_VARIETY_ as foodVariety, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ =:typeIn, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS inNum, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ =:typeOut, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS outNum, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ =:typeLoss, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS lossNum, "); sql.append("SUM( "); sql.append("IF ( "); sql.append("a.TYPE_ =:typeOver, "); sql.append("a.SETTLE_WEIGHT_, "); sql.append("0 "); sql.append(") "); sql.append(") AS overNum "); sql.append("FROM "); sql.append("( "); sql.append("SELECT "); sql.append("FOOD_VARIETY_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("COMPANY_ID_ =:companyId "); sql.append("AND PROGRESS_ =:progress "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND COMPLETE_TIME_ >= :start "); sql.append("AND COMPLETE_TIME_ <= :end "); sql.append("AND DEPT_ID_ = :deptId "); sql.append("ORDER BY COMPLETE_TIME_ DESC "); sql.append(") a "); sql.append("GROUP BY a.FOOD_VARIETY_ "); Map args = new HashMap<>(); args.put("deptId", deptId); args.put("companyId", ContextUtil.getCompanyId()); args.put("typeIn", InoutConstant.TYPE_IN); args.put("typeOut", InoutConstant.TYPE_OUT); args.put("typeLoss", Constant.LOSS_OVER_LOSS); args.put("typeOver", Constant.LOSS_OVER_OVER); args.put("progress", InoutConstant.PROGRESS_RECORD); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); args.put("start", DateUtil.getCurZero(start)); args.put("end", DateUtil.getNextZero(end)); log.debug("====执行SLQ1={},参数={}", sql.toString(), args); List data = this.getNamedParameterJdbcTemplate() .query(sql.toString(), args, new ReportFoodVarietyRowMapper()); // 根据开始时间获取距离最近的车辆信息,获取初期库存 sql = new StringBuffer(); args = new HashMap<>(); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("( "); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("COMPANY_ID_, "); sql.append("PROGRESS_, "); sql.append("RECORD_STATUS_, "); sql.append("DEPT_ID_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("COMPANY_ID_ =:companyId "); sql.append("AND PROGRESS_ =:progress "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND DEPT_ID_ = :deptId "); sql.append("AND COMPLETE_TIME_ < :start "); sql.append("ORDER BY COMPLETE_TIME_ DESC "); sql.append("LIMIT 9999 "); sql.append(") AS a "); sql.append("GROUP BY "); sql.append("a.DEPOT_ID_ "); args.put("deptId", deptId); args.put("companyId", ContextUtil.getCompanyId()); args.put("progress", InoutConstant.PROGRESS_RECORD); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); // 获取距离开始时间久最近的数据,当前天的第五分钟 Date date = DateUtil.getCurZero(start); args.put("start", DateUtils.addMinutes(date, 5)); log.debug("====执行SLQ2={}", sql.toString()); List list1 = this .getNamedParameterJdbcTemplate().query(sql.toString(), args, new ReportInoutStorageRowMapper()); // 获取期末库存,获取距离结束时间最近的一条数据 sql = new StringBuffer(); args = new HashMap<>(); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("( "); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("TYPE_, "); sql.append("CUR_STORAGE_, "); sql.append("COMPANY_ID_, "); sql.append("PROGRESS_, "); sql.append("RECORD_STATUS_, "); sql.append("DEPT_ID_, "); sql.append("FOOD_VARIETY_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("COMPANY_ID_ =:companyId "); sql.append("AND PROGRESS_ =:progress "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND DEPT_ID_ = :deptId "); sql.append("AND COMPLETE_TIME_ < :end "); sql.append("ORDER BY COMPLETE_TIME_ DESC "); sql.append("LIMIT 9999 "); sql.append(") AS a "); sql.append("GROUP BY "); sql.append("a.DEPOT_ID_ "); args.put("deptId", deptId); args.put("companyId", ContextUtil.getCompanyId()); args.put("progress", InoutConstant.PROGRESS_RECORD); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); args.put("end", DateUtil.getNextZero(end)); log.debug("====执行SLQ3={}", sql.toString()); List list2 = this .getNamedParameterJdbcTemplate().query(sql.toString(), args, new ReportInoutStorageRowMapper()); return updateFoodVarietySum(data, list1, list2); } @SuppressWarnings("unused") private List updateFoodVarietySum( List datas, List list1, List list2) { // 调整初期库存 Map map1 = new HashMap<>(); if (null != list1) { for (ReportInoutStorageData data : list1) { if (null == map1.get(data.getFoodVariety())) { map1.put(data.getFoodVariety(), 0.0); } double cqkc = data.getCurStorage(); if (InoutConstant.TYPE_IN.equals(data.getType())) { cqkc = data.getCurStorage() + data.getSettleWeight(); } if (InoutConstant.TYPE_OUT.equals(data.getType())) { cqkc = data.getCurStorage() - data.getSettleWeight(); } if (Constant.LOSS_OVER_OVER.equals(data.getType())) { cqkc = data.getCurStorage() + data.getSettleWeight(); } if (Constant.LOSS_OVER_LOSS.equals(data.getType())) { cqkc = data.getCurStorage() - data.getSettleWeight(); } map1.put(data.getFoodVariety(), map1.get(data.getFoodVariety()) + cqkc); } } // 调整期末库存 Map map2 = new HashMap(); if (null != list2) { Depot depot = null; for (ReportInoutStorageData data : list2) { if (null == map2.get(data.getFoodVariety())) { map2.put(data.getFoodVariety(), 0.0); } double cmkc = data.getCurStorage(); if (InoutConstant.TYPE_IN.equals(data.getType())) { cmkc = data.getCurStorage() + data.getSettleWeight(); } if (InoutConstant.TYPE_OUT.equals(data.getType())) { cmkc = data.getCurStorage() - data.getSettleWeight(); } if (Constant.LOSS_OVER_OVER.equals(data.getType())) { cmkc = data.getCurStorage() + data.getSettleWeight(); } if (Constant.LOSS_OVER_LOSS.equals(data.getType())) { cmkc = data.getCurStorage() - data.getSettleWeight(); } map2.put(data.getFoodVariety(), map2.get(data.getFoodVariety()) + cmkc); } } //判断初期库存粮食种类数是否跟出入库粮食种类数相等 if (datas.size() != map1.size()) { ReportInoutDepotData report; for (String s : map1.keySet()) { boolean flag = true; for (ReportInoutDepotData data : datas) { if (StringUtils.isNotEmpty(data.getFoodVariety()) && data.getFoodVariety().equals(s)) { flag = false; break; } } if (flag) { report = new ReportInoutDepotData(); report.setFoodType("NONE"); report.setFoodVariety(s); report.setFoodVarietyName(FoodVariety.getMsg(s)); datas.add(report); } } } if (null == datas || datas.isEmpty()) { return datas; } ReportInoutDepotData sum = new ReportInoutDepotData(); sum.setFoodVarietyName("合计"); int index = 1; for (ReportInoutDepotData data : datas) { if (StringUtils.isNotEmpty(data.getFoodVariety())) { // 设置序号 data.setRemarks(String.valueOf(index)); index++; data.setOutSum(data.getOutNum() + data.getLossNum()); data.setInSum(data.getInNum() + data.getOverNum()); // 调整期末库存和期初库存 data.setCqkc(map1.get(data.getFoodVariety()) == null ? 0.0 : map1.get(data.getFoodVariety())); data.setQmkc(map2.get(data.getFoodVariety()) == null ? 0.0 : map2.get(data.getFoodVariety())); // 初期库存 sum.setCqkc(sum.getCqkc() + data.getCqkc()); // 期末库存 sum.setQmkc(sum.getQmkc() + data.getQmkc()); sum.setInNum(sum.getInNum() + data.getInNum()); sum.setOutNum(sum.getOutNum() + data.getOutNum()); sum.setInSum(sum.getInSum() + data.getInSum()); sum.setOutSum(sum.getOutSum() + data.getOutSum()); sum.setLossNum(sum.getLossNum() + data.getLossNum()); sum.setOverNum(sum.getOverNum() + data.getOverNum()); } } datas.add(sum); return datas; } public List listShipDetail(Map parameter) { // 时间条件必须 Date start = (Date) parameter.get("start"); Date end = (Date) parameter.get("end"); if (start == null || end == null) { return null; } StringBuffer sql = new StringBuffer(); sql.append("SELECT "); sql.append("ID_, "); sql.append("PLATE_NUM_, "); sql.append("CUSTOMER_ID_, "); sql.append("CUSTOMER_NAME_, "); sql.append("FOOD_VARIETY_, "); sql.append("DEPOT_ID_, "); sql.append("TYPE_, "); sql.append("PROGRESS_, "); sql.append("FULL_WEIGHT_, "); sql.append("EMPTY_WEIGHT_, "); sql.append("NET_WEIGHT_, "); sql.append("DE_SUM_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("COMPLETE_TIME_ "); sql.append("FROM "); sql.append("d_inout_record "); sql.append("WHERE "); sql.append("TRANS_TYPE_ =:transType "); sql.append("AND RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND TYPE_ <> :typeNone "); sql.append("AND TYPE_ <> :typeLoss "); sql.append("AND TYPE_ <> :typeOver "); sql.append("AND COMPANY_ID_ =:companyId "); sql.append("AND REGISTER_TIME_ >= :start "); sql.append("AND REGISTER_TIME_ <= :end "); Map args = new HashMap<>(); args.put("transType", TransType.TYPE_3.getCode()); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); args.put("typeNone", InoutConstant.TYPE_NONE); args.put("typeLoss", Constant.LOSS_OVER_LOSS); args.put("typeOver", Constant.LOSS_OVER_OVER); args.put("companyId", ContextUtil.getCompanyId()); args.put("start", DateUtil.getCurZero(start)); args.put("end", DateUtil.getNextZero(end)); String str = (String) parameter.get("deptId"); if (StringUtils.isNotEmpty(str)) { sql.append("AND DEPT_ID_ =:deptId "); args.put("deptId", str); } str = (String) parameter.get("type"); if (StringUtils.isNotEmpty(str)) { sql.append("AND TYPE_ =:type "); args.put("type", str); } str = (String) parameter.get("customerId"); if (StringUtils.isNotEmpty(str)) { sql.append("AND CUSTOMER_ID_ =:customerId "); args.put("customerId", str); } str = (String) parameter.get("plateNum"); if (StringUtils.isNotEmpty(str)) { sql.append("AND PLATE_NUM_ like:plateNum "); args.put("plateNum", "%" + str + "%"); } sql.append("ORDER BY ID_ DESC "); log.debug("====执行SLQ,查询流水主表信息={},参数={}", sql.toString(), args); List list1 = this.getNamedParameterJdbcTemplate().query(sql.toString(), args, new ReportInoutShipRowMapper1()); if (null == list1 || list1.isEmpty()) { return null; } String depotId = (String) parameter.get("depotId"); String carNum = (String) parameter.get("carNum"); List list = new ArrayList<>(); List list2; int index = 1; //合计信息 ReportInoutShipData hj = new ReportInoutShipData(); hj.setId("合计"); for (ReportInoutShipData shipData : list1) { list2 = this.listShipRecordItem(shipData.getId(), depotId, carNum); if (null == list2 || list2.isEmpty()) { continue; } if (!InoutConstant.PROGRESS_RECORD.equals(shipData.getProgress())) { //流程未完成,统计重量信息 for (ReportInoutShipData shipItem : list2) { shipData.setFullWeight(shipData.getFullWeight() + shipItem.getFullWeight()); shipData.setEmptyWeight(shipData.getEmptyWeight() + shipItem.getEmptyWeight()); shipData.setNetWeight(shipData.getNetWeight() + shipItem.getNetWeight()); shipData.setDeSum(shipData.getDeSum() + shipItem.getDeSum()); shipData.setSettleWeight(shipData.getSettleWeight() + shipItem.getSettleWeight()); } } list.addAll(list2); shipData.setIndex(index + ""); list.add(shipData); index++; //统计合计信息 hj.setFullWeight(hj.getFullWeight() + shipData.getFullWeight()); hj.setEmptyWeight(hj.getEmptyWeight() + shipData.getEmptyWeight()); hj.setNetWeight(hj.getNetWeight() + shipData.getNetWeight()); hj.setDeSum(hj.getDeSum() + shipData.getDeSum()); hj.setSettleWeight(hj.getSettleWeight() + shipData.getSettleWeight()); } list.add(hj); return list; } public List listShipRecordItem(String recordId, String depotId, String carNum) { if (StringUtils.isEmpty(recordId)) { return null; } StringBuffer sql = new StringBuffer(); sql.append("SELECT "); sql.append("DEPOT_ID_, "); sql.append("CAR_NUM_, "); sql.append("CAR_NAME_, "); sql.append("TYPE_, "); sql.append("PROGRESS_, "); sql.append("FULL_WEIGHT_, "); sql.append("EMPTY_WEIGHT_, "); sql.append("NET_WEIGHT_, "); sql.append("DE_, "); sql.append("SETTLE_WEIGHT_, "); sql.append("CREATE_TIME_ AS COMPLETE_TIME_ "); sql.append("FROM "); sql.append("d_inout_record_item "); sql.append("WHERE RECORD_STATUS_ <> :recordStatusDel "); sql.append("AND PROGRESS_ =:progressRecord "); Map args = new HashMap<>(); args.put("recordStatusDel", InoutConstant.RECORD_STATUS_DEL); args.put("progressRecord", InoutConstant.PROGRESS_RECORD); if (StringUtils.isNotEmpty(recordId)) { sql.append("AND RECORD_ID_ =:recordId "); args.put("recordId", recordId); } if (StringUtils.isNotEmpty(depotId)) { sql.append("AND DEPOT_ID_ =:depotId "); args.put("depotId", depotId); } if (StringUtils.isNotEmpty(carNum)) { sql.append("AND CAR_NUM_ like:carNum "); args.put("carNum", "%" + carNum + "%"); } sql.append("ORDER BY CREATE_TIME_ ASC "); log.debug("====执行SLQ1={},参数={}", sql.toString(), args); List data = this.getNamedParameterJdbcTemplate() .query(sql.toString(), args, new ReportInoutShipRowMapper2()); return data; } }