提交 12543d0e authored 作者: 吕本才's avatar 吕本才

feat(经销商): 新增经销商查询接口及相关功能

新增经销商查询接口,包括分页查询和全量查询功能 添加经销商查询请求参数类 QinceDealerQueryRequest 和 QinceAllDealerQueryRequest 实现经销商查询服务层逻辑和控制器接口 优化订单同步服务,添加成本字段计算逻辑 调整批量处理大小和分页查询条件
上级 ef56f543
package com.sfa.job.controller.qince;
import com.alibaba.fastjson.JSONArray;
import com.sfa.common.core.web.domain.AjaxResult;
import com.sfa.job.pojo.qince.request.QinceAllDealerQueryRequest;
import com.sfa.job.pojo.qince.request.QinceDealerQueryRequest;
import com.sfa.job.service.qince.IQinceDealerQueryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 勤策经销商查询Controller
*/
@Slf4j
@RestController
@RequestMapping("/qince/dealer")
public class QinceDealerController {
@Autowired
private IQinceDealerQueryService qinceDealerQueryService;
/**
* 查询经销商(分页)
*
* @param request 查询参数
* @return 经销商数据列表
*/
@GetMapping("/list")
public AjaxResult queryDealer(QinceDealerQueryRequest request) {
try {
JSONArray dealers = qinceDealerQueryService.queryDealer(request);
return AjaxResult.success("查询成功", dealers)
.put("page", request.getPage())
.put("rows", request.getRows())
.put("count", dealers != null ? dealers.size() : 0);
} catch (Exception e) {
log.error("查询经销商异常:{}", e.getMessage(), e);
return AjaxResult.error("查询经销商异常:" + e.getMessage());
}
}
/**
* 查询所有经销商(循环分页直到无数据)
*
* @param request 查询参数
* @return 所有经销商数据
*/
@GetMapping("/list/all")
public AjaxResult queryAllDealer(QinceAllDealerQueryRequest request) {
try {
JSONArray allDealers = qinceDealerQueryService.queryAllDealer(request);
return AjaxResult.success("查询成功", allDealers)
.put("pageSize", request.getPageSize())
.put("totalCount", allDealers != null ? allDealers.size() : 0);
} catch (Exception e) {
log.error("查询所有经销商异常:{}", e.getMessage(), e);
return AjaxResult.error("查询所有经销商异常:" + e.getMessage());
}
}
}
package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.FinanceOrder;
import com.sfa.job.domain.order.entity.WdtQimenOrder;
import java.util.List;
......
......@@ -15,7 +15,7 @@ import java.util.List;
@Repository
public class WdtQimenStockoutOrderDaoImpl implements WdtQimenStockoutOrderDao {
private static final int BATCH_SIZE = 100; // 分批大小,可根据实际情况调整
private static final int BATCH_SIZE = 20; // 分批大小,可根据实际情况调整
@Resource
private WdtQimenStockoutOrderMapper stockoutOrderMapper;
......
......@@ -347,7 +347,7 @@ public class WdtQimenStockoutOrder implements Serializable {
if (matcher.find()) {
return matcher.group(1);
}
return "";
return input;
}
/**
......@@ -362,6 +362,6 @@ public class WdtQimenStockoutOrder implements Serializable {
if (matcher.find()) {
return matcher.group(1);
}
return "";
return input;
}
}
package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
......@@ -201,6 +199,17 @@ public class WdtQimenStockoutOrderDetail implements Serializable {
/** 更新时间 */
private Date updateTime;
// 实际成本
private BigDecimal actualCost;
// 标准成本
private BigDecimal standardCost;
// 实际成本*num 实际总成本
private BigDecimal sumActualCost;
// 标准成本*num 标准总成本
private BigDecimal sumStandardCost;
/**
* 设置分销商ID和名称
* 从fenxiaoNick中解析出fenxiaoId和fenxiaoName
......
package com.sfa.job.pojo.qince.request;
import lombok.Data;
@Data
public class QinceAllDealerQueryRequest {
private Integer pageSize = 1000;
}
package com.sfa.job.pojo.qince.request;
import lombok.Data;
@Data
public class QinceDealerQueryRequest {
private Integer page = 1;
private Integer rows = 1000;
private String dealer_code ;
}
......@@ -5,7 +5,6 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.qimencloud.api.DefaultQimenCloudClient;
import com.qimencloud.api.QimenCloudClient;
import com.sfa.common.core.exception.ServiceException;
......
......@@ -232,7 +232,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
orderResult.addAll(typedOrderSubResult);
}
pageNo++;
} while (pageNo <= totalPage);
} while (pageNo <= (totalPage - 1));
// 基础数据 直播间分类数据+成本、规格、口味
......
......@@ -22,6 +22,7 @@ import com.sfa.job.domain.order.entity.WdtQimenStockoutPositionDetail;
import com.sfa.job.domain.order.entity.WdtQimenStockoutLogisticsDetail;
import com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail;
import com.sfa.job.domain.order.entity.WdtQimenStockoutGovSubsidy;
import com.sfa.job.domain.order.entity.FinanceBaseProduct;
import com.sfa.job.pojo.order.request.SyncStockoutRequest;
import com.sfa.job.pojo.order.request.WdtStockoutSalesQueryWithDetailRequest;
import com.sfa.job.pojo.order.response.WdtQimenStockoutBodyDto;
......@@ -33,6 +34,7 @@ import com.sfa.job.pojo.response.SyncOrderDetailDto;
import com.sfa.job.service.order.IWdtQimenStockoutOrderSyncService;
import com.sfa.job.enums.WdtPlatformMappingEnum;
import com.sfa.job.util.WdtQimenUtil;
import com.sfa.job.domain.order.dao.FinianceBaseProductDao;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
......@@ -40,9 +42,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 销售出库单同步服务实现
......@@ -76,6 +80,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
@Autowired
CollectOrderLogDao orderLogInfoDao;
@Autowired
FinianceBaseProductDao baseProductDao;
// @Transactional(rollbackFor = Exception.class)
@Override
public SyncOrderDetailDto syncStockoutOrder(SyncStockoutRequest syncStockoutRequest,Integer pageSize) {
......@@ -195,6 +202,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
totalCount = wdtQimenDataDto.getTotalCount();
wdtTotalPage = totalCount / wdtPageSize + 1;
// 基础数据 成本数据
Map<String, FinanceBaseProduct> baseProductMap = baseProductDao.selectBaseProduct();
List<WdtQimenStockoutOrder> stockoutOrderSubList = wdtQimenDataDto.getOrder();
List<WdtQimenStockoutOrder> pageOrderList = new ArrayList<>();
List<WdtQimenStockoutOrderDetail> pageDetailList = new ArrayList<>();
......@@ -236,6 +246,19 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
detail.setFenxiaoIdAndName();
// 设置平台名称
detail.setPlatformName(stockoutOrder.getPlatformName());
// 设置成本字段
detail.setActualCost(ObjectUtils.isNotEmpty(baseProductMap.get(detail.getGoodsNo())) ?
baseProductMap.get(detail.getGoodsNo()).getActualCost() :
new BigDecimal(0)
);
detail.setStandardCost(ObjectUtils.isNotEmpty(baseProductMap.get(detail.getGoodsNo())) ?
baseProductMap.get(detail.getGoodsNo()).getStandardCost() :
new BigDecimal(0)
);
detail.setSumActualCost(detail.getActualCost().multiply(detail.getNum()));
detail.setSumStandardCost(detail.getStandardCost().multiply(detail.getNum()));
pageDetailList.add(detail);
totalDetailCount++;
......
package com.sfa.job.service.qince;
import com.alibaba.fastjson.JSONArray;
import com.sfa.job.pojo.qince.request.QinceAllDealerQueryRequest;
import com.sfa.job.pojo.qince.request.QinceDealerQueryRequest;
/**
* @author : liqiulin
* @date : 2025-04-24 16
......@@ -10,4 +14,7 @@ public interface IQinceDealerQueryService {
void queryCusVisitRecord();
void updateQinceStore();
JSONArray queryDealer(QinceDealerQueryRequest request);
JSONArray queryAllDealer(QinceAllDealerQueryRequest request);
}
......@@ -2,10 +2,13 @@ package com.sfa.job.service.qince.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao;
import com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto;
import com.sfa.job.pojo.qince.request.QinceAllDealerQueryRequest;
import com.sfa.job.pojo.qince.request.QinceDealerQueryRequest;
import com.sfa.job.pojo.qince.response.QinceClienteleStoreDto;
import com.sfa.job.service.qince.IQinceDealerQueryService;
import com.sfa.job.util.QinCeUtils;
......@@ -146,4 +149,34 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService {
}
}
}
@Override
public JSONArray queryDealer(QinceDealerQueryRequest request) {
log.info("查询经销商列表,request:{}", request);
try {
Map<String, Object> params = new HashMap<>();
params.put("page", request.getPage() != null ? request.getPage() : 1);
params.put("rows", request.getRows() != null ? request.getRows() : 1000);
params.put("dealer_code", request.getDealer_code());
if (request.getDealer_code() != null && !request.getDealer_code().isEmpty()) {
params.put("dealer_code", request.getDealer_code());
}
return qinCeUtils.queryDealer(params);
} catch (Exception e) {
log.error("查询经销商列表异常:{}", e.getMessage(), e);
throw new RuntimeException("查询经销商列表异常:" + e.getMessage(), e);
}
}
@Override
public JSONArray queryAllDealer(QinceAllDealerQueryRequest request) {
log.info("查询所有经销商,request:{}", request);
try {
return qinCeUtils.queryAllDealer(request.getPageSize());
} catch (Exception e) {
log.error("查询所有经销商异常:{}", e.getMessage(), e);
throw new RuntimeException("查询所有经销商异常:" + e.getMessage(), e);
}
}
}
......@@ -62,7 +62,58 @@ public class QinCeUtils {
// 直营订单查询接口
public static final String QUERY_ORDER_DETAIL = "/api/dmsdatasearch/v1/getDmsPurchaseOrderInfos/";
// 查询经销商
public static final String QUERY_DEALER = "/api/dealer/v1/queryDealer/";
/**
* 调用勤策查询经销商接口
* @param params 查询参数Map
* @return 经销商数据JSON数组
* @throws Exception 接口调用异常
*/
public JSONArray queryDealer(Map<String, Object> params) throws Exception {
String url = builderUrl(QUERY_DEALER, params);
log.info("调用勤策查询经销商接口,URL:{},参数:{}", url, params);
return postArray(url, params);
}
/**
* 分页查询所有经销商(循环拉取直到无数据)
* @param pageSize 每页记录数(默认1000)
* @return 所有经销商数据
* @throws Exception 接口调用异常
*/
public JSONArray queryAllDealer(Integer pageSize) throws Exception {
JSONArray allDealers = new JSONArray();
int currentPage = 1;
int pageSizeValue = pageSize != null ? pageSize : 1000;
while (true) {
Map<String, Object> params = new HashMap<>();
params.put("page", currentPage);
params.put("rows", pageSizeValue);
String url = builderUrl(QUERY_DEALER, params);
log.info("查询经销商 - 第{}页,请求URL:{}", currentPage, url);
try {
JSONObject resp = postQC(url, params);
JSONArray pageData = resp.getJSONArray("response_data");
if (pageData == null || pageData.isEmpty()) {
log.info("经销商查询完成,共拉取{}页,总记录数:{}", currentPage - 1, allDealers.size());
break;
}
allDealers.addAll(pageData);
currentPage++;
} catch (Exception e) {
log.error("查询经销商第{}页失败", currentPage, e);
throw new RuntimeException("分页拉取经销商数据失败,页码:" + currentPage, e);
}
}
return allDealers;
}
public String builderUrl(String sidepath, Map<String, Object> params) {
String msgId = UUID.randomUUID().toString();
......
......@@ -78,6 +78,13 @@
scan_score,
api_goods_name,
batch_remark,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
actual_cost,
standard_cost,
sum_actual_cost,
sum_standard_cost,
create_by,
create_user_id,
update_by,
......@@ -161,6 +168,13 @@
#{item.scanScore},
#{item.apiGoodsName},
#{item.batchRemark},
#{item.fenxiaoNick},
#{item.fenxiaoId},
#{item.fenxiaoName},
#{item.actualCost},
#{item.standardCost},
#{item.sumActualCost},
#{item.sumStandardCost},
#{item.createBy},
#{item.createUserId},
#{item.updateBy},
......@@ -242,6 +256,13 @@
scan_score = VALUES(scan_score),
api_goods_name = VALUES(api_goods_name),
batch_remark = VALUES(batch_remark),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
actual_cost = VALUES(actual_cost),
standard_cost = VALUES(standard_cost),
sum_actual_cost = VALUES(sum_actual_cost),
sum_standard_cost = VALUES(sum_standard_cost),
update_by = VALUES(update_by),
update_user_id = VALUES(update_user_id),
update_time = VALUES(update_time)
......
......@@ -88,6 +88,8 @@
goods_total_amount,
modified,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
trade_label,
trade_from,
picklist_no,
......@@ -230,6 +232,8 @@
#{goodsTotalAmount},
#{modified},
#{fenxiaoNick},
#{fenxiaoId},
#{fenxiaoName},
#{tradeLabel},
#{tradeFrom},
#{picklistNo},
......@@ -371,6 +375,8 @@
goods_total_amount = VALUES(goods_total_amount),
modified = VALUES(modified),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
trade_label = VALUES(trade_label),
trade_from = VALUES(trade_from),
picklist_no = VALUES(picklist_no),
......@@ -513,6 +519,8 @@
goods_total_amount,
modified,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
trade_label,
trade_from,
picklist_no,
......@@ -657,6 +665,8 @@
#{item.goodsTotalAmount},
#{item.modified},
#{item.fenxiaoNick},
#{item.fenxiaoId},
#{item.fenxiaoName},
#{item.tradeLabel},
#{item.tradeFrom},
#{item.picklistNo},
......@@ -799,6 +809,8 @@
goods_total_amount = VALUES(goods_total_amount),
modified = VALUES(modified),
fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
trade_label = VALUES(trade_label),
trade_from = VALUES(trade_from),
picklist_no = VALUES(picklist_no),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论