jyy
2021-01-26 2c25c956ee0dc781500c70c7479c36f8b58f3445
zq-erp/src/main/java/com/matrix/system/app/action/ApiStatisticsAction.java
@@ -1,8 +1,313 @@
package com.matrix.system.app.action;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.dto.BusinessesDto;
import com.matrix.system.app.dto.VipStatisticsParamDto;
import com.matrix.system.app.vo.BeauticianVo;
import com.matrix.system.app.vo.BusinessesDataShowVo;
import com.matrix.system.app.vo.VipAchieveDataShowVo;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.AchieveNew;
import com.matrix.system.hive.bean.SysBusinessData;
import com.matrix.system.hive.dao.SysBusinessDataDao;
import com.matrix.system.hive.service.imp.DataAnalysisCustomerServiceImpl;
import com.matrix.system.hiveErp.analysUtil.*;
import com.matrix.system.hiveErp.dao.TjVipSumDao;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.jsoup.helper.DataUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.*;
/**
 * @author wzy
 * @date 2020-12-28
 **/
@Api(value = "ApiStatisticsAction", tags = "报表接口类")
@RestController
@RequestMapping(value = "/api/statistics")
public class ApiStatisticsAction {
    @Autowired
    TjVipSumDao tjVipSumDao;
    @Autowired
    private SysBusinessDataDao sysBusinessDataDao;
    @Autowired
    private DataAnalysisCustomerServiceImpl dataAnalysisCustomerService;
    @ApiOperation(value = "公司经营报表/门店经营报表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = BusinessesDataShowVo.class)
    })
    @PostMapping(value = "/findShopBusinessesData")
    public AjaxResult findShopBusinessesData(@RequestBody BusinessesDto businessesDto) {
        String unit = "";
        int calenderUnit;
        if (BusinessesDto.DAY.equals(businessesDto.getType())) {
            unit = "日";
            calenderUnit = Calendar.DATE;
        } else {
            unit = "月";
            calenderUnit = Calendar.MONTH;
        }
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        int start = (businessesDto.getPageNum() - 1) * businessesDto.getPageSize();
        int size = businessesDto.getPageSize();
        Calendar calendar = Calendar.getInstance();
        calendar.add(calenderUnit, 1);
        calendar.add(calenderUnit, -start);
        String endTime = DateUtil.dateToString(calendar.getTime(), DateUtil.DATE_FORMAT_DD);
        calendar.add(calenderUnit, -size);
        String startTime = DateUtil.dateToString(calendar.getTime(), DateUtil.DATE_FORMAT_DD);
        List<Date> xAxis = StatisticsTimeUtil.getTimeSpace(startTime, endTime, unit);
        List<StatisticsTimeDaoParam> timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis);
        List<StatisticsTimeDaoParam> statisticsTimeDaoParams = timeSpaceParam.subList(0, timeSpaceParam.size() - 2);
        List<BusinessesDataShowVo> list = sysBusinessDataDao.selectApiBusinessData(statisticsTimeDaoParams, businessesDto.getShopId(), user.getCompanyId());
        List<BusinessesDataShowVo> result = new ArrayList<>();
        for (int i = list.size() - 1; i >= 0; i--) {
            BusinessesDataShowVo item = list.get(i);
            String dataTime = item.getDataTime();
            if (BusinessesDto.DAY.equals(businessesDto.getType())) {
                item.setDataTime(DateUtil.dateToString(DateUtil.stringToDate(dataTime, DateUtil.DATE_FORMAT_DD), DateUtil.DATE_FORMAT_DD));
            } else {
                item.setDataTime(DateUtil.dateToString(DateUtil.stringToDate(dataTime, DateUtil.MONTH), DateUtil.MONTH));
            }
            result.add(item);
        }
        return AjaxResult.buildSuccessInstance(result);
    }
    public static void main(String[] args) {
        int start = 1;
        int end  = 10;
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, start);
        Date time = calendar.getTime();
        System.out.println(time);
        calendar.add(Calendar.DATE, end);
        System.out.println(calendar.getTime());
    }
    @ApiOperation(value = "专项", notes = "专项")
    @PostMapping(value = "/findBusinessInCome")
    public AjaxResult findBusinessInCome(@RequestBody @Validated StatisticsParamVo statisticsParam) {
        if (statisticsParam.getShopId() != null) {
            AjaxResult ajaxResult = dataAnalysisCustomerService.getAnalysisResult(statisticsParam, new Caculate<BigDecimal>() {
                @Override
                public Map<String, BigDecimal> exec(List<StatisticsTimeDaoParam> timeSpaceParam, Long shopId, Long companyId) {
                    switch (statisticsParam.getType()) {
                        case "1" :
                            return tjVipSumDao.selectBusinessInCome(timeSpaceParam, shopId, null);
                        case "2" :
                            return tjVipSumDao.selectCashIncome(timeSpaceParam, shopId, null);
                        case "3" :
                            return tjVipSumDao.selectCardUse(timeSpaceParam, shopId, null);
                        case "4" :
                            return tjVipSumDao.selectArrears(timeSpaceParam, shopId, null);
                        case "5" :
                            return tjVipSumDao.selectCashRefund(timeSpaceParam, shopId, null);
                        case "6" :
                            return tjVipSumDao.selectCardRefund(timeSpaceParam, shopId, null);
                        case "7":
                            return tjVipSumDao.selectProductAchieve(timeSpaceParam, shopId, null);
                        case "8":
                            return tjVipSumDao.selectCardAchieve(timeSpaceParam, shopId, null);
                        case "9":
                            return tjVipSumDao.selectRepayment(timeSpaceParam, shopId, null);
                        case "10":
                            return tjVipSumDao.selectPerCustomCnt(timeSpaceParam, shopId, null);
                        case "11":
                            return tjVipSumDao.selectCustomGoodsCnt(timeSpaceParam, shopId, null);
                        case "12":
                            return tjVipSumDao.selectPerCustomPrice(timeSpaceParam, shopId, null);
                        case "13":
                            return tjVipSumDao.selectCost(timeSpaceParam, shopId, null);
                        case "14":
                            return tjVipSumDao.selectGrossProfit(timeSpaceParam, shopId, null);
                        case "15":
                            return tjVipSumDao.selectGrossProfitRate(timeSpaceParam, shopId, null);
                        case "16" :
                            return tjVipSumDao.selectHisConsume(timeSpaceParam, shopId, null);
                        case "17" :
                            return tjVipSumDao.selectFreeConsume(timeSpaceParam, shopId, null);
                        case "18" :
                            return tjVipSumDao.selectPeopleCnt(timeSpaceParam, shopId, null);
                        case "19" :
                            return tjVipSumDao.selectProjConsumeCnt(timeSpaceParam, shopId, null);
                        case "20" :
                            return tjVipSumDao.selectTimeLength(timeSpaceParam, shopId, null);
                        default :
                            return tjVipSumDao.selectBusinessInCome(timeSpaceParam, shopId, null);
                    }
                }
            });
            return setDataList(ajaxResult);
        } else {
            AjaxResult ajaxResult = dataAnalysisCustomerService.getCompanyAnalysisResult(statisticsParam, new Caculate<BigDecimal>() {
                @Override
                public Map<String, BigDecimal> exec(List<StatisticsTimeDaoParam> timeSpaceParam, Long shopId, Long companyId) {
                    switch (statisticsParam.getType()) {
                        case "1" :
                            return tjVipSumDao.selectBusinessInCome(timeSpaceParam, null, companyId);
                        case "2" :
                            return tjVipSumDao.selectCashIncome(timeSpaceParam, null, companyId);
                        case "3" :
                            return tjVipSumDao.selectCardUse(timeSpaceParam, null, companyId);
                        case "4" :
                            return tjVipSumDao.selectArrears(timeSpaceParam, null, companyId);
                        case "5" :
                            return tjVipSumDao.selectCashRefund(timeSpaceParam, null, companyId);
                        case "6" :
                            return tjVipSumDao.selectCardRefund(timeSpaceParam, null, companyId);
                        case "7":
                            return tjVipSumDao.selectProductAchieve(timeSpaceParam, null, companyId);
                        case "8":
                            return tjVipSumDao.selectCardAchieve(timeSpaceParam, null, companyId);
                        case "9":
                            return tjVipSumDao.selectRepayment(timeSpaceParam, null, companyId);
                        case "10":
                            return tjVipSumDao.selectPerCustomCnt(timeSpaceParam, null, companyId);
                        case "11":
                            return tjVipSumDao.selectCustomGoodsCnt(timeSpaceParam, null, companyId);
                        case "12":
                            return tjVipSumDao.selectPerCustomPrice(timeSpaceParam, null, companyId);
                        case "13":
                            return tjVipSumDao.selectCost(timeSpaceParam, null, companyId);
                        case "14":
                            return tjVipSumDao.selectCost(timeSpaceParam, null, companyId);
                        case "15":
                            return tjVipSumDao.selectCost(timeSpaceParam, null, companyId);
                        case "16" :
                            return tjVipSumDao.selectHisConsume(timeSpaceParam, null, companyId);
                        case "17" :
                            return tjVipSumDao.selectFreeConsume(timeSpaceParam, null, companyId);
                        case "18" :
                            return tjVipSumDao.selectPeopleCnt(timeSpaceParam, null, companyId);
                        case "19" :
                            return tjVipSumDao.selectProjConsumeCnt(timeSpaceParam, null, companyId);
                        case "20" :
                            return tjVipSumDao.selectTimeLength(timeSpaceParam, null, companyId);
                        default :
                            return tjVipSumDao.selectBusinessInCome(timeSpaceParam, null, companyId);
                    }
                }
            });
            return setDataList(ajaxResult);
        }
    }
    private AjaxResult setDataList(AjaxResult ajaxResult) {
        List<SeriesVo> list = (List<SeriesVo>) ajaxResult.getMapInfo().get("series");
        String[] xAxis = (String[]) ajaxResult.getMapInfo().get("xAxis");
        String [] data = list.get(0).getData();
        if (data != null && data.length != 0) {
            List<Map<String, String>> dataList = new ArrayList<>();
            for(int i = data.length - 1; i >= 0; i--) {
                Map<String, String> map = new HashMap<>();
                map.put(xAxis[i], data[i]);
                dataList.add(map);
            }
            ajaxResult.setRows(dataList);
        }
        return ajaxResult;
    }
    @ApiOperation(value = "查询员工业绩报表", notes = "查询员工业绩报表")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = VipAchieveDataShowVo.class)
    })
    @PostMapping(value = "/findVipAchieve")
    public AjaxResult findVipAchieve(@RequestBody BusinessesDto businessesDto) {
        String unit = "";
        int calenderUnit;
        if (BusinessesDto.DAY.equals(businessesDto.getType())) {
            unit = "日";
            calenderUnit = Calendar.DATE;
        } else {
            unit = "月";
            calenderUnit = Calendar.MONTH;
        }
        int start = (businessesDto.getPageNum() - 1) * businessesDto.getPageSize();
        int size = businessesDto.getPageSize();
        Calendar calendar = Calendar.getInstance();
        calendar.add(calenderUnit, 1);
        calendar.add(calenderUnit, -start);
        String endTime = DateUtil.dateToString(calendar.getTime(), DateUtil.DATE_FORMAT_DD);
        calendar.add(calenderUnit, -size);
        String startTime = DateUtil.dateToString(calendar.getTime(), DateUtil.DATE_FORMAT_DD);
        List<Date> xAxis = StatisticsTimeUtil.getTimeSpace(startTime, endTime, unit);
        List<StatisticsTimeDaoParam> timeSpaceParam = StatisticsTimeUtil.buidParam(xAxis);
        List<StatisticsTimeDaoParam> statisticsTimeDaoParams = timeSpaceParam.subList(0, timeSpaceParam.size() - 2);
        List<VipAchieveDataShowVo> list = tjVipSumDao.selectVipAchieveInPage(statisticsTimeDaoParams, businessesDto.getStaffId());
        List<VipAchieveDataShowVo> result = new ArrayList<>();
        for (int i = list.size() - 1; i >= 0; i--) {
            VipAchieveDataShowVo item = list.get(i);
            String dataTime = item.getTime();
            if (BusinessesDto.DAY.equals(businessesDto.getType())) {
                item.setTime(DateUtil.dateToString(DateUtil.stringToDate(dataTime, DateUtil.DATE_FORMAT_DD), DateUtil.DATE_FORMAT_DD));
            } else {
                item.setTime(DateUtil.dateToString(DateUtil.stringToDate(dataTime, DateUtil.MONTH), DateUtil.MONTH));
            }
            result.add(item);
        }
        return AjaxResult.buildSuccessInstance(result);
    }
    @ApiOperation(value = "员工专项", notes = "员工专项")
    @PostMapping(value = "/findVipBusinessData")
    public AjaxResult findVipBusinessData(@RequestBody @Validated VipStatisticsParamDto vipStatisticsParamDto) {
        AjaxResult ajaxResult = dataAnalysisCustomerService.getStaffAnalysisResult(vipStatisticsParamDto, new Caculate<BigDecimal>() {
            @Override
            public Map<String, BigDecimal> exec(List<StatisticsTimeDaoParam> timeSpaceParam, Long shopId, Long staffId) {
                switch (vipStatisticsParamDto.getType()) {
                    case "1" :
                        return tjVipSumDao.selectStaffOrderAchieve(timeSpaceParam, staffId);
                    case "2" :
                        return tjVipSumDao.selectStaffCashAchieve(timeSpaceParam, staffId);
                    case "3" :
                        return tjVipSumDao.selectStaffCardAchieve(timeSpaceParam, staffId);
                    case "4" :
                        return tjVipSumDao.selectStaffGoodsAchieve(timeSpaceParam, staffId);
                    case "5" :
                        return tjVipSumDao.selectStaffHisConsumeAchieve(timeSpaceParam, staffId);
                    case "6" :
                        return tjVipSumDao.selectStaffFreeConsumeAchieve(timeSpaceParam, staffId);
                    case "7" :
                        return tjVipSumDao.selectStaffCommissionAchieve(timeSpaceParam, staffId);
                    case "8" :
                        return tjVipSumDao.selectStaffPeopleNum(timeSpaceParam, staffId);
                    case "9" :
                        return tjVipSumDao.selectStaffProjNum(timeSpaceParam, staffId);
                    case "10" :
                        return tjVipSumDao.selectStaffProjTime(timeSpaceParam, staffId);
                    default:
                        return tjVipSumDao.selectStaffOrderAchieve(timeSpaceParam, staffId);
                }
            }
        });
        return setDataList(ajaxResult);
    }
}