diff --git a/crm-admin/src/main/java/com/yb/lb/webapp/excel/logistics/RecordsExcel.java b/crm-admin/src/main/java/com/yb/lb/webapp/excel/logistics/RecordsExcel.java index d047356..4792776 100644 --- a/crm-admin/src/main/java/com/yb/lb/webapp/excel/logistics/RecordsExcel.java +++ b/crm-admin/src/main/java/com/yb/lb/webapp/excel/logistics/RecordsExcel.java @@ -63,6 +63,7 @@ public class RecordsExcel { @ApiParam(required = false, value = "业务员名称") @RequestParam(required = false) String staffName, @ApiParam(required = false, value = "营销区域id(逗号分隔)") @RequestParam(required = false) String areaIds, @ApiParam(required = false, value = "业务员id(逗号分隔)") @RequestParam(required = false) String staffIds, + @ApiParam(required = false, value = "商品編碼") @RequestParam(required = false) String goodsNo, @ApiParam(required = false, value = "开始时间") @RequestParam(required = false) String startTime, @ApiParam(required = false, value = "结束时间") @RequestParam(required = false) String endTime, HttpServletResponse response) throws Exception { @@ -80,6 +81,7 @@ public class RecordsExcel { params.put("staffName", staffName); params.put("startTime", startTime); params.put("endTime", endTime); + params.put("goodsNo", goodsNo); if (StringUtil.isNotEmpty(areaIds)) { params.put("areaIds", areaIds.split(",", -1)); } @@ -98,6 +100,12 @@ public class RecordsExcel { receiptRecordsBo.setClientId(String.valueOf(objectMap.get("clientId"))); // 客户U8编码 receiptRecordsBo.setUecode(String.valueOf(objectMap.get("uecode"))); + // 商品编码 + receiptRecordsBo.setGoodsNo(String.valueOf(objectMap.get("goodsNo"))); + // 商品名称 + receiptRecordsBo.setGoodsName(String.valueOf(objectMap.get("goodsName"))); + // 规格 + receiptRecordsBo.setSpecification(String.valueOf(objectMap.get("specification"))); // 营销区域ID receiptRecordsBo.setAreaId(String.valueOf(objectMap.get("areaId"))); // 营销区域名称 @@ -113,6 +121,7 @@ public class RecordsExcel { map.put("endCode", endCode); map.put("startTime", startTime); map.put("endTime", endTime); + map.put("goodsNo", goodsNo); List list2 = receiptRecordsService.findGoods(map, ".getMajorNum"); Map map1 = (Map) list2.get(0); if (map1 != null) { @@ -129,7 +138,9 @@ public class RecordsExcel { map.put("endCode", endCode); map.put("invoiceStartTime", startTime); map.put("invoiceEndTime", endTime); + map.put("goodsNo", goodsNo); Integer invoiceNum = receiptRecordsService.countAll(map, ".countRecordsByCondition"); + invoiceNum = StringUtil.isNullOrEmpty(invoiceNum)? 0:invoiceNum; receiptRecordsBo.setInvoiceNum(invoiceNum.toString()); // 入库数量 经销商扫码入库数量汇总 map.clear(); @@ -138,8 +149,10 @@ public class RecordsExcel { map.put("endCode", endCode); map.put("receiveStartTime", startTime); map.put("receiveEndTime", endTime); + map.put("goodsNo", goodsNo); map.put("timeFlag", "1"); Integer receiveNum = receiptRecordsService.countAll(map, ".statisticsRecords"); + receiveNum = StringUtil.isNullOrEmpty(receiveNum)? 0:receiveNum; receiptRecordsBo.setReceiveNum(receiveNum.toString()); // 出库数量 经销商扫码出库数量汇总 map.clear(); @@ -148,8 +161,10 @@ public class RecordsExcel { map.put("endCode", endCode); map.put("deliveryStartTime", startTime); map.put("deliveryEndTime", endTime); + map.put("goodsNo", goodsNo); map.put("timeFlag", "2"); Integer deliveryNum = receiptRecordsService.countAll(map, ".statisticsRecords"); + deliveryNum = StringUtil.isNullOrEmpty(deliveryNum)? 0:deliveryNum; receiptRecordsBo.setDeliveryNum(deliveryNum.toString()); // 如果数量都是0,跳出循环 if ("0.00".equals(receiptRecordsBo.getMajorNum()) && (invoiceNum == 0) && (receiveNum == 0) && (deliveryNum == 0)) { @@ -212,6 +227,7 @@ public class RecordsExcel { map.put("invoiceStartTime", startTime); map.put("invoiceEndTime", endTime); Integer invoiceNum = receiptRecordsService.countAll(map, ".countRecordsByCondition"); + invoiceNum = StringUtil.isNullOrEmpty(invoiceNum)? 0:invoiceNum; receiptRecordsBo.setInvoiceNum(invoiceNum.toString()); // 入库数量 经销商扫码入库数量汇总 @@ -221,6 +237,7 @@ public class RecordsExcel { map.put("receiveEndTime", endTime); map.put("timeFlag", "1"); Integer receiveNum = receiptRecordsService.countAll(map, ".statisticsRecords"); + receiveNum = StringUtil.isNullOrEmpty(receiveNum)? 0:receiveNum; receiptRecordsBo.setReceiveNum(receiveNum.toString()); // 出库数量 经销商扫码出库数量汇总 @@ -230,6 +247,7 @@ public class RecordsExcel { map.put("deliveryEndTime", endTime); map.put("timeFlag", "2"); Integer deliveryNum = receiptRecordsService.countAll(map, ".statisticsRecords"); + deliveryNum = StringUtil.isNullOrEmpty(deliveryNum)? 0:deliveryNum; receiptRecordsBo.setDeliveryNum(deliveryNum.toString()); // 如果实发数量没有值或者等于0,出库率和入库率等于0.00 diff --git a/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsApi.java b/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsApi.java index 67fa59d..3488501 100644 --- a/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsApi.java +++ b/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsApi.java @@ -567,6 +567,7 @@ public class ReceiptRecordsApi extends BaseController { @ApiParam(required = false, value = "营销区域id") @RequestParam(required = false) String areaId, @ApiParam(required = false, value = "开始时间") @RequestParam(required = false) String startTime, @ApiParam(required = false, value = "结束时间") @RequestParam(required = false) String endTime, + @ApiParam(required = false, value = "商品編碼") @RequestParam(required = false) String goodsNo, @ApiParam(required = false, value = "页码", defaultValue = "1") @RequestParam(required = false, value = "page") Integer page, @ApiParam(required = false, value = "每页条数", defaultValue = "10") @RequestParam(required = false, value = "pageSize") Integer pageSize, HttpServletRequest request) { @@ -589,6 +590,7 @@ public class ReceiptRecordsApi extends BaseController { params.put("areaId", areaId); params.put("page", page); params.put("pageSize", pageSize); + params.put("goodsNo",goodsNo); // 分页查询在发货单或者收发货记录中有记录的经销商 PageInfo pageInfo = receiptRecordsService.pageList(params, ".customerRecords1"); List> list = pageInfo.getList(); diff --git a/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsController.java b/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsController.java index a1936cc..10fe5b2 100644 --- a/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsController.java +++ b/crm-admin/src/main/java/com/yb/lb/webapp/records/ReceiptRecordsController.java @@ -162,6 +162,7 @@ public class ReceiptRecordsController extends BaseController { @ApiParam(required = false, value = "业务员id(逗号分隔)") @RequestParam(required = false) String staffIds, @ApiParam(required = false, value = "开始时间") @RequestParam(required = false) String startTime, @ApiParam(required = false, value = "结束时间") @RequestParam(required = false) String endTime, + @ApiParam(required = false, value = "商品編碼") @RequestParam(required = false) String goodsNo, @ApiParam(required = false, value = "页码", defaultValue = "1") @RequestParam(required = false, value = "page") Integer page, @ApiParam(required = false, value = "每页条数", defaultValue = "10") @RequestParam(required = false, value = "pageSize") Integer pageSize, HttpServletRequest request) { @@ -182,6 +183,7 @@ public class ReceiptRecordsController extends BaseController { params.put("staffName", staffName); params.put("startTime", startTime); params.put("endTime", endTime); + params.put("goodsNo",goodsNo); if (StringUtil.isNotEmpty(areaIds)) { params.put("areaIds", areaIds.split(",", -1)); } @@ -225,6 +227,7 @@ public class ReceiptRecordsController extends BaseController { @ApiParam(required = false, value = "业务员id(逗号分隔)") @RequestParam(required = false) String staffIds, @ApiParam(required = false, value = "开始时间") @RequestParam(required = false) String startTime, @ApiParam(required = false, value = "结束时间") @RequestParam(required = false) String endTime, + @ApiParam(required = false, value = "商品編碼") @RequestParam(required = false) String goodsNo, HttpServletRequest request) { Map result = new HashMap(); Map params = new HashMap(); @@ -243,6 +246,7 @@ public class ReceiptRecordsController extends BaseController { map.put("endCode", endCode); map.put("clientId", clientId); map.put("clientName", clientName); + map.put("goodsNo", goodsNo); if (StringUtil.isNotEmpty(areaIds)) { map.put("areaIds", areaIds.split(",", -1)); } diff --git a/crm-common/src/main/resources/mapper/mapper_oracle/records/ReceiptRecordsMapper.xml b/crm-common/src/main/resources/mapper/mapper_oracle/records/ReceiptRecordsMapper.xml index 210735b..d5f6350 100644 --- a/crm-common/src/main/resources/mapper/mapper_oracle/records/ReceiptRecordsMapper.xml +++ b/crm-common/src/main/resources/mapper/mapper_oracle/records/ReceiptRecordsMapper.xml @@ -261,6 +261,12 @@ AND (a.invoice_time is not null) AND (a.invoice_client_id is not null) + + AND a.GOODS_NO = #{goodsNo} + + + AND (a.GOODS_NO is null or a.GOODS_NO = '') + AND a.company_id = #{companyId} @@ -388,16 +394,23 @@ - ORDER BY a.create_time DESC + group by GOODS_NO +-- ORDER BY a.create_time DESC diff --git a/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/entity/ReceiptRecordsBo.java b/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/entity/ReceiptRecordsBo.java index 9efbf03..704ebb5 100644 --- a/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/entity/ReceiptRecordsBo.java +++ b/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/entity/ReceiptRecordsBo.java @@ -31,6 +31,24 @@ public class ReceiptRecordsBo implements java.io.Serializable { @Excel(name = "U8编码", width = 15, orderNum = "2") private String uecode; + /** + * 商品编码 + */ + @Excel(name = "商品编码", width = 15, orderNum = "2") + private String goodsNo; + + /** + * 商品名称 + */ + @Excel(name = "商品名称", width = 15, orderNum = "2") + private String goodsName; + + /** + * 规格 + */ + @Excel(name = "规格", width = 15, orderNum = "2") + private String specification; + /** * 营销区域id */ @@ -107,6 +125,30 @@ public class ReceiptRecordsBo implements java.io.Serializable { @Excel(name = "出库数量", width = 15, orderNum = "7") private String deliveryNum; + public String getGoodsNo() { + return goodsNo; + } + + public void setGoodsNo(String goodsNo) { + this.goodsNo = goodsNo; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + /** * 入库率 入库数量/实发数量*100 */ diff --git a/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/service/ReceiptRecordsService.java b/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/service/ReceiptRecordsService.java index 58515be..97ee67b 100644 --- a/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/service/ReceiptRecordsService.java +++ b/crm-webapp/src/main/java/com/yb/lb/webapp/record/records/service/ReceiptRecordsService.java @@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -99,10 +100,11 @@ public class ReceiptRecordsService { /** * @description: 统计每个客户的数据 - * @author: mzr - * @date: 2022/05/04 + * @author: lj + * @date: 2024/04/09 **/ - public void getCountNums(String startCode, String endCode, String startTime, String endTime, List> list) { + public List> getCountNums2(String startCode, String endCode, String startTime, String endTime, String goodsNo, List> list) { + List> resultList = new ArrayList<>(); for (Map objectMap : list) { String clientId1 = objectMap.get("clientId") + ""; Map map = new HashMap<>(); @@ -128,9 +130,49 @@ public class ReceiptRecordsService { map.put("endCode", endCode); map.put("invoiceStartTime", startTime); map.put("invoiceEndTime", endTime); - Integer invoiceNum = this.countAll(map, ".countRecordsByCondition"); + map.put("goodsNo", goodsNo); + List sfMapList = dao.list(ReceiptRecordsInfo.class.getName() + ".countRecordsByCondition", map); + + if(sfMapList.size() == 0){ + Map itemMap = new HashMap(); + itemMap.put("clientId",objectMap.get("clientId")); + itemMap.put("clientName",objectMap.get("clientName")); + itemMap.put("areaId",objectMap.get("areaId")); + itemMap.put("uecode",objectMap.get("uecode")); + itemMap.put("staffName",objectMap.get("staffName")); + itemMap.put("areaName",objectMap.get("areaName")); + itemMap.put("majorNum",objectMap.get("majorNum")); + itemMap.put("goodsNo",""); + itemMap.put("goodsName",""); + itemMap.put("specifications",""); + itemMap.put("invoiceNum","0"); + itemMap.put("receiveNum","0"); + itemMap.put("receiveRate","0.00"); + itemMap.put("deliveryNum","0"); + itemMap.put("deliveryRate","0.00"); + resultList.add(itemMap); + continue; + }else{ + //合并实发数量 + for(int i = 0; i < sfMapList.size(); i++){ + Map itemMap = new HashMap(); + itemMap.put("clientId",objectMap.get("clientId")); + itemMap.put("clientName",objectMap.get("clientName")); + itemMap.put("areaId",objectMap.get("areaId")); + itemMap.put("uecode",objectMap.get("uecode")); + itemMap.put("staffName",objectMap.get("staffName")); + itemMap.put("areaName",objectMap.get("areaName")); + itemMap.put("majorNum",objectMap.get("majorNum")); + itemMap.put("goodsNo",sfMapList.get(i).getGoodsNo()); + itemMap.put("goodsName",sfMapList.get(i).getGoodsName()); + itemMap.put("specifications",sfMapList.get(i).getSpecifications()); + itemMap.put("invoiceNum",StringUtil.isNullOrEmpty(sfMapList.get(i).getInvoiceNum())?"0":sfMapList.get(i).getInvoiceNum()); + resultList.add(itemMap); + } + } +// Integer invoiceNum = this.countAll(map, ".countRecordsByCondition"); // receiptRecordsBo.setInvoiceNum(invoiceNum.toString()); - objectMap.put("invoiceNum", invoiceNum.toString()); +// objectMap.put("invoiceNum", invoiceNum.toString()); // 入库数量 经销商扫码入库数量汇总 map.clear(); map.put("clientId", clientId1); @@ -139,9 +181,32 @@ public class ReceiptRecordsService { map.put("receiveStartTime", startTime); map.put("receiveEndTime", endTime); map.put("timeFlag", "1"); - Integer receiveNum = this.countAll(map, ".statisticsRecords"); + List rkMapList = dao.list(ReceiptRecordsInfo.class.getName() + ".statisticsRecords", map); + //合并入库数量 + for(int i = 0; i < rkMapList.size();i++){ + ReceiptRecordsInfo rkRinfo = rkMapList.get(i); +// resultList.stream().filter(x-> x.get("clientId").equals(item.getClientId()) && x.get("goodsNo").equals(item.getGoodsNo())); + resultList.forEach(resultMap->{ + boolean rkgoodsNoFlag = StringUtil.isNullOrEmpty(rkRinfo.getGoodsNo()); + boolean rsgoodsNoFlag = StringUtil.isNullOrEmpty(resultMap.get("goodsNo")); + //clientid 和 goodsNo匹配 或者 goodsNo都为空时 + if((rkRinfo.getClientId().equals(resultMap.get("clientId"))) + && ((rkgoodsNoFlag && rsgoodsNoFlag) || ((!rkgoodsNoFlag && !rsgoodsNoFlag && rkRinfo.getGoodsNo().equals(resultMap.get("goodsNo"))))) ){ + resultMap.put("receiveNum",StringUtil.isNullOrEmpty(rkRinfo.getReceiveNum())?"0":rkRinfo.getReceiveNum()); + DecimalFormat df = new DecimalFormat("0.00"); + Integer invoiceNum = Integer.valueOf(resultMap.get("invoiceNum").toString()); + Integer receiveNum = Integer.valueOf(resultMap.get("receiveNum").toString()); + // 入库率 入库数量/实发数量*100 + resultMap.put("receiveRate", df.format((float) receiveNum / invoiceNum * 100)); + } + }); + } + + + +// Integer receiveNum = this.countAll(map, ".statisticsRecords"); // receiptRecordsBo.setReceiveNum(receiveNum.toString()); - objectMap.put("receiveNum", receiveNum.toString()); +// objectMap.put("receiveNum", receiveNum.toString()); // 出库数量 经销商扫码出库数量汇总 map.clear(); map.put("clientId", clientId1); @@ -150,9 +215,98 @@ public class ReceiptRecordsService { map.put("deliveryStartTime", startTime); map.put("deliveryEndTime", endTime); map.put("timeFlag", "2"); - Integer deliveryNum = this.countAll(map, ".statisticsRecords"); + List ckMapList = dao.list(ReceiptRecordsInfo.class.getName() + ".statisticsRecords", map); +// Integer deliveryNum = this.countAll(map, ".statisticsRecords"); // receiptRecordsBo.setDeliveryNum(deliveryNum.toString()); - objectMap.put("deliveryNum", deliveryNum.toString()); +// objectMap.put("deliveryNum", deliveryNum.toString()); + + //合并出库数量 + for(int i = 0; i < ckMapList.size();i++){ + ReceiptRecordsInfo ckRinfo = ckMapList.get(i); +// ckMapList.forEach(item-> { +// resultList.stream().filter(x-> x.get("clientId").equals(item.getClientId()) && x.get("goodsNo").equals(item.getGoodsNo())); + resultList.forEach(resultMap->{ + boolean ckgoodsNoFlag = StringUtil.isNullOrEmpty(ckRinfo.getGoodsNo()); + boolean rsgoodsNoFlag = StringUtil.isNullOrEmpty(resultMap.get("goodsNo")); + //clientid 和 goodsNo匹配 或者 goodsNo都为空时 + if((ckRinfo.getClientId().equals(resultMap.get("clientId"))) + && ((ckgoodsNoFlag && rsgoodsNoFlag) || ((!ckgoodsNoFlag && !rsgoodsNoFlag && ckRinfo.getGoodsNo().equals(resultMap.get("goodsNo"))))) ){ + resultMap.put("deliveryNum",StringUtil.isNullOrEmpty(ckRinfo.getReceiveNum())?"0":ckRinfo.getReceiveNum()); + DecimalFormat df = new DecimalFormat("0.00"); + Integer invoiceNum = Integer.valueOf(resultMap.get("invoiceNum").toString()); + Integer deliveryNum = Integer.valueOf(resultMap.get("deliveryNum").toString()); + // 出库率 出库数量/实发数量*100 + resultMap.put("deliveryRate", df.format((float) deliveryNum / invoiceNum * 100)); + } + }); + } + } + return resultList; + } + + /** + * @description: 统计每个客户的数据 + * @author: mzr + * @date: 2022/05/04 + **/ + public void getCountNums(String startCode, String endCode, String startTime, String endTime, List> list) { + for (Map objectMap : list) { + String clientId1 = objectMap.get("clientId") + ""; + Map map = new HashMap<>(); + // 应发数量 该经销商发货单的商品的实发数量汇总 + map.put("clientId", clientId1); + map.put("startCode", startCode); + map.put("endCode", endCode); + map.put("startTime", startTime); + map.put("endTime", endTime); + map.put("goodsNo", objectMap.get("goodsNo")); + List list2 = this.findGoods(map, ".getMajorNum"); + Map map1 = (Map) list2.get(0); + if (map1 != null) { + String majorNum = StringUtil.isEmpty(map1.get("majorNum")) ? "0.00" : String.format("%.2f", Double.parseDouble(map1.get("majorNum") + "")); + objectMap.put("majorNum", majorNum); + } else { + objectMap.put("majorNum", "0.00"); + } + + // 实发数量 仓库扫码条数 + map.clear(); + map.put("clientId", clientId1); + map.put("startCode", startCode); + map.put("endCode", endCode); + map.put("invoiceStartTime", startTime); + map.put("invoiceEndTime", endTime); + map.put("goodsNo", objectMap.get("goodsNo")); + Integer invoiceNum = this.countAll(map, ".countRecordsByCondition"); + invoiceNum = StringUtil.isNullOrEmpty(invoiceNum)? 0:invoiceNum; + // receiptRecordsBo.setInvoiceNum(invoiceNum.toString()); + objectMap.put("invoiceNum", StringUtil.isNullOrEmpty(invoiceNum)?"0":invoiceNum.toString()); + // 入库数量 经销商扫码入库数量汇总 + map.clear(); + map.put("clientId", clientId1); + map.put("startCode", startCode); + map.put("endCode", endCode); + map.put("receiveStartTime", startTime); + map.put("receiveEndTime", endTime); + map.put("timeFlag", "1"); + map.put("goodsNo", objectMap.get("goodsNo")); + Integer receiveNum = this.countAll(map, ".statisticsRecords"); + receiveNum = StringUtil.isNullOrEmpty(receiveNum)? 0:receiveNum; + // receiptRecordsBo.setReceiveNum(receiveNum.toString()); + objectMap.put("receiveNum", StringUtil.isNullOrEmpty(receiveNum)?"0":receiveNum.toString()); + // 出库数量 经销商扫码出库数量汇总 + map.clear(); + map.put("clientId", clientId1); + map.put("startCode", startCode); + map.put("endCode", endCode); + map.put("deliveryStartTime", startTime); + map.put("deliveryEndTime", endTime); + map.put("timeFlag", "2"); + map.put("goodsNo", objectMap.get("goodsNo")); + Integer deliveryNum = this.countAll(map, ".statisticsRecords"); + deliveryNum = StringUtil.isNullOrEmpty(deliveryNum)? 0:deliveryNum; + // receiptRecordsBo.setDeliveryNum(deliveryNum.toString()); + objectMap.put("deliveryNum", StringUtil.isNullOrEmpty(deliveryNum)? "0":deliveryNum.toString()); if (StringUtil.isNotEmpty(invoiceNum) && (0 != invoiceNum)) { DecimalFormat df = new DecimalFormat("0.00");