package com.glxp.api.service.collect; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.dao.collect.IoCollectOrderBizBackupMapper; import com.glxp.api.entity.collect.IoCollectOrderBizBackup; import com.glxp.api.http.ErpBasicClient; import com.glxp.api.req.collect.CollectOrderBizRequest; import com.glxp.api.req.collect.CollectOrderUploadCountRequest; import com.glxp.api.res.collect.CollectOrderBizResponse; import com.glxp.api.res.collect.CollectOrderUploadCountResponse; import io.swagger.models.auth.In; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; @Service public class IoCollectOrderBizBackupService extends ServiceImpl { @Resource IoCollectOrderBizBackupMapper ioCollectOrderBizBackupMapper; @Resource private ErpBasicClient erpBasicClient; public List filterList(CollectOrderBizRequest collectOrderRequest) { if (collectOrderRequest == null) { return Collections.emptyList(); } if (collectOrderRequest.getPage() != null) { int offset = (collectOrderRequest.getPage() - 1) * collectOrderRequest.getLimit(); PageHelper.offsetPage(offset, collectOrderRequest.getLimit()); } List data = ioCollectOrderBizBackupMapper.filterList(collectOrderRequest); return data; } /** * 计算上传率 */ public void CalculatedUploadRate(CollectOrderUploadCountRequest collectOrderUploadCountRequest, CollectOrderUploadCountResponse collectOrderUploadCountResponse) { List list = ioCollectOrderBizBackupMapper.getList(collectOrderUploadCountRequest); Map buyTypeMap = new HashMap<>(); List buyTypeBuyer = new ArrayList<>(); List buyTypeSales = new ArrayList<>(); Integer buyerCount = 0; Integer salesCount = 0; Integer buyerScanCount = 0; Integer salesScanCount = 0; BigDecimal buyerCentage = new BigDecimal(0); BigDecimal salesCentage = new BigDecimal(0); Integer codeCount = 0; if (list != null && list.size() > 0) { BaseResponse> baseResponse = erpBasicClient.getBuyType("thirdId"); if (baseResponse.getCode() == 20000) { buyTypeMap = baseResponse.getData(); buyTypeBuyer = new ArrayList<>(Arrays.asList(buyTypeMap.get("buyType_3501"))); buyTypeBuyer.addAll(Arrays.asList(buyTypeMap.get("buyType_3502"))); buyTypeSales = new ArrayList<>(Arrays.asList(buyTypeMap.get("buyType_3505"))); buyTypeSales.addAll(Arrays.asList(buyTypeMap.get("buyType_3506"))); } for (CollectOrderBizResponse collectOrderBizResponse : list) { for (String buyType : buyTypeBuyer) { if (buyType.equals(collectOrderBizResponse.getBusType())) { buyerCount += collectOrderBizResponse.getCount(); // 只有已上传的码才是正确的码 if (2 == collectOrderBizResponse.getUploadStatus()) { buyerScanCount += collectOrderBizResponse.getScanCount(); } } } for (String buyType : buyTypeSales) { if (buyType.equals(collectOrderBizResponse.getBusType())) { salesCount += collectOrderBizResponse.getCount(); if (2 == collectOrderBizResponse.getUploadStatus()) { salesScanCount += collectOrderBizResponse.getScanCount(); } } } } // 计算采购率和销售率 BigDecimal buyerCountBigDecimal = BigDecimal.valueOf(buyerCount); BigDecimal buyerScanCountBigDecimal = BigDecimal.valueOf(buyerScanCount); if(buyerCountBigDecimal.equals(new BigDecimal(0))){ buyerCentage = new BigDecimal(0).setScale(2, BigDecimal.ROUND_HALF_UP); }else { buyerCentage = buyerScanCountBigDecimal.divide(buyerCountBigDecimal,4, BigDecimal.ROUND_HALF_UP ).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP); } BigDecimal salesCountBigDecimal = BigDecimal.valueOf(salesCount); BigDecimal salesScanCountBigDecimal = BigDecimal.valueOf(salesScanCount); if(salesCountBigDecimal.equals(new BigDecimal(0))){ salesCentage = new BigDecimal(0).setScale(2, BigDecimal.ROUND_HALF_UP); }else { salesCentage = salesScanCountBigDecimal.divide(salesCountBigDecimal,4, BigDecimal.ROUND_HALF_UP ).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP); } codeCount = buyerScanCount + salesScanCount; } collectOrderUploadCountResponse.setBuyerCentage(buyerCentage); collectOrderUploadCountResponse.setSalesCentage(salesCentage); collectOrderUploadCountResponse.setCodeCount(codeCount); } public static void main(String[] args) { System.out.println(new BigDecimal(0).setScale(2, BigDecimal.ROUND_HALF_UP)); } }