1.完善汇总出入库数据逻辑
							parent
							
								
									f667a13279
								
							
						
					
					
						commit
						18d17933be
					
				| @ -1,18 +1,208 @@ | |||||||
| package com.glxp.api.service.inout.impl; | 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.service.inout.IoStatYearService; | ||||||
|  | import com.glxp.api.util.GennerOrderUtils; | ||||||
|  | import com.glxp.api.util.OrderNoTypeBean; | ||||||
| import lombok.extern.slf4j.Slf4j; | 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.stereotype.Service; | ||||||
| import org.springframework.transaction.annotation.Transactional; | 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.Date; | ||||||
|  | import java.util.List; | ||||||
| 
 | 
 | ||||||
| @Slf4j | @Slf4j | ||||||
| @Service | @Service | ||||||
| @Transactional(rollbackFor = Exception.class) | @Transactional(rollbackFor = Exception.class) | ||||||
| public class IoStatYearServiceImpl implements IoStatYearService { | 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 |     @Override | ||||||
|     public void statData(Date date) { |     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