1.完善汇总出入库数据逻辑
parent
f667a13279
commit
18d17933be
@ -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…
Reference in New Issue