提交 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; package com.sfa.job.domain.order.dao;
import com.sfa.job.domain.order.entity.FinanceOrder;
import com.sfa.job.domain.order.entity.WdtQimenOrder; import com.sfa.job.domain.order.entity.WdtQimenOrder;
import java.util.List; import java.util.List;
......
...@@ -15,7 +15,7 @@ import java.util.List; ...@@ -15,7 +15,7 @@ import java.util.List;
@Repository @Repository
public class WdtQimenStockoutOrderDaoImpl implements WdtQimenStockoutOrderDao { public class WdtQimenStockoutOrderDaoImpl implements WdtQimenStockoutOrderDao {
private static final int BATCH_SIZE = 100; // 分批大小,可根据实际情况调整 private static final int BATCH_SIZE = 20; // 分批大小,可根据实际情况调整
@Resource @Resource
private WdtQimenStockoutOrderMapper stockoutOrderMapper; private WdtQimenStockoutOrderMapper stockoutOrderMapper;
......
...@@ -347,7 +347,7 @@ public class WdtQimenStockoutOrder implements Serializable { ...@@ -347,7 +347,7 @@ public class WdtQimenStockoutOrder implements Serializable {
if (matcher.find()) { if (matcher.find()) {
return matcher.group(1); return matcher.group(1);
} }
return ""; return input;
} }
/** /**
...@@ -362,6 +362,6 @@ public class WdtQimenStockoutOrder implements Serializable { ...@@ -362,6 +362,6 @@ public class WdtQimenStockoutOrder implements Serializable {
if (matcher.find()) { if (matcher.find()) {
return matcher.group(1); return matcher.group(1);
} }
return ""; return input;
} }
} }
package com.sfa.job.domain.order.entity; package com.sfa.job.domain.order.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
...@@ -201,6 +199,17 @@ public class WdtQimenStockoutOrderDetail implements Serializable { ...@@ -201,6 +199,17 @@ public class WdtQimenStockoutOrderDetail implements Serializable {
/** 更新时间 */ /** 更新时间 */
private Date updateTime; private Date updateTime;
// 实际成本
private BigDecimal actualCost;
// 标准成本
private BigDecimal standardCost;
// 实际成本*num 实际总成本
private BigDecimal sumActualCost;
// 标准成本*num 标准总成本
private BigDecimal sumStandardCost;
/** /**
* 设置分销商ID和名称 * 设置分销商ID和名称
* 从fenxiaoNick中解析出fenxiaoId和fenxiaoName * 从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; ...@@ -5,7 +5,6 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.URLUtil; import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.qimencloud.api.DefaultQimenCloudClient; import com.qimencloud.api.DefaultQimenCloudClient;
import com.qimencloud.api.QimenCloudClient; import com.qimencloud.api.QimenCloudClient;
import com.sfa.common.core.exception.ServiceException; import com.sfa.common.core.exception.ServiceException;
......
...@@ -232,7 +232,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService { ...@@ -232,7 +232,7 @@ public class WdtQimenOrderSyncServiceImpl implements IWdtQimenOrderSyncService {
orderResult.addAll(typedOrderSubResult); orderResult.addAll(typedOrderSubResult);
} }
pageNo++; pageNo++;
} while (pageNo <= totalPage); } while (pageNo <= (totalPage - 1));
// 基础数据 直播间分类数据+成本、规格、口味 // 基础数据 直播间分类数据+成本、规格、口味
......
...@@ -22,6 +22,7 @@ import com.sfa.job.domain.order.entity.WdtQimenStockoutPositionDetail; ...@@ -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.WdtQimenStockoutLogisticsDetail;
import com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail; import com.sfa.job.domain.order.entity.WdtQimenStockOutPickPositionDetail;
import com.sfa.job.domain.order.entity.WdtQimenStockoutGovSubsidy; 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.SyncStockoutRequest;
import com.sfa.job.pojo.order.request.WdtStockoutSalesQueryWithDetailRequest; import com.sfa.job.pojo.order.request.WdtStockoutSalesQueryWithDetailRequest;
import com.sfa.job.pojo.order.response.WdtQimenStockoutBodyDto; import com.sfa.job.pojo.order.response.WdtQimenStockoutBodyDto;
...@@ -33,6 +34,7 @@ import com.sfa.job.pojo.response.SyncOrderDetailDto; ...@@ -33,6 +34,7 @@ import com.sfa.job.pojo.response.SyncOrderDetailDto;
import com.sfa.job.service.order.IWdtQimenStockoutOrderSyncService; import com.sfa.job.service.order.IWdtQimenStockoutOrderSyncService;
import com.sfa.job.enums.WdtPlatformMappingEnum; import com.sfa.job.enums.WdtPlatformMappingEnum;
import com.sfa.job.util.WdtQimenUtil; import com.sfa.job.util.WdtQimenUtil;
import com.sfa.job.domain.order.dao.FinianceBaseProductDao;
import com.taobao.api.ApiException; import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
...@@ -40,9 +42,11 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -40,9 +42,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 销售出库单同步服务实现 * 销售出库单同步服务实现
...@@ -76,6 +80,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr ...@@ -76,6 +80,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
@Autowired @Autowired
CollectOrderLogDao orderLogInfoDao; CollectOrderLogDao orderLogInfoDao;
@Autowired
FinianceBaseProductDao baseProductDao;
// @Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
@Override @Override
public SyncOrderDetailDto syncStockoutOrder(SyncStockoutRequest syncStockoutRequest,Integer pageSize) { public SyncOrderDetailDto syncStockoutOrder(SyncStockoutRequest syncStockoutRequest,Integer pageSize) {
...@@ -195,6 +202,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr ...@@ -195,6 +202,9 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
totalCount = wdtQimenDataDto.getTotalCount(); totalCount = wdtQimenDataDto.getTotalCount();
wdtTotalPage = totalCount / wdtPageSize + 1; wdtTotalPage = totalCount / wdtPageSize + 1;
// 基础数据 成本数据
Map<String, FinanceBaseProduct> baseProductMap = baseProductDao.selectBaseProduct();
List<WdtQimenStockoutOrder> stockoutOrderSubList = wdtQimenDataDto.getOrder(); List<WdtQimenStockoutOrder> stockoutOrderSubList = wdtQimenDataDto.getOrder();
List<WdtQimenStockoutOrder> pageOrderList = new ArrayList<>(); List<WdtQimenStockoutOrder> pageOrderList = new ArrayList<>();
List<WdtQimenStockoutOrderDetail> pageDetailList = new ArrayList<>(); List<WdtQimenStockoutOrderDetail> pageDetailList = new ArrayList<>();
...@@ -236,6 +246,19 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr ...@@ -236,6 +246,19 @@ public class WdtQimenStockoutOrderSyncServiceImpl implements IWdtQimenStockoutOr
detail.setFenxiaoIdAndName(); detail.setFenxiaoIdAndName();
// 设置平台名称 // 设置平台名称
detail.setPlatformName(stockoutOrder.getPlatformName()); 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); pageDetailList.add(detail);
totalDetailCount++; totalDetailCount++;
......
package com.sfa.job.service.qince; 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 * @author : liqiulin
* @date : 2025-04-24 16 * @date : 2025-04-24 16
...@@ -10,4 +14,7 @@ public interface IQinceDealerQueryService { ...@@ -10,4 +14,7 @@ public interface IQinceDealerQueryService {
void queryCusVisitRecord(); void queryCusVisitRecord();
void updateQinceStore(); void updateQinceStore();
JSONArray queryDealer(QinceDealerQueryRequest request);
JSONArray queryAllDealer(QinceAllDealerQueryRequest request);
} }
...@@ -2,10 +2,13 @@ package com.sfa.job.service.qince.impl; ...@@ -2,10 +2,13 @@ package com.sfa.job.service.qince.impl;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao; import com.sfa.job.domain.feishu.dao.IQinceMarketEmployeeDao;
import com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao; import com.sfa.job.domain.qince.dao.IQinceClienteleStoreDao;
import com.sfa.job.pojo.feishu.response.QinceMarketEmployeeDto; 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.pojo.qince.response.QinceClienteleStoreDto;
import com.sfa.job.service.qince.IQinceDealerQueryService; import com.sfa.job.service.qince.IQinceDealerQueryService;
import com.sfa.job.util.QinCeUtils; import com.sfa.job.util.QinCeUtils;
...@@ -146,4 +149,34 @@ public class QinceDealerQueryServiceImpl implements IQinceDealerQueryService { ...@@ -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 { ...@@ -62,7 +62,58 @@ public class QinCeUtils {
// 直营订单查询接口 // 直营订单查询接口
public static final String QUERY_ORDER_DETAIL = "/api/dmsdatasearch/v1/getDmsPurchaseOrderInfos/"; 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) { public String builderUrl(String sidepath, Map<String, Object> params) {
String msgId = UUID.randomUUID().toString(); String msgId = UUID.randomUUID().toString();
......
...@@ -78,6 +78,13 @@ ...@@ -78,6 +78,13 @@
scan_score, scan_score,
api_goods_name, api_goods_name,
batch_remark, batch_remark,
fenxiao_nick,
fenxiao_id,
fenxiao_name,
actual_cost,
standard_cost,
sum_actual_cost,
sum_standard_cost,
create_by, create_by,
create_user_id, create_user_id,
update_by, update_by,
...@@ -161,6 +168,13 @@ ...@@ -161,6 +168,13 @@
#{item.scanScore}, #{item.scanScore},
#{item.apiGoodsName}, #{item.apiGoodsName},
#{item.batchRemark}, #{item.batchRemark},
#{item.fenxiaoNick},
#{item.fenxiaoId},
#{item.fenxiaoName},
#{item.actualCost},
#{item.standardCost},
#{item.sumActualCost},
#{item.sumStandardCost},
#{item.createBy}, #{item.createBy},
#{item.createUserId}, #{item.createUserId},
#{item.updateBy}, #{item.updateBy},
...@@ -242,6 +256,13 @@ ...@@ -242,6 +256,13 @@
scan_score = VALUES(scan_score), scan_score = VALUES(scan_score),
api_goods_name = VALUES(api_goods_name), api_goods_name = VALUES(api_goods_name),
batch_remark = VALUES(batch_remark), 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_by = VALUES(update_by),
update_user_id = VALUES(update_user_id), update_user_id = VALUES(update_user_id),
update_time = VALUES(update_time) update_time = VALUES(update_time)
......
...@@ -88,6 +88,8 @@ ...@@ -88,6 +88,8 @@
goods_total_amount, goods_total_amount,
modified, modified,
fenxiao_nick, fenxiao_nick,
fenxiao_id,
fenxiao_name,
trade_label, trade_label,
trade_from, trade_from,
picklist_no, picklist_no,
...@@ -230,6 +232,8 @@ ...@@ -230,6 +232,8 @@
#{goodsTotalAmount}, #{goodsTotalAmount},
#{modified}, #{modified},
#{fenxiaoNick}, #{fenxiaoNick},
#{fenxiaoId},
#{fenxiaoName},
#{tradeLabel}, #{tradeLabel},
#{tradeFrom}, #{tradeFrom},
#{picklistNo}, #{picklistNo},
...@@ -371,6 +375,8 @@ ...@@ -371,6 +375,8 @@
goods_total_amount = VALUES(goods_total_amount), goods_total_amount = VALUES(goods_total_amount),
modified = VALUES(modified), modified = VALUES(modified),
fenxiao_nick = VALUES(fenxiao_nick), fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
trade_label = VALUES(trade_label), trade_label = VALUES(trade_label),
trade_from = VALUES(trade_from), trade_from = VALUES(trade_from),
picklist_no = VALUES(picklist_no), picklist_no = VALUES(picklist_no),
...@@ -513,6 +519,8 @@ ...@@ -513,6 +519,8 @@
goods_total_amount, goods_total_amount,
modified, modified,
fenxiao_nick, fenxiao_nick,
fenxiao_id,
fenxiao_name,
trade_label, trade_label,
trade_from, trade_from,
picklist_no, picklist_no,
...@@ -657,6 +665,8 @@ ...@@ -657,6 +665,8 @@
#{item.goodsTotalAmount}, #{item.goodsTotalAmount},
#{item.modified}, #{item.modified},
#{item.fenxiaoNick}, #{item.fenxiaoNick},
#{item.fenxiaoId},
#{item.fenxiaoName},
#{item.tradeLabel}, #{item.tradeLabel},
#{item.tradeFrom}, #{item.tradeFrom},
#{item.picklistNo}, #{item.picklistNo},
...@@ -799,6 +809,8 @@ ...@@ -799,6 +809,8 @@
goods_total_amount = VALUES(goods_total_amount), goods_total_amount = VALUES(goods_total_amount),
modified = VALUES(modified), modified = VALUES(modified),
fenxiao_nick = VALUES(fenxiao_nick), fenxiao_nick = VALUES(fenxiao_nick),
fenxiao_id = VALUES(fenxiao_id),
fenxiao_name = VALUES(fenxiao_name),
trade_label = VALUES(trade_label), trade_label = VALUES(trade_label),
trade_from = VALUES(trade_from), trade_from = VALUES(trade_from),
picklist_no = VALUES(picklist_no), picklist_no = VALUES(picklist_no),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论