Browse Source

线程池优化

其他BUG优化
cangku
wangfukang 2 years ago
parent
commit
44b6383e5c
  1. 9
      hiver-core/src/main/java/cc/hiver/core/base/HiverBasePageQuery.java
  2. 4
      hiver-core/src/main/java/cc/hiver/core/serviceimpl/LogiticsCompanyServiceImpl.java
  3. 57
      hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
  4. 12
      hiver-core/src/main/java/cc/hiver/core/vo/WorkerQueryVO.java
  5. 8
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadPoolConfiguration.java
  6. 3
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java
  7. 19
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PurchaseController.java
  8. 34
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java
  9. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseMapper.java
  10. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/DeductLogService.java
  11. 53
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/impl/DeductLogServiceImpl.java
  12. 16
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java
  13. 18
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/OrderService.java
  14. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseService.java
  15. 13
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleService.java
  16. 19
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/OrderServiceImpl.java
  17. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java
  18. 23
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseServiceImpl.java
  19. 50
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleServiceImpl.java
  20. 14
      hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseDetailMapper.xml
  21. 19
      hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseMapper.xml
  22. 5
      hiver-modules/hiver-mall/src/main/resources/mapper/SaleMapper.xml
  23. 12
      hiver-modules/hiver-mall/src/main/resources/mapper/StockLogMapper.xml

9
hiver-core/src/main/java/cc/hiver/core/base/HiverBasePageQuery.java

@ -30,4 +30,13 @@ public class HiverBasePageQuery {
@ApiModelProperty(value = "每页记录数", example = "10")
private int pageSize = 10;
/**
* 排序字段
*/
@ApiModelProperty("排序字段")
private String sort;
@ApiModelProperty("排序方式")
private String order;
}

4
hiver-core/src/main/java/cc/hiver/core/serviceimpl/LogiticsCompanyServiceImpl.java

@ -65,12 +65,16 @@ public class LogiticsCompanyServiceImpl implements LogiticsCompanyService {
Path<String> contactsField = root.get("contacts");
Path<String> mobileField = root.get("mobile");
Path<String> delFlagField = root.get("delFlag");
Path<String> isOnLineField = root.get("isOnLine");
List<Predicate> list = new ArrayList<>();
if (StrUtil.isNotBlank(company.getSignCompany())) {
list.add(cb.equal(signCompanyField, company.getSignCompany() ));
}
if (company.getIsOnLine() != null) {
list.add(cb.equal(isOnLineField, company.getIsOnLine() ));
}
if (StrUtil.isNotBlank(company.getCompanyName())) {
list.add(cb.like(companyNameField, '%' + company.getCompanyName() + '%'));

57
hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java

@ -65,6 +65,7 @@ public class WorkerServiceImpl implements WorkerService {
final Path<Date> createTimeField = root.get("createTime");
final Path<Date> signPersonField = root.get("signPerson");
final Path<String> ownerCompanyField = root.get("ownerCompany");
final Path<String> isOnLineField = root.get("isOnLine");
final List<Predicate> list = new ArrayList<>();
@ -84,21 +85,36 @@ public class WorkerServiceImpl implements WorkerService {
// 状态
if (worker.getWorkerStatus() != null) {
list.add(cb.equal(workerStatusField, worker.getWorkerStatus()));
}else{
// 禁用标识
list.add(cb.equal(workerStatusField, 1));
}
if (CharSequenceUtil.isNotEmpty(worker.getSignPerson())) {
list.add(cb.equal(signPersonField, worker.getSignPerson()));
//如果是快递公司,则只能选择归属公司,否则不限制
if ("2".equals(worker.getSignPerson()) && CharSequenceUtil.isNotEmpty(worker.getOwnerCompany())) {
final String[] transCompany = worker.getOwnerCompany().trim().split(",");
list.add(ownerCompanyField.in(transCompany));
}
// 上下线状态
if (worker.getIsOnLine() != null) {
list.add(cb.equal(isOnLineField, worker.getIsOnLine()));
}
// 不传公司名称,查询拉包工,传的话查询该快递公司下的快递员
if (StringUtils.isNotEmpty(worker.getOwnerCompany())) {
list.add(cb.like(ownerCompanyField, '%' + worker.getOwnerCompany() + '%'));
} else {
list.add(cb.equal(signPersonField, WorkerConstant.SIGN_PERSON[0]));
// 后台管理系统,只会查询快递员或者拉包工,其他不限制
if("1".equals(worker.getAdminFlag())){
if (CharSequenceUtil.isNotEmpty(worker.getSignPerson())) {
list.add(cb.equal(signPersonField, worker.getSignPerson()));
}
}else{
if (CharSequenceUtil.isNotEmpty(worker.getSignPerson())) {
list.add(cb.equal(signPersonField, worker.getSignPerson()));
//如果是快递公司,则只能选择归属公司,否则不限制
if ("2".equals(worker.getSignPerson()) && CharSequenceUtil.isNotEmpty(worker.getOwnerCompany())) {
final String[] transCompany = worker.getOwnerCompany().trim().split(",");
list.add(ownerCompanyField.in(transCompany));
}
}
// 不传公司名称,查询拉包工,传的话查询该快递公司下的快递员
if (StringUtils.isNotEmpty(worker.getOwnerCompany())) {
list.add(cb.like(ownerCompanyField, '%' + worker.getOwnerCompany() + '%'));
} else {
list.add(cb.equal(signPersonField, WorkerConstant.SIGN_PERSON[0]));
}
}
// 模糊搜素
@ -114,12 +130,21 @@ public class WorkerServiceImpl implements WorkerService {
}
// 数据权限
// 禁用标识
list.add(cb.equal(workerStatusField, 1));
// 上线状态
final Predicate[] arr = new Predicate[list.size()];
cq.where(list.toArray(arr));
cq.orderBy(cb.desc(root.<Integer>get("isOnLine")),cb.asc(root.<String>get("workerName")));
// 排序
if(StringUtils.isNotEmpty(worker.getSort()) && StringUtils.isNotEmpty(worker.getOrder())){
if("desc".equals(worker.getOrder())){
cq.orderBy(cb.desc(root.<Integer>get(worker.getSort())));
}else{
cq.orderBy(cb.asc(root.<Integer>get(worker.getSort())));
}
}else{
cq.orderBy(cb.desc(root.<Integer>get("isOnLine")),cb.asc(root.<String>get("workerName")));
}
return null;
}
}, pageable);

12
hiver-core/src/main/java/cc/hiver/core/vo/WorkerQueryVO.java

@ -51,6 +51,12 @@ public class WorkerQueryVO extends HiverBasePageQuery {
@ApiModelProperty("接单状态 1-可抢单 2-不可接单(押金不足状态) 3-已禁用(手工预置状态)")
private Integer workerStatus;
/**
* 上下线状态0下线1上线
*/
@ApiModelProperty("上下线状态:0:下线;1:上线")
private Integer isOnLine;
/**
* 联系方式
*/
@ -93,4 +99,10 @@ public class WorkerQueryVO extends HiverBasePageQuery {
@ApiModelProperty("结束时间")
private String endDate;
/**
* 后台管理系统标识
*/
@ApiModelProperty("后台管理系统标识")
private String adminFlag;
}

8
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/config/thread/ThreadPoolConfiguration.java

@ -3,7 +3,6 @@ package cc.hiver.mall.config.thread;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.util.concurrent.ThreadPoolExecutor;
@ -14,17 +13,16 @@ import java.util.concurrent.ThreadPoolExecutor;
* @date 2023/3/24 10:03
**/
@Configuration
@Component
public class ThreadPoolConfiguration {
/**
* 核心线程池大小-32
**/
private int corePoolSize = 10;
private int corePoolSize = 20;
/**
* 最大可创建的线程数-50
**/
private int maxPoolSize = 50;
private int maxPoolSize = 100;
/**
* 线程池维护线程所允许的空闲时间-60
**/
@ -32,7 +30,7 @@ public class ThreadPoolConfiguration {
/**
* 队列最大长度-100
**/
private int queueCapacity = 100;
private int queueCapacity = 200;
@Bean(name = "threadPoolTaskExecutor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {

3
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java

@ -356,7 +356,8 @@ public class OrderController {
final String transCompanyId = sale.getTransCompany();
final String shopId = sale.getShopId();
final String saleId = sale.getId();
deductLogService.updateRebateAmount(workId, transCompanyId, shopId, saleId);
String transportType = sale.getTransportType();
deductLogService.updateRebateAmount(workId, transCompanyId, shopId, saleId,transportType);
}
} else {

19
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/PurchaseController.java

@ -1,5 +1,6 @@
package cc.hiver.mall.controller;
import cc.hiver.core.common.constant.CommonConstant;
import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.utils.StringUtils;
@ -89,14 +90,16 @@ public class PurchaseController {
@RequestMapping(value = "/delById", method = RequestMethod.POST)
@ApiOperation("根据id删除采购单")
public Result delete(Purchase purchase) {
final boolean result = purchaseService.removeById(purchase);
if (result) {
public Result delete(String id) {
try {
purchaseService.deleteById(id);
// 删除采购单明细
purchaseDetailService.deleteByPurchaseId(purchase.getId());
purchaseDetailService.deleteByPurchaseId(id);
return ResultUtil.error("删除成功!");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResultUtil.error("删除失败");
}
return ResultUtil.error("删除失败");
}
@RequestMapping(value = "/list", method = RequestMethod.POST)
@ -107,6 +110,7 @@ public class PurchaseController {
Page<Purchase> page = null;
final QueryWrapper<Purchase> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("shop_id", shopId);
queryWrapper.eq("del_flag", CommonConstant.STATUS_NORMAL);
if (!ObjectUtils.isEmpty(purchasePageQuery)) {
if (!StringUtils.isEmpty(purchasePageQuery.getId())) {
queryWrapper.eq("id", purchasePageQuery.getId());
@ -150,7 +154,7 @@ public class PurchaseController {
// shopId从缓存中设置
final String shopId = securityUtil.getShopId();
purchasePageQuery.setShopId(shopId);
final Page<Purchase> purchasePage = purchaseService.getPurchaseList(purchasePageQuery);
final Page<Purchase> purchasePage = purchaseService.getPurchaseList(purchasePageQuery);
return new ResultUtil<Page<Purchase>>().setData(purchasePage);
}
@ -160,6 +164,7 @@ public class PurchaseController {
public Result getPurchaseDetailByBarcode(String barcode) {
final QueryWrapper<PurchaseDetail> queryWrapper = new QueryWrapper<>();
if (!ObjectUtils.isEmpty(barcode)) {
queryWrapper.eq("del_flag", CommonConstant.STATUS_NORMAL);
queryWrapper.eq("barcode", barcode);
final List<PurchaseDetail> list = purchaseDetailService.list(queryWrapper);
if (list != null && list.size() > 0) {
@ -186,6 +191,7 @@ public class PurchaseController {
// shopId从缓存中设置
final String shopId = securityUtil.getShopId();
final QueryWrapper<Purchase> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("del_flag", CommonConstant.STATUS_NORMAL);
queryWrapper.gt("no_pay", 0);
queryWrapper.eq("supplier_id", supplierId);
queryWrapper.eq("shop_id", shopId);
@ -246,6 +252,7 @@ public class PurchaseController {
final String shopId = securityUtil.getShopId();
final QueryWrapper<Purchase> querySaleWrapper = new QueryWrapper<>();
querySaleWrapper.eq("shop_id", shopId)
.eq("del_flag",CommonConstant.STATUS_NORMAL)
.eq("in_storage_status", StockConstant.IN_STORAGE_STATUS[0]);
final long waitReturnCount = purchaseService.count(querySaleWrapper);
return ResultUtil.data(waitReturnCount);

34
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java

@ -956,13 +956,14 @@ public class SaleController {
*/
@RequestMapping(value = "/buyAiSync", method = RequestMethod.POST)
@ApiOperation("异步Ai开单")
public Result buyAiSync(String aiMsg,String saleId) {
public Result buyAiSync(String aiMsg, String saleId) {
if (StringUtils.isEmpty(aiMsg)) {
ResultUtil.error("指令不能为空!");
}if (StringUtils.isEmpty( saleId)) {
}
if (StringUtils.isEmpty(saleId)) {
ResultUtil.error("订单id不能为空!");
}
saleService.buyAiSync(aiMsg,saleId);
saleService.buyAiSync(aiMsg, saleId);
return ResultUtil.success("取货成功!");
}
@ -976,4 +977,31 @@ public class SaleController {
final JSONObject jsonObject = saleService.buyAi(aiMsg);
return new ResultUtil<JSONObject>().setData(jsonObject);
}
/**
* 物流公司转单
*
* @param saleId 订单id
* @param companyId 物流公司id
* @return Result
* @author 王富康
* @date 2024/4/27
*/
@RequestMapping(value = "/changeCompany", method = RequestMethod.POST)
@ApiOperation("物流公司转单")
public Result changeCompany(String saleId, String companyId) {
if (StringUtils.isEmpty(saleId)) {
ResultUtil.error("订单id不能为空!");
}
if (StringUtils.isEmpty(companyId)) {
ResultUtil.error("物流公司id不能为空!");
}
try {
saleService.changeCompany(saleId, companyId);
return ResultUtil.success("转单成功");
} catch (Exception e) {
log.error(e.getMessage(), e);
return ResultUtil.error("转单失败!");
}
}
}

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/dao/mapper/PurchaseMapper.java

@ -44,4 +44,6 @@ public interface PurchaseMapper extends BaseMapper<Purchase> {
BigDecimal getPurchasingCost(@Param("shopId")String shopId, @Param("startTime")String startTime, @Param("endTime")String endTime);
void updateInStorageStatus(@Param("id")String id,@Param("inStorageStatus") int inStorageStatus);
void deleteByPurchaseId(@Param("id") String id);
}

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/DeductLogService.java

@ -51,7 +51,7 @@ public interface DeductLogService {
* @author 王富康
* @date 2024/2/26
*/
void updateRebateAmount(String workId, String transCompanyId, String shopId, String saleId);
void updateRebateAmount(String workId, String transCompanyId, String shopId, String saleId,String transportType);
String getAllRebateAmountByShopId(String shopId);
}

53
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/deductlog/service/impl/DeductLogServiceImpl.java

@ -1,5 +1,6 @@
package cc.hiver.mall.deductlog.service.impl;
import cc.hiver.core.common.constant.SaleConstant;
import cc.hiver.core.entity.LogiticsCompany;
import cc.hiver.core.entity.Worker;
import cc.hiver.core.service.LogiticsCompanyService;
@ -107,7 +108,7 @@ public class DeductLogServiceImpl extends ServiceImpl<DeductLogMapper, DeductLog
* @date 2024/2/18
*/
@Override
public void updateRebateAmount(String workId, String transCompanyId, String shopId, String saleId) {
public void updateRebateAmount(String workId, String transCompanyId, String shopId, String saleId,String transportType) {
// 如果只选物流,就不需要拉包工返佣
BigDecimal workerRebateAmount = BigDecimal.valueOf(0);
@ -115,7 +116,8 @@ public class DeductLogServiceImpl extends ServiceImpl<DeductLogMapper, DeductLog
BigDecimal workerBefDepoBal = BigDecimal.valueOf(0);
BigDecimal workerAfterDepoBal = BigDecimal.valueOf(0);
Worker worker = null;
if (StringUtils.isNotEmpty(workId)) {
// 20240427 拼包transport_type=3,不用更新拉包工余额
if (StringUtils.isNotEmpty(workId) && !SaleConstant.TRANSPORT_TYPE[3].equals(transportType)) {
// 获取拉包工信息
worker = workerService.findById(workId);
// 配送人员扣减固定金额
@ -136,23 +138,27 @@ public class DeductLogServiceImpl extends ServiceImpl<DeductLogMapper, DeductLog
}
// 获取物流公司信息
final LogiticsCompany logiticsCompany = companyService.findById(transCompanyId);
BigDecimal companyRebateAmount = BigDecimal.valueOf(0);
String companyName = "";
BigDecimal companyFixedAmount = BigDecimal.valueOf(0);
BigDecimal companyDepoBal = BigDecimal.valueOf(0);
BigDecimal companyAfterDepoBal = BigDecimal.valueOf(0);
if (logiticsCompany != null) {
companyName = logiticsCompany.getCompanyName();
companyRebateAmount = logiticsCompany.getRebateAmount() == null ? BigDecimal.valueOf(0) : logiticsCompany.getRebateAmount();
companyFixedAmount = logiticsCompany.getFixedAmount() == null ? BigDecimal.valueOf(0) : logiticsCompany.getFixedAmount();
companyDepoBal = logiticsCompany.getDepoBal() == null ? BigDecimal.valueOf(0) : logiticsCompany.getDepoBal();
// 物流公司扣减后押金余额
companyAfterDepoBal = companyDepoBal.subtract(companyFixedAmount);
logiticsCompany.setDepoBal(companyAfterDepoBal);
// 更新物流公司押金余额
if(companyFixedAmount.compareTo(BigDecimal.valueOf(0))>0){
companyService.update(logiticsCompany);
String companyName = "";
LogiticsCompany logiticsCompany = null;
// 拼单不会有物流公司信息,
if(StringUtils.isNotEmpty(transCompanyId)){
logiticsCompany = companyService.findById(transCompanyId);
if (logiticsCompany != null) {
companyName = logiticsCompany.getCompanyName();
companyRebateAmount = logiticsCompany.getRebateAmount() == null ? BigDecimal.valueOf(0) : logiticsCompany.getRebateAmount();
companyFixedAmount = logiticsCompany.getFixedAmount() == null ? BigDecimal.valueOf(0) : logiticsCompany.getFixedAmount();
companyDepoBal = logiticsCompany.getDepoBal() == null ? BigDecimal.valueOf(0) : logiticsCompany.getDepoBal();
// 物流公司扣减后押金余额
companyAfterDepoBal = companyDepoBal.subtract(companyFixedAmount);
logiticsCompany.setDepoBal(companyAfterDepoBal);
// 更新物流公司押金余额
if(companyFixedAmount.compareTo(BigDecimal.valueOf(0))>0){
companyService.update(logiticsCompany);
}
}
}
@ -175,14 +181,15 @@ public class DeductLogServiceImpl extends ServiceImpl<DeductLogMapper, DeductLog
final DeductLog deductLog = new DeductLog();
deductLog.setCreateTime(new Date());
deductLog.setSaleId(saleId);
deductLog.setCompanyId(transCompanyId);
deductLog.setCompanyName(companyName);
deductLog.setCompanyFixedAmount(companyFixedAmount);
deductLog.setCompanyRebateAmount(companyRebateAmount);
deductLog.setCompanyBefDepoBal(companyDepoBal);
deductLog.setCompanyAfterDepoBal(companyAfterDepoBal);
if (StringUtils.isNotEmpty(workId) && worker != null) {
if(StringUtils.isNotEmpty(transCompanyId) && logiticsCompany != null){
deductLog.setCompanyId(transCompanyId);
deductLog.setCompanyName(companyName);
deductLog.setCompanyFixedAmount(companyFixedAmount);
deductLog.setCompanyRebateAmount(companyRebateAmount);
deductLog.setCompanyBefDepoBal(companyDepoBal);
deductLog.setCompanyAfterDepoBal(companyAfterDepoBal);
}
if (StringUtils.isNotEmpty(workId) && worker != null && !SaleConstant.TRANSPORT_TYPE[3].equals(transportType)) {
// 选择了拉包工,那么就需要返佣
deductLog.setWorkerId(worker.getWorkerId());
deductLog.setWorkerName(worker.getWorkerName());

16
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java

@ -4,6 +4,7 @@ import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.entity.User;
import cc.hiver.mall.common.constant.PurchaseConstant;
import cc.hiver.mall.config.thread.AiPurchaseThread;
import cc.hiver.mall.config.thread.ThreadPoolConfiguration;
import cc.hiver.mall.entity.Purchase;
import cc.hiver.mall.entity.Shop;
import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
@ -28,7 +29,7 @@ import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.concurrent.*;
import java.util.concurrent.CopyOnWriteArrayList;
@Slf4j
@Service
@ -55,6 +56,9 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
@Autowired
private PurchaseDetailService purchaseDetailService;
@Autowired
private ThreadPoolConfiguration threadPoolConfiguration;
@Override
public JSONObject batchSave(PurchaseOciPictureAddVo purchaseOciPictureAddVo) {
final JSONObject jsonObject = new JSONObject();
@ -110,18 +114,10 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
// 异步处理ocr识别
try {
AiPurchaseThread timerThread;
final ExecutorService service = new ThreadPoolExecutor(
10,
50,
60,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(3),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());
for (PurchaseOcrPicture purchaseOcrPicture : purchaseOcrPictureAddList) {
timerThread = new AiPurchaseThread(purchaseId, purchaseOcrPicture, purchaseOcrPictureService, productService, purchaseDetailService, purchaseService);
// 这里可以使用线程池,也可以使用CompletionService处理,运行任务需要是callable的,需要最终结果。
service.submit(timerThread);
threadPoolConfiguration.threadPoolTaskExecutor().execute(timerThread);
}
} catch (Exception e) {
log.error("异步处理ocr识别失败", e);

18
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/OrderService.java

@ -40,17 +40,31 @@ public interface OrderService extends HiverBaseService<OrderXd, String> {
/**
* 转单接口
*
* @param orderXd
* @author 王富康
* @date 2024/2/27
* @param orderXd
*/
void transferOrder(OrderVO orderXd);
/**
* 获取当前所有拉包工身上的订单数量
*
* @return Map<Integer>
* @author 王富康
* @date 2024/2/27
* @return Map<Integer>
*/
Map<String, Integer> findWorkerOrderCount(List<String> workerIdList);
/**
* 物流转单更新订单公司信息
*
* @param saleId 订单id
* @param companyId 物流公司id
* @param mobile 物流公司联系方式
* @param companyName 物流公司名称
* @author 王富康
* @date 2024/4/27
*/
void changeCompany(String saleId, String companyId, String mobile, String companyName);
}

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/PurchaseService.java

@ -41,4 +41,6 @@ public interface PurchaseService extends IService<Purchase> {
PurchaseVo getPurchaseAllDataOfAi(String id);
void updateInStorageStatus(String id,int inStorageStatus);
void deleteById(String id);
}

13
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/SaleService.java

@ -51,11 +51,22 @@ public interface SaleService extends IService<Sale> {
void companyGetSale(String saleId);
void buyAiSync(String aiMsg,String saleId);
void buyAiSync(String aiMsg, String saleId);
JSONObject buyAi(String aiMsg);
void updateAiFlag(String id, Integer status);
void updateStatus(String id, Integer status);
/**
* 物流公司转单
*
* @param saleId 订单id
* @param companyId 物流公司id
* @return Result
* @author 王富康
* @date 2024/4/27
*/
void changeCompany(String saleId, String companyId);
}

19
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/OrderServiceImpl.java

@ -291,6 +291,25 @@ public class OrderServiceImpl implements OrderService {
return orderDao.findWorkerOrderCount(workerIdList);
}
/**
* 物流转单更新订单公司信息
*
* @param saleId 订单id
* @param companyId 物流公司id
* @param mobile 物流公司联系方式
* @param companyName 物流公司名称
* @author 王富康
* @date 2024/4/27
*/
@Override
public void changeCompany(String saleId, String companyId, String mobile, String companyName) {
final OrderXd oldOrderXd = orderDao.findByOrderId(saleId);
oldOrderXd.setTransCompany(companyId);
oldOrderXd.setTransCompanyPhone(mobile);
oldOrderXd.setCompanyName(companyName);
orderDao.saveAndFlush(oldOrderXd);
}
@Override
public List<OrderXd> findByCondition(OrderXd order) {
return orderDao.findAll(new Specification<OrderXd>() {

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SalesAndDetailsServiceImpl.java

@ -226,7 +226,7 @@ public class SalesAndDetailsServiceImpl implements SalesAndDetailsService {
// 自送如果选择了物流公司,也需要物流公司返佣
// 选择物流公司才返佣,否则是没有选择物流公司的自提
if(StringUtils.isNotEmpty(sale.getTransCompany())){
deductLogService.updateRebateAmount("", sale.getTransCompany(), sale.getShopId(), sale.getId());
deductLogService.updateRebateAmount("", sale.getTransCompany(), sale.getShopId(), sale.getId(),sale.getTransportType());
}
} else if(SaleConstant.MODE_OF_SERVICE[2].equals(sale.getModeOfService())){
// 物流自提

23
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/PurchaseServiceImpl.java

@ -362,14 +362,16 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
final String detailId = stockLog.getDetailId();
final PurchaseDetail purchaseDetail = purchaseDetailIdDataMap.get(detailId);
String purchaseDetailMapKey = "";
if (StringUtils.isNotEmpty(purchaseDetail.getProductId())) {
purchaseDetailMapKey = purchaseDetail.getProductId();
} else if (StringUtils.isNotEmpty(purchaseDetail.getProductSn())) {
purchaseDetailMapKey = purchaseDetail.getProductSn();
} else if (StringUtils.isNotEmpty(purchaseDetail.getProductName())) {
purchaseDetailMapKey = purchaseDetail.getProductName();
}else{
purchaseDetailMapKey = purchaseDetail.getId();
if(purchaseDetail != null){
if (StringUtils.isNotEmpty(purchaseDetail.getProductId())) {
purchaseDetailMapKey = purchaseDetail.getProductId();
} else if (StringUtils.isNotEmpty(purchaseDetail.getProductSn())) {
purchaseDetailMapKey = purchaseDetail.getProductSn();
} else if (StringUtils.isNotEmpty(purchaseDetail.getProductName())) {
purchaseDetailMapKey = purchaseDetail.getProductName();
}else{
purchaseDetailMapKey = purchaseDetail.getId();
}
}
final String mapKey = productId == null ? purchaseDetailMapKey : productId;
@ -435,4 +437,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
public void updateInStorageStatus(String id, int inStorageStatus) {
purchaseMapper.updateInStorageStatus(id, inStorageStatus);
}
@Override
public void deleteById(String id) {
purchaseMapper.deleteByPurchaseId(id);
}
}

50
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/SaleServiceImpl.java

@ -5,7 +5,9 @@ import cc.hiver.core.common.constant.SaleConstant;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.utils.StringUtils;
import cc.hiver.core.common.utils.ThreadPoolUtil;
import cc.hiver.core.entity.LogiticsCompany;
import cc.hiver.core.entity.User;
import cc.hiver.core.service.LogiticsCompanyService;
import cc.hiver.mall.common.constant.StockConstant;
import cc.hiver.mall.config.thread.AiSaleThread;
import cc.hiver.mall.dao.mapper.SaleMapper;
@ -19,6 +21,7 @@ import cc.hiver.mall.pojo.vo.*;
import cc.hiver.mall.saleaimsg.constant.SaleAiMsgConstant;
import cc.hiver.mall.saleaimsg.entity.SaleAiMsg;
import cc.hiver.mall.saleaimsg.service.SaleAiMsgService;
import cc.hiver.mall.service.OrderService;
import cc.hiver.mall.service.mybatis.*;
import cc.hiver.mall.utils.AliOcrUtil;
import cc.hiver.mall.utils.DateUtil;
@ -83,6 +86,12 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa
@Autowired
private SaleAiMsgService saleAiMsgService;
@Autowired
private LogiticsCompanyService logiticsCompanyService;
@Autowired
private OrderService orderService;
@Override
public void editPayPrice(String id, BigDecimal price, String dealingsWay) {
// 修改采购单、实付、未付金额
@ -495,8 +504,8 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa
public Page<SaleNoWorkerVO> getSaleByCompanyId(SalePageQuery salePageQuery) {
final Page<SaleNoWorkerVO> page = new Page<>(salePageQuery.getPageNum(), salePageQuery.getPageSize());
//结束时间-1天
if(StringUtils.isNotEmpty(salePageQuery.getEndDate())){
String endDate = DateUtil.addDay(salePageQuery.getEndDate(), 1);
if (StringUtils.isNotEmpty(salePageQuery.getEndDate())) {
final String endDate = DateUtil.addDay(salePageQuery.getEndDate(), 1);
salePageQuery.setEndDate(endDate);
}
final Page<SaleNoWorkerVO> saleNoWorkerVOPage = saleMapper.getSaleByCompanyId(page, salePageQuery);
@ -509,7 +518,7 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa
saleMapper.companyGetSale(saleId);
final Sale sale = saleMapper.selectById(saleId);
// 处理返佣
deductLogService.updateRebateAmount("", sale.getTransCompany(), sale.getShopId(), saleId);
deductLogService.updateRebateAmount("", sale.getTransCompany(), sale.getShopId(), saleId, sale.getTransportType());
}
@Override
@ -561,7 +570,7 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa
@Override
public JSONObject buyAi(String aiMsg) {
JSONObject returnJsonObject = new JSONObject();
final JSONObject returnJsonObject = new JSONObject();
// 叉转X 文本纠错 使用正则表达式替换单个或多个连续的“叉”字符
aiMsg = replaceAllX(aiMsg);
final List<SaleDetailDTO> saleDetailDTOS = new ArrayList<>();
@ -744,8 +753,8 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa
} catch (InputRequiredException e) {
throw new RuntimeException(e);
}
returnJsonObject.put("data",saleDetailDTOS);
returnJsonObject.put("aiNotRecognition",String.join(";", aiNotRecognitionList));
returnJsonObject.put("data", saleDetailDTOS);
returnJsonObject.put("aiNotRecognition", String.join(";", aiNotRecognitionList));
return returnJsonObject;
}
@ -759,6 +768,35 @@ public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements Sa
saleMapper.updateStatus(id, status);
}
/**
* 物流公司转单
*
* @param saleId 订单id
* @param companyId 物流公司id
* @return Result
* @author 王富康
* @date 2024/4/27
*/
@Override
public void changeCompany(String saleId, String companyId) {
// 更新sale表trans_company、company_name、company_phone字段
final Sale sale = saleMapper.selectById(saleId);
final String modeOfService = sale.getModeOfService();
final LogiticsCompany logiticsCompany = logiticsCompanyService.findById(companyId);
final String mobile = logiticsCompany.getMobile();
final String companyName = logiticsCompany.getCompanyName();
sale.setCompanyPhone(mobile);
sale.setTransCompany(companyId);
sale.setCompanyName(companyName);
// 选平台配送:把order表也一并更新trans_company、company_name、transCompanyPhone字段
if (SaleConstant.MODE_OF_SERVICE[0].equals(modeOfService)) {
// 更新订单表
orderService.changeCompany(saleId, companyId, mobile, companyName);
}
saleMapper.updateById(sale);
}
/**
* 使用正则表达式替换输入字符串中连续的字符为相应数量的X字符
*

14
hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseDetailMapper.xml

@ -577,7 +577,8 @@
select
<include refid="Base_Column_List" />
from t_purchase_detail
where purchase_id = #{id,jdbcType=VARCHAR}
where del_flag ='0'
and purchase_id = #{id,jdbcType=VARCHAR}
order by create_time desc
</select>
@ -585,7 +586,8 @@
select
<include refid="Base_Column_List" />
from t_purchase_detail
where product_id = #{productId,jdbcType=VARCHAR}
where del_flag ='0'
and product_id = #{productId,jdbcType=VARCHAR}
and purchase_id in
<foreach close=")" collection="purchaseIds" item="listItem" open="(" separator=",">
#{listItem}
@ -614,6 +616,7 @@
<include refid="Base_Column_List" />
from t_purchase_detail
where purchase_id = #{purchaseId,jdbcType=VARCHAR}
and del_flag ='0'
and product_sn = #{productSn,jdbcType=VARCHAR} and product_name = #{productName,jdbcType=VARCHAR}
</select>
@ -623,8 +626,7 @@
</foreach>
</update>
<delete id="deleteByPurchaseId" parameterType="java.lang.String">
delete from t_purchase_detail
where purchase_id = #{purchaseId,jdbcType=VARCHAR}
</delete>
<update id="deleteByPurchaseId" parameterType="java.lang.String">
update t_purchase_detail set del_flag = '1' where purchase_id = #{purchaseId,jdbcType=VARCHAR}
</update>
</mapper>

19
hiver-modules/hiver-mall/src/main/resources/mapper/PurchaseMapper.xml

@ -398,7 +398,7 @@
<select id="selectDebtByShopId" resultMap="DebtResultMap">
select a.supplier_id,a.supplier_name,sum(a.no_pay) no_pay
from t_purchase a
where 1=1
where del_flag = '0'
and no_pay > 0
and shop_id = #{queryParams.shopId}
group by a.supplier_id,a.supplier_name
@ -409,7 +409,8 @@
select
<include refid="Base_Column_List"/>
from t_purchase
where shop_id = #{queryParams.shopId}
where del_flag = '0'
and shop_id = #{queryParams.shopId}
<if test="queryParams.startDate != null and queryParams.startDate != '' and queryParams.endDate != null and queryParams.endDate != ''">
and create_time BETWEEN #{queryParams.startDate} AND #{queryParams.endDate}
</if>
@ -436,7 +437,8 @@
select
<include refid="Base_Column_List" />
from t_purchase
where id in (select purchase_id from t_purchase_detail where product_id =#{productId})
where del_flag ='0'
and id in (select purchase_id from t_purchase_detail where del_flag ='0' and in_storage_status = 1 and product_id =#{productId})
order by create_time desc
</select>
@ -444,9 +446,11 @@
select
IFNULL(sum(should_pay),0.00) as purchasingCost
from t_purchase
where shop_id = #{shopId}
where del_flag = '0'
and shop_id = #{shopId}
and create_time BETWEEN #{startTime} AND #{endTime}
</select>
<update id="updateInStorageStatus" >
update t_purchase
set
@ -454,4 +458,11 @@
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="deleteByPurchaseId" >
update t_purchase
set
del_flag = '1'
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

5
hiver-modules/hiver-mall/src/main/resources/mapper/SaleMapper.xml

@ -695,6 +695,7 @@ trans_company, company_name, product_count, remark, sale_name, company_phone, cr
<include refid="Base_Column_List" />
from t_sale
where id in (select sale_id from t_sale_detail where product_id =#{productId})
and status not in ('2','6','7')
order by create_time desc
</select>
@ -819,7 +820,7 @@ trans_company, company_name, product_count, remark, sale_name, company_phone, cr
AND t.product_id = s.product_id
WHERE
t.shop_id = #{shopId}
AND purchase_id IN ( SELECT id FROM t_purchase WHERE supplier_id = #{supplierId} )
AND purchase_id IN ( SELECT id FROM t_purchase WHERE deflag = 0 and in_storage_status = 1 and supplier_id = #{supplierId} )
GROUP BY
product_id, product_name
order by product_name desc
@ -834,7 +835,7 @@ trans_company, company_name, product_count, remark, sale_name, company_phone, cr
AND t.product_id = s.product_id
WHERE
t.shop_id = #{shopId}
AND purchase_id IN ( SELECT id FROM t_purchase WHERE supplier_id = #{supplierId} )
AND purchase_id IN ( SELECT id FROM t_purchase WHERE deflag = 0 and in_storage_status = 1 and supplier_id = #{supplierId} )
and t.product_id in
<foreach close=")" collection="productIds" item="listItem" open="(" separator=",">
#{listItem}

12
hiver-modules/hiver-mall/src/main/resources/mapper/StockLogMapper.xml

@ -418,14 +418,16 @@
select
<include refid="Base_Column_List" />
from t_stock_log
where order_id = #{id,jdbcType=VARCHAR}
where del_flag='0'
and order_id = #{id,jdbcType=VARCHAR}
</select>
<select id="getByPurchaseIds" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_stock_log
where product_id = #{productId,jdbcType=VARCHAR}
where del_flag ='0'
and product_id = #{productId,jdbcType=VARCHAR}
and order_id in
<foreach close=")" collection="purchaseIds" item="listItem" open="(" separator=",">
#{listItem}
@ -444,8 +446,8 @@
</insert>
<delete id="deleteByPurchaseId" parameterType="java.lang.String">
delete from t_stock_log
<update id="deleteByPurchaseId" parameterType="java.lang.String">
update t_stock_log set del_flag ='1'
where order_id = #{purchaseId,jdbcType=VARCHAR}
</delete>
</update>
</mapper>
Loading…
Cancel
Save