package com.matrix.system.hive.statistics; import com.matrix.core.tools.DateUtil; import com.matrix.core.tools.LogUtil; import com.matrix.system.constance.Dictionary; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Date; import java.util.List; import static com.matrix.system.hive.statistics.BusinessDataTypeEnum.*; /** * 业绩统计报表定时任务 * * @author jyy */ @Component public class StatisticsBusinessDataJob { @Autowired SysShopInfoDao shopInfoDao; @Autowired SysBusinessDataDao businessDataDao; @Autowired SysOrderItemDao orderItemDao; @Autowired SysBeauticianStateDao serviceItemDao; @Autowired ShoppingGoodsAssembleDao shoppingGoodsAssembleDao; /** * 备用触发 * @return */ public boolean executeExt2() { Date today = DateUtil.stringToDate("2020-11-27",DateUtil.DATE_FORMAT_DD); Date now=new Date(); while (DateUtil.isBeforeDate(now,today)){ LogUtil.info("日期:"+DateUtil.dateFormatStr(today,DateUtil.DATE_FORMAT_DD)); SysBusinessData sysBusinessData = new SysBusinessData(); sysBusinessData.setTime(today); businessDataDao.deleteByModel(sysBusinessData); List sysShopInfos = shopInfoDao.selectShopInfo(null); for (SysShopInfo shopInfo : sysShopInfos) { statisticOrderInfo(shopInfo, today); statisticServiceOrderInfo(shopInfo, today); } today=DateUtil.getDateAfter(today,1); } return true; } @Scheduled(cron = "1 0 0 1/1 * ?") public boolean executeExt() { LogUtil.info("业绩统计定时任务开始运行*******************"); Date today = new Date(); SysBusinessData sysBusinessData = new SysBusinessData(); sysBusinessData.setTime(DateUtil.getDateBefore(today,1)); businessDataDao.deleteByModel(sysBusinessData); List sysShopInfos = shopInfoDao.selectShopInfo(null); for (SysShopInfo shopInfo : sysShopInfos) { statisticOrderInfo(shopInfo, today); statisticServiceOrderInfo(shopInfo, today); } LogUtil.info("业绩统计定时任务结束*******************"); return true; } /** * 统计服务单数据 */ private void statisticServiceOrderInfo(SysShopInfo shopInfo, Date today) { List serviceItemList = serviceItemDao.selectItemByTime(shopInfo.getId(), today); BusinessDataTypeEnum[] typeEnums = {FREE_CONSUME_PAY, CONSUME_PAY}; BigDecimal[] valueArray = {BigDecimal.ZERO, BigDecimal.ZERO}; for (SysBeauticianState orderItem : serviceItemList) { if (Dictionary.BEATUI_STATE_FWJS.equals(orderItem.getState()) && orderItem.getProjUse() != null) { BigDecimal count = new BigDecimal(orderItem.getCount().toString()); BigDecimal total = new BigDecimal(orderItem.getProjUse().getPrice().toString()).multiply(count); if (Dictionary.TAOCAN_SOURCE_ZS.equals(orderItem.getProjUse().getSource())) { valueArray[0] = valueArray[0].add(total); } else { valueArray[1] = valueArray[1].add(total); } } } clearValue(valueArray); saveBusinessData(shopInfo, today, typeEnums, valueArray); } /** * 统计订单中的数据 */ private void statisticOrderInfo(SysShopInfo shopInfo, Date today) { List orderItemList = orderItemDao.selectItemByTime(shopInfo.getId(), today); BusinessDataTypeEnum[] typeEnums = {CASH_PAY, CARD_PAY, REFUND_CASH_PAY, REFUND_CARD_PAY, ARREARS_PAY}; BigDecimal[] valueArray = {BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO}; for (SysOrderItem orderItem : orderItemList) { if (Dictionary.ORDER_STATU_YFK.equals(orderItem.getStatus()) || Dictionary.ORDER_STATU_QK.equals(orderItem.getStatus())) { valueArray[0] = valueArray[0].add(new BigDecimal(orderItem.getCashPay() == null ? "0" : orderItem.getCashPay().toString())); valueArray[1] = valueArray[1].add(new BigDecimal(orderItem.getCardPay() == null ? "0" : orderItem.getCardPay().toString())); } else if (Dictionary.ORDER_STATU_TK.equals(orderItem.getStatus())) { valueArray[2] = valueArray[2].add(new BigDecimal(orderItem.getCashPay() == null ? "0" : orderItem.getCashPay().toString())); valueArray[3] = valueArray[3].add(new BigDecimal(orderItem.getCardPay() == null ? "0" : orderItem.getCardPay().toString())); } if (Dictionary.ORDER_STATU_QK.equals(orderItem.getStatus())) { valueArray[4] = valueArray[4].add(new BigDecimal(orderItem.getArrears() == null ? "0" : orderItem.getArrears().toString())); } } clearValue(valueArray); saveBusinessData(shopInfo, today, typeEnums, valueArray); } /** * 保留2位小数 * * @param valueArray */ private void clearValue(BigDecimal[] valueArray) { for (int i = 0; i < valueArray.length; i++) { valueArray[i] = valueArray[i].setScale(2, BigDecimal.ROUND_HALF_DOWN); } } /** * 根据数组中的数据类型和值数组中的值,新增统计数据 */ private void saveBusinessData(SysShopInfo shopInfo, Date today, BusinessDataTypeEnum[] typeEnums, Object[] valueArray) { for (int i = 0; i < valueArray.length; i++) { SysBusinessData sysBusinessData = new SysBusinessData(); BusinessDataTypeEnum dataTypeEnum = typeEnums[i]; sysBusinessData.setCompanyId(shopInfo.getCompanyId()) .setShopId(shopInfo.getId()) .setTime(today) .setDataType(dataTypeEnum.getType()) .setCode(dataTypeEnum.getCode()) .setSequence(dataTypeEnum.getSequence()) .setValue(valueArray[i].toString()); sysBusinessData.setCreateBy("System"); sysBusinessData.setUpdateBy("System"); businessDataDao.insert(sysBusinessData); } } }