1.完善汇总出入库数据逻辑

master
x_z 2 years ago
parent f667a13279
commit 18d17933be

@ -76,11 +76,11 @@ public class IoStatDayServiceImpl implements IoStatDayService {
long balanceCount;
BigDecimal balanceAmount;
if (statData.getBalanceCount() == 0) {
balanceCount = Long.valueOf(statData.getBeginCount()) + orderDetailResultEntity.getReCount();
balanceCount = statData.getBeginCount() + statData.getInCount();
balanceAmount = orderDetailResultEntity.getPrice().multiply(BigDecimal.valueOf(balanceCount));
} else {
balanceCount = statData.getBalanceCount() + orderDetailResultEntity.getReCount();
balanceAmount = statData.getBalanceAmount().add(statData.getBalancePrice().multiply(BigDecimal.valueOf(orderDetailResultEntity.getReCount())));
balanceAmount = statData.getBalanceAmount().add(statData.getInAmount());
}
statData.setBalanceCount(Long.valueOf(balanceCount).intValue());
@ -100,14 +100,15 @@ public class IoStatDayServiceImpl implements IoStatDayService {
balanceAmount = orderDetailResultEntity.getPrice().multiply(BigDecimal.valueOf(balanceCount));
} else {
balanceCount = statData.getBalanceCount() + orderDetailResultEntity.getReCount();
balanceAmount = statData.getBalanceAmount().add(statData.getBalancePrice().multiply(BigDecimal.valueOf(orderDetailResultEntity.getReCount())));
balanceAmount = statData.getBalanceAmount().subtract(statData.getOutAmount());
}
statData.setBalanceCount(Long.valueOf(balanceCount).intValue());
statData.setBalanceAmount(balanceAmount);
}
});
//开始生成日数据汇总记录
//插入汇总记录
saveData(yesterday, dataList);
}
}
@ -160,17 +161,21 @@ public class IoStatDayServiceImpl implements IoStatDayService {
statData.setBeginCount(0);
statData.setBeginPrice(orderDetailResultEntity.getPrice());
statData.setBeginAmount(BigDecimal.ZERO);
statData.setBalanceCount(0);
statData.setBalancePrice(orderDetailResultEntity.getPrice());
} else {
//已存在此产品汇总数据,基于旧数据生成新的汇总数据
statData.setBeginCount(statDayEntity.getBalanceCount());
statData.setBeginPrice(statDayEntity.getBalancePrice());
statData.setBeginAmount(statDayEntity.getBalanceAmount());
statData.setBalanceCount(statDayEntity.getBalanceCount());
statData.setBalanceAmount(statDayEntity.getBalanceAmount());
}
//设置结余数据
statData.setBalanceCount(0);
//设置结余价格
statData.setBalancePrice(orderDetailResultEntity.getPrice());
statData.setBalanceAmount(BigDecimal.ZERO);
dataList.add(statData);
return statData;
@ -186,8 +191,8 @@ public class IoStatDayServiceImpl implements IoStatDayService {
//生成汇总记录
IoStatOrderEntity statOrderEntity = new IoStatOrderEntity();
//生成记录号
OrderNoTypeBean orderNoTypeEnum = new OrderNoTypeBean("STAT", " yyyyMMdd");
String orderNo = gennerOrderUtils.createStatOrderNo(orderNoTypeEnum);
OrderNoTypeBean orderNoTypeBean = new OrderNoTypeBean("STATD", " yyyyMMdd");
String orderNo = gennerOrderUtils.createStatOrderNo(orderNoTypeBean);
statOrderEntity.setRecordKey(orderNo);
statOrderEntity.setType(4);
statOrderEntity.setDate(date);
@ -197,6 +202,7 @@ public class IoStatDayServiceImpl implements IoStatDayService {
statOrderEntity.setUpdateTime(updateTime);
statOrderDao.insert(statOrderEntity);
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED);
IoStatDayDao mapper = sqlSession.getMapper(IoStatDayDao.class);
dataList.forEach(statDayEntity -> {
@ -204,15 +210,17 @@ public class IoStatDayServiceImpl implements IoStatDayService {
statDayEntity.setRecordKeyFk(orderNo);
mapper.insert(statDayEntity);
});
sqlSession.commit();
sqlSession.close();
}
private static QueryWrapper<IoStatDayEntity> buildQueryWrapper(IoOrderDetailResultEntity orderDetailResultEntity, DateTime yesterday) {
QueryWrapper<IoStatDayEntity> wrapper = new QueryWrapper<>();
wrapper.eq("year", yesterday.year())
.eq("month", yesterday.monthBaseOne())
.eq("day", DateUtil.dayOfMonth(DateUtil.offsetDay(yesterday, -1))) //取前天的数据
DateTime dateTime = DateUtil.offsetDay(yesterday, -1); //取前天的时间
wrapper.eq("year", dateTime.year())
.eq("month", dateTime.monthBaseOne())
.eq("day", dateTime.dayOfMonth()) //取前天的数据
.eq("relIdFk", orderDetailResultEntity.getBindRlFk())
.eq(StrUtil.isNotBlank(orderDetailResultEntity.getBatchNo()), "batchNo", orderDetailResultEntity.getBatchNo())
.eq(StrUtil.isNotBlank(orderDetailResultEntity.getNameCode()), "nameCode", orderDetailResultEntity.getNameCode());

@ -6,16 +6,20 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inout.IoOrderDao;
import com.glxp.api.dao.inout.IoStatDayDao;
import com.glxp.api.dao.inout.IoStatMonthDao;
import com.glxp.api.dao.inout.IoStatOrderDao;
import com.glxp.api.entity.inout.IoStatDayEntity;
import com.glxp.api.entity.inout.IoStatMonthEntity;
import com.glxp.api.entity.inout.IoStatOrderEntity;
import com.glxp.api.service.inout.IoStatMonthService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -35,8 +39,6 @@ public class IoStatMonthServiceImpl implements IoStatMonthService {
@Resource
private IoStatDayDao statDayDao;
@Resource
private IoOrderDao orderDao;
@Resource
private GennerOrderUtils gennerOrderUtils;
@Resource
private IoStatOrderDao statOrderDao;
@ -58,32 +60,63 @@ public class IoStatMonthServiceImpl implements IoStatMonthService {
//声明用于存放汇总数据的集合
List<IoStatMonthEntity> dataList = new ArrayList<>();
statDayList.forEach(statDayEntity -> {
//查询上月的数据
IoStatMonthEntity statMonthEntity = statMonthDao.selectOne(buildQueryWrapper(statDayEntity, lastMonth));
//获取新的汇总数据
IoStatMonthEntity statData = getStatData(dataList, statDayEntity, lastMonth);
//设置入库数据
statData.setInCount(statData.getInCount() + statDayEntity.getInCount());
statData.setInPrice(statDayEntity.getBalancePrice());
BigDecimal inAmount = statDayEntity.getBalancePrice().multiply(BigDecimal.valueOf(statDayEntity.getInCount()));
statData.setInAmount(inAmount.add(statData.getInAmount()));
statData.setInAmount(statData.getInAmount().add(statDayEntity.getInAmount()));
//设置出库数据
statData.setOutCount(statData.getOutCount() + statDayEntity.getOutCount());
statData.setOutPrice(statDayEntity.getBalancePrice());
BigDecimal outAmount = statDayEntity.getBalancePrice().multiply(BigDecimal.valueOf(statDayEntity.getOutCount()));
statData.setOutAmount(outAmount.add(statData.getOutAmount()));
statData.setOutAmount(statData.getOutAmount().add(statDayEntity.getOutAmount()));
//设置结余数据
statData.setBalanceCount(statData.getBalanceCount() + statData.getInCount() - statData.getOutCount());
statData.setBalanceAmount(statData.getBalanceAmount().add(statData.getInAmount()).subtract(statData.getOutAmount()));
});
//插入汇总记录
saveData(lastMonth, dataList);
}
}
/**
*
*
* @param lastMonth
* @param dataList
*/
private void saveData(DateTime lastMonth, List<IoStatMonthEntity> dataList) {
//生成汇总记录
IoStatOrderEntity statOrderEntity = new IoStatOrderEntity();
//生成记录号
OrderNoTypeBean orderNoTypeBean = new OrderNoTypeBean("STATM", "yyyyMMdd");
String orderNo = gennerOrderUtils.createStatOrderNo(orderNoTypeBean);
statOrderEntity.setRecordKey(orderNo);
statOrderEntity.setType(3);
statOrderEntity.setDate(lastMonth);
statOrderEntity.setTitle(lastMonth.year() + " 年 " + lastMonth.monthBaseOne() + " 月出入库汇总");
Date updateTime = new Date();
statOrderEntity.setUpdateTime(updateTime);
statOrderDao.insert(statOrderEntity);
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED);
IoStatMonthDao mapper = sqlSession.getMapper(IoStatMonthDao.class);
dataList.forEach(statMonthEntity -> {
statMonthEntity.setUpdateTime(updateTime);
statMonthEntity.setRecordKeyFk(orderNo);
mapper.insert(statMonthEntity);
});
sqlSession.commit();
sqlSession.close();
}
/**
*
*
@ -132,13 +165,22 @@ public class IoStatMonthServiceImpl implements IoStatMonthService {
statData.setBeginCount(0);
statData.setBeginPrice(statDayEntity.getBalancePrice());
statData.setBeginAmount(BigDecimal.ZERO);
statData.setBalanceCount(0);
statData.setBalanceAmount(BigDecimal.ZERO);
} else {
//已存在此产品汇总数据,基于旧数据生成新的汇总数据
statData.setBeginCount(statMonthEntity.getBalanceCount());
statData.setBeginPrice(statDayEntity.getBalancePrice());
statData.setBeginPrice(statMonthEntity.getBalancePrice());
statData.setBeginAmount(statMonthEntity.getBalanceAmount());
statData.setBalanceCount(statDayEntity.getBalanceCount());
statData.setBalanceAmount(statMonthEntity.getBalanceAmount());
}
//设置结余价格
statData.setBalancePrice(statDayEntity.getBalancePrice());
dataList.add(statData);
return statData;
}
@ -152,9 +194,16 @@ public class IoStatMonthServiceImpl implements IoStatMonthService {
*/
private Wrapper<IoStatMonthEntity> buildQueryWrapper(IoStatDayEntity statDayEntity, DateTime lastMonth) {
QueryWrapper<IoStatMonthEntity> wrapper = new QueryWrapper<>();
wrapper.eq("year", lastMonth.year())
.eq("month", lastMonth.monthBaseOne() - 1) //取上上月的数据
.eq("relIdFk", statDayEntity.getRelIdFk())
if (lastMonth.monthBaseOne() == 1) {
//当前汇总的记录为1月上一月份的时间取前一年的12月
wrapper.eq("year", lastMonth.year() - 1)
.eq("month", 12);
} else {
wrapper.eq("year", lastMonth.year())
.eq("month", lastMonth.monthBaseOne() - 1);//取上上月的数据
}
wrapper.eq("relIdFk", statDayEntity.getRelIdFk())
.eq(StrUtil.isNotBlank(statDayEntity.getBatchNo()), "batchNo", statDayEntity.getBatchNo())
.eq(StrUtil.isNotBlank(statDayEntity.getNameCode()), "nameCode", statDayEntity.getNameCode());
return wrapper;

@ -1,18 +1,238 @@
package com.glxp.api.service.inout.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inout.IoStatMonthDao;
import com.glxp.api.dao.inout.IoStatOrderDao;
import com.glxp.api.dao.inout.IoStatQuarterDao;
import com.glxp.api.entity.inout.IoStatMonthEntity;
import com.glxp.api.entity.inout.IoStatOrderEntity;
import com.glxp.api.entity.inout.IoStatQuarterEntity;
import com.glxp.api.service.inout.IoStatQuarterService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class IoStatQuarterServiceImpl implements IoStatQuarterService {
@Resource
private IoStatMonthDao statMonthDao;
@Resource
private IoStatOrderDao statOrderDao;
@Resource
private IoStatQuarterDao statQuarterDao;
@Resource
private GennerOrderUtils gennerOrderUtils;
@Resource
private SqlSessionFactory sqlSessionFactory;
@Override
public void statData(Date date) {
//汇总上一季度的数据
DateTime yesterday = DateUtil.offsetDay(date, -1);
//查询上一季度各个月度的数据
List<IoStatMonthEntity> statMonthList = getMonthStatList(yesterday);
if (CollUtil.isNotEmpty(statMonthList)) {
//声明用于存放汇总数据的集合
List<IoStatQuarterEntity> dataList = new ArrayList<>();
statMonthList.forEach(statMonthEntity -> {
//获取新的汇总数据
IoStatQuarterEntity statData = getStatData(dataList, statMonthEntity, yesterday);
//设置入库数据
statData.setInCount(statData.getInCount() + statMonthEntity.getInCount());
statData.setInPrice(statMonthEntity.getInPrice());
statData.setInAmount(statData.getInAmount().add(statMonthEntity.getInAmount()));
//设置出库数据
statData.setOutCount(statData.getOutCount() + statMonthEntity.getOutCount());
statData.setOutPrice(statMonthEntity.getOutPrice());
statData.setOutAmount(statData.getOutAmount().add(statMonthEntity.getOutAmount()));
//设置结余数据
statData.setBalanceCount(statData.getBalanceCount() + statData.getInCount() - statData.getOutCount());
statData.setBalanceAmount(statData.getBalanceAmount().add(statData.getInAmount()).subtract(statData.getOutAmount()));
});
//插入汇总数据
saveData(yesterday, dataList);
}
}
/**
*
*
* @param yesterday
* @param dataList
*/
private void saveData(DateTime yesterday, List<IoStatQuarterEntity> dataList) {
//生成汇总记录
IoStatOrderEntity statOrderEntity = new IoStatOrderEntity();
//生成记录号
OrderNoTypeBean orderNoTypeBean = new OrderNoTypeBean("STATQ", "yyyyMMdd");
String orderNo = gennerOrderUtils.createStatOrderNo(orderNoTypeBean);
statOrderEntity.setRecordKey(orderNo);
statOrderEntity.setType(3);
statOrderEntity.setDate(yesterday);
statOrderEntity.setTitle(yesterday.year() + " 年 " + yesterday.quarter() + " 季度出入库汇总");
Date updateTime = new Date();
statOrderEntity.setUpdateTime(updateTime);
statOrderDao.insert(statOrderEntity);
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED);
IoStatQuarterDao mapper = sqlSession.getMapper(IoStatQuarterDao.class);
dataList.forEach(statQuarterEntity -> {
statQuarterEntity.setUpdateTime(updateTime);
statQuarterEntity.setRecordKeyFk(orderNo);
mapper.insert(statQuarterEntity);
});
sqlSession.commit();
sqlSession.close();
}
/**
*
*
* @param dataList
* @param statMonthEntity
* @param yesterday
* @return
*/
private IoStatQuarterEntity getStatData(List<IoStatQuarterEntity> dataList, IoStatMonthEntity statMonthEntity, DateTime yesterday) {
if (CollUtil.isNotEmpty(dataList)) {
for (IoStatQuarterEntity statQuarterEntity : dataList) {
if (statQuarterEntity.getRelIdFk().equals(statMonthEntity.getRelIdFk())) {
if ((StrUtil.isNotBlank(statQuarterEntity.getBatchNo()) && StrUtil.isNotBlank(statMonthEntity.getBatchNo())) && statQuarterEntity.getBatchNo().equals(statMonthEntity.getBatchNo())) {
return statQuarterEntity;
} else if (StrUtil.isBlank(statQuarterEntity.getBatchNo()) && StrUtil.isBlank(statMonthEntity.getBatchNo())) {
return statQuarterEntity;
}
}
}
}
//未存在于集合中,构造新数据
IoStatQuarterEntity statData = new IoStatQuarterEntity();
statData.setYear(yesterday.year());
statData.setQuarter(yesterday.quarter());
statData.setRelIdFk(statMonthEntity.getRelIdFk());
statData.setNameCode(statMonthEntity.getNameCode());
statData.setProductName(statMonthEntity.getProductName());
statData.setGgxh(statMonthEntity.getGgxh());
statData.setBatchNo(statMonthEntity.getBatchNo());
//设置结余价格
statData.setBalancePrice(statMonthEntity.getBalancePrice());
//设置初始化出入库数量和价格
statData.setInCount(0);
statData.setInPrice(statMonthEntity.getBalancePrice());
statData.setInAmount(BigDecimal.ZERO);
statData.setOutCount(0);
statData.setOutPrice(statMonthEntity.getBalancePrice());
statData.setOutAmount(BigDecimal.ZERO);
//设置期初数据
IoStatQuarterEntity statQuarterEntity = statQuarterDao.selectOne(buildQueryWrapper(statMonthEntity, yesterday));
if (null == statQuarterEntity) {
//第一次汇总季度数据
statData.setBeginCount(0);
statData.setBalancePrice(statMonthEntity.getBalancePrice());
statData.setBeginAmount(BigDecimal.ZERO);
statData.setBalanceCount(0);
statData.setBalanceAmount(BigDecimal.ZERO);
} else {
statData.setBeginCount(statQuarterEntity.getBalanceCount());
statData.setBeginPrice(statQuarterEntity.getBalancePrice());
statData.setBeginAmount(statQuarterEntity.getBalanceAmount());
statData.setBalanceCount(statQuarterEntity.getBalanceCount());
statData.setBalanceAmount(statQuarterEntity.getBalanceAmount());
}
//设置结余价格
statData.setBalancePrice(statMonthEntity.getBalancePrice());
dataList.add(statData);
return statData;
}
/**
*
*
* @param statMonthEntity
* @param yesterday
* @return
*/
private QueryWrapper<IoStatQuarterEntity> buildQueryWrapper(IoStatMonthEntity statMonthEntity, DateTime yesterday) {
QueryWrapper<IoStatQuarterEntity> wrapper = new QueryWrapper<>();
if (yesterday.quarter() == 1) {
//当前汇总的记录为第一季度,上一季度时间取前一年的第四季度数据
wrapper.eq("year", yesterday.year() - 1)
.eq("quarter", 4);
} else {
wrapper.eq("year", yesterday.year())
.eq("quarter", yesterday.quarter() - 1);
}
wrapper.eq("relIdFk", statMonthEntity.getRelIdFk())
.eq(StrUtil.isNotBlank(statMonthEntity.getBatchNo()), "batchNo", statMonthEntity.getBatchNo())
.eq(StrUtil.isNotBlank(statMonthEntity.getNameCode()), "nameCode", statMonthEntity.getNameCode());
return wrapper;
}
/**
*
*
* @param quarter 1
* @return
*/
private List<IoStatMonthEntity> getMonthStatList(DateTime yesterday) {
int quarter = yesterday.quarter();
List<Integer> months = new ArrayList<>(3);
switch (quarter) {
case 1:
months.addAll(Arrays.asList(1, 2, 3));
break;
case 2:
months.addAll(Arrays.asList(4, 5, 6));
break;
case 3:
months.addAll(Arrays.asList(7, 8, 9));
break;
case 4:
months.addAll(Arrays.asList(10, 11, 12));
break;
default:
break;
}
List<IoStatMonthEntity> list = statMonthDao.selectList(new QueryWrapper<IoStatMonthEntity>()
.eq("year", yesterday.year())
.eq("quarter", yesterday.quarter())
.in("month", months)
);
return list;
}
}

@ -1,18 +1,208 @@
package com.glxp.api.service.inout.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inout.IoStatOrderDao;
import com.glxp.api.dao.inout.IoStatQuarterDao;
import com.glxp.api.dao.inout.IoStatYearDao;
import com.glxp.api.entity.inout.IoStatOrderEntity;
import com.glxp.api.entity.inout.IoStatQuarterEntity;
import com.glxp.api.entity.inout.IoStatYearEntity;
import com.glxp.api.service.inout.IoStatYearService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.TransactionIsolationLevel;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class IoStatYearServiceImpl implements IoStatYearService {
@Resource
private IoStatYearDao statYearDao;
@Resource
private IoStatQuarterDao statQuarterDao;
@Resource
private IoStatOrderDao statOrderDao;
@Resource
private GennerOrderUtils gennerOrderUtils;
@Resource
private SqlSessionFactory sqlSessionFactory;
@Override
public void statData(Date date) {
//汇总上一年度的数据
DateTime yesterday = DateUtil.offsetDay(date, -1);
//查询上一年度各个季度的数据
List<IoStatQuarterEntity> statQuarterList = getQuarterStatList(yesterday);
if (CollUtil.isNotEmpty(statQuarterList)) {
//声明用于存放汇总数据的集合
List<IoStatYearEntity> dataList = new ArrayList<>();
statQuarterList.forEach(statQuarterEntity -> {
//获取新的汇总数据
IoStatYearEntity statData = getStatData(dataList, statQuarterEntity, yesterday);
//设置入库数据
statData.setInCount(statData.getInCount() + statQuarterEntity.getInCount());
statData.setInPrice(statQuarterEntity.getInPrice());
statData.setInAmount(statData.getInAmount().add(statQuarterEntity.getInAmount()));
//设置出库数据
statData.setOutCount(statData.getOutCount() + statQuarterEntity.getOutCount());
statData.setOutPrice(statQuarterEntity.getOutPrice());
statData.setOutAmount(statData.getOutAmount().add(statQuarterEntity.getOutAmount()));
//设置结余数据
statData.setBalanceCount(statData.getBalanceCount() + statData.getInCount() - statData.getOutCount());
statData.setBalanceAmount(statData.getBalanceAmount().add(statData.getInAmount()).subtract(statData.getOutAmount()));
});
//插入汇总数据
saveData(yesterday, dataList);
}
}
/**
*
*
* @param yesterday
* @param dataList
*/
private void saveData(DateTime yesterday, List<IoStatYearEntity> dataList) {
//生成汇总记录
IoStatOrderEntity statOrderEntity = new IoStatOrderEntity();
//生成记录号
OrderNoTypeBean orderNoTypeBean = new OrderNoTypeBean("STATY", "yyyyMMdd");
String orderNo = gennerOrderUtils.createStatOrderNo(orderNoTypeBean);
statOrderEntity.setRecordKey(orderNo);
statOrderEntity.setType(3);
statOrderEntity.setDate(yesterday);
statOrderEntity.setTitle(yesterday.year() + " 年度出入库汇总");
Date updateTime = new Date();
statOrderEntity.setUpdateTime(updateTime);
statOrderDao.insert(statOrderEntity);
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, TransactionIsolationLevel.READ_COMMITTED);
IoStatYearDao mapper = sqlSession.getMapper(IoStatYearDao.class);
dataList.forEach(statYearEntity -> {
statYearEntity.setUpdateTime(updateTime);
statYearEntity.setRecordKeyFk(orderNo);
mapper.insert(statYearEntity);
});
sqlSession.commit();
sqlSession.close();
}
/**
*
*
* @param dataList
* @param statQuarterEntity
* @param yesterday
* @return
*/
private IoStatYearEntity getStatData(List<IoStatYearEntity> dataList, IoStatQuarterEntity statQuarterEntity, DateTime yesterday) {
if (CollUtil.isNotEmpty(dataList)) {
for (IoStatYearEntity statYearEntity : dataList) {
if (statYearEntity.getRelIdFk().equals(statQuarterEntity.getRelIdFk())) {
if ((StrUtil.isNotBlank(statYearEntity.getBatchNo()) && StrUtil.isNotBlank(statQuarterEntity.getBatchNo())) && statYearEntity.getBatchNo().endsWith(statQuarterEntity.getBatchNo())) {
return statYearEntity;
} else if (StrUtil.isBlank(statYearEntity.getBatchNo()) && StrUtil.isBlank(statQuarterEntity.getBatchNo())) {
return statYearEntity;
}
}
}
}
//未在于集合中,构造新数据
IoStatYearEntity statData = new IoStatYearEntity();
statData.setYear(yesterday.year());
statData.setRelIdFk(statQuarterEntity.getRelIdFk());
statData.setNameCode(statQuarterEntity.getNameCode());
statData.setProductName(statQuarterEntity.getProductName());
statData.setGgxh(statQuarterEntity.getGgxh());
statData.setBatchNo(statQuarterEntity.getBatchNo());
//设置结余价格
statData.setBalancePrice(statQuarterEntity.getBalancePrice());
//设置初始化出入库数量和价格
statData.setInCount(0);
statData.setInPrice(statQuarterEntity.getBalancePrice());
statData.setInAmount(BigDecimal.ZERO);
statData.setOutCount(0);
statData.setOutPrice(statQuarterEntity.getBalancePrice());
statData.setOutAmount(BigDecimal.ZERO);
//设置期初数据
IoStatYearEntity statYearEntity = statYearDao.selectOne(buildQueryWrapper(statQuarterEntity, yesterday));
if (null == statYearEntity) {
//第一次汇总年度数据
statData.setBeginCount(0);
statData.setBalancePrice(statYearEntity.getBalancePrice());
statData.setBeginAmount(BigDecimal.ZERO);
statData.setBalanceCount(0);
statData.setBalanceAmount(BigDecimal.ZERO);
} else {
statData.setBeginCount(statYearEntity.getBalanceCount());
statData.setBeginPrice(statYearEntity.getBalancePrice());
statData.setBeginAmount(statYearEntity.getBalanceAmount());
statData.setBalanceCount(statYearEntity.getBalanceCount());
statData.setBalanceAmount(statYearEntity.getBalanceAmount());
}
//设置结余价格
statData.setBalancePrice(statYearEntity.getBalancePrice());
dataList.add(statData);
return statData;
}
/**
*
*
* @param statQuarterEntity
* @param yesterday
*/
private QueryWrapper<IoStatYearEntity> buildQueryWrapper(IoStatQuarterEntity statQuarterEntity, DateTime yesterday) {
QueryWrapper<IoStatYearEntity> wrapper = new QueryWrapper<>();
wrapper.eq("year", yesterday.year() - 1)
.eq("relIdFk", statQuarterEntity.getRelIdFk())
.eq(StrUtil.isNotBlank(statQuarterEntity.getBatchNo()), "batchNo", statQuarterEntity.getBatchNo())
.eq(StrUtil.isNotBlank(statQuarterEntity.getNameCode()), "nameCode", statQuarterEntity.getNameCode());
return wrapper;
}
/**
*
*
* @param yesterday
* @return
*/
private List<IoStatQuarterEntity> getQuarterStatList(DateTime yesterday) {
List<IoStatQuarterEntity> list = statQuarterDao.selectList(new QueryWrapper<IoStatQuarterEntity>()
.eq("year", yesterday.year())
);
return list;
}
}

Loading…
Cancel
Save