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