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<ReportInoutDepotData> getInoutDepotData(
|
Map<String, Object> 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<String, Object> 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<ReportInoutDepotData> 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<ReportInoutStorageData> 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<ReportInoutStorageData> list2 = this
|
.getNamedParameterJdbcTemplate().query(sql.toString(), args,
|
new ReportInoutStorageRowMapper());
|
|
// 调整期末库存和初期库存以及合计信息
|
updateDepotReport(data, list1, list2);
|
|
return data;
|
}
|
|
private void updateDepotReport(List<ReportInoutDepotData> data,
|
List<ReportInoutStorageData> list1,
|
List<ReportInoutStorageData> 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<ReportInoutStorageData> 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<ReportInoutStorageData> 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<ReportInoutDepotData> getFoodVarietyData(
|
Map<String, Object> 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<String, Object> 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<ReportInoutDepotData> 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<ReportInoutStorageData> 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<ReportInoutStorageData> list2 = this
|
.getNamedParameterJdbcTemplate().query(sql.toString(), args,
|
new ReportInoutStorageRowMapper());
|
|
return updateFoodVarietySum(data, list1, list2);
|
|
}
|
|
@SuppressWarnings("unused")
|
private List<ReportInoutDepotData> updateFoodVarietySum(
|
List<ReportInoutDepotData> datas,
|
List<ReportInoutStorageData> list1,
|
List<ReportInoutStorageData> list2) {
|
|
// 调整初期库存
|
Map<String, Double> 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<String, Double> map2 = new HashMap<String, Double>();
|
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<ReportInoutShipData> listShipDetail(Map<String, Object> 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<String, Object> 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<ReportInoutShipData> 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<ReportInoutShipData> list = new ArrayList<>();
|
List<ReportInoutShipData> 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<ReportInoutShipData> 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<String, Object> 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<ReportInoutShipData> data = this.getNamedParameterJdbcTemplate()
|
.query(sql.toString(), args, new ReportInoutShipRowMapper2());
|
|
return data;
|
}
|
}
|