Browse Source

物流优化

dev
wangfukang 2 years ago
parent
commit
4464dc62e8
  1. 16
      hiver-admin/test-output/test-report.html
  2. 15
      hiver-core/src/main/java/cc/hiver/core/common/utils/SecurityUtil.java
  3. 7
      hiver-core/src/main/java/cc/hiver/core/entity/LogiticsCompany.java
  4. 11
      hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/service/LogisticsAddressBookService.java
  5. 35
      hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/service/impl/LogisticsAddressBookServiceImpl.java
  6. 3
      hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/vo/LogisticsAddressBookQueryVo.java
  7. 8
      hiver-core/src/main/java/cc/hiver/core/logisticscompanyroute/service/impl/LogisticsCompanyRouteServiceImpl.java
  8. 6
      hiver-core/src/main/java/cc/hiver/core/logisticscompanyroute/vo/LogisticsCompanyRouteQueryVo.java
  9. 29
      hiver-core/src/main/java/cc/hiver/core/logisticsorder/controller/LogisticsOrderController.java
  10. 8
      hiver-core/src/main/java/cc/hiver/core/logisticsorder/entity/LogisticsOrder.java
  11. 49
      hiver-core/src/main/java/cc/hiver/core/logisticsorder/service/impl/LogisticsOrderServiceImpl.java
  12. 9
      hiver-core/src/main/java/cc/hiver/core/logisticsstation/mapper/LogisticsStationMapper.java
  13. 9
      hiver-core/src/main/java/cc/hiver/core/logisticsstation/service/LogisticsStationService.java
  14. 12
      hiver-core/src/main/java/cc/hiver/core/logisticsstation/service/impl/LogisticsStationServiceImpl.java
  15. 3
      hiver-core/src/main/resources/mapper/LogisticsAddressBookMapper.xml
  16. 8
      hiver-core/src/main/resources/mapper/LogisticsCompanyRouteMapper.xml
  17. 4
      hiver-core/src/main/resources/mapper/LogisticsOrderMapper.xml
  18. 15
      hiver-core/src/main/resources/mapper/LogisticsStationMapper.xml
  19. 16
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/LcomAuthController.java
  20. 61
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java
  21. 4
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/LogisticsOrderOfAiVo.java

16
hiver-admin/test-output/test-report.html

@ -35,7 +35,7 @@
<a href="#"><span class="badge badge-primary">Hiver</span></a>
</li>
<li class="m-r-10">
<a href="#"><span class="badge badge-primary">十月 13, 2024 00:07:47</span></a>
<a href="#"><span class="badge badge-primary">十月 15, 2024 22:13:10</span></a>
</li>
</ul>
</div>
@ -84,7 +84,7 @@
<div class="test-detail">
<span class="meta text-white badge badge-sm"></span>
<p class="name">passTest</p>
<p class="text-sm"><span>00:07:47 上</span> / <span>0.017 secs</span></p>
<p class="text-sm"><span>22:13:11 下</span> / <span>0.016 secs</span></p>
</div>
<div class="test-contents d-none">
<div class="detail-head">
@ -92,9 +92,9 @@
<div class="info">
<div class='float-right'><span class='badge badge-default'>#test-id=1</span></div>
<h5 class="test-status text-pass">passTest</h5>
<span class='badge badge-success'>10.13.2024 00:07:47</span>
<span class='badge badge-danger'>10.13.2024 00:07:47</span>
<span class='badge badge-default'>0.017 secs</span>
<span class='badge badge-success'>10.15.2024 22:13:11</span>
<span class='badge badge-danger'>10.15.2024 22:13:11</span>
<span class='badge badge-default'>0.016 secs</span>
</div>
<div class="m-t-10 m-l-5"></div>
</div>
@ -104,7 +104,7 @@
<tbody>
<tr class="event-row">
<td><span class="badge log pass-bg">Pass</span></td>
<td>0:07:47</td>
<td>22:13:11</td>
<td>
Test passed
</td>
@ -128,13 +128,13 @@
<div class="col-md-3">
<div class="card"><div class="card-body">
<p class="m-b-0">Started</p>
<h3>十月 13, 2024 00:07:47</h3>
<h3>十月 15, 2024 22:13:10</h3>
</div></div>
</div>
<div class="col-md-3">
<div class="card"><div class="card-body">
<p class="m-b-0">Ended</p>
<h3>十月 13, 2024 00:07:47</h3>
<h3>十月 15, 2024 22:13:11</h3>
</div></div>
</div>
<div class="col-md-3">

15
hiver-core/src/main/java/cc/hiver/core/common/utils/SecurityUtil.java

@ -139,7 +139,9 @@ public class SecurityUtil {
// 覆盖物流公司id为当前登录的物流公司员工id
logiticsCompany.setId(logisticsUser.getId());
logiticsCompany.setUsername(logisticsUser.getMobile());
logiticsCompany.setContacts(logisticsUser.getNickName());
logiticsCompany.setPassword(logisticsUser.getPassword());
logiticsCompany.setCompanyId(logisticsUser.getCompanyId());
}
}
// 缓存
@ -237,10 +239,20 @@ public class SecurityUtil {
final Boolean isValid = new BCryptPasswordEncoder().matches(password, logisticsUser.getPassword());
if (isValid) {
final LogiticsCompany logiticsCompany = logiticsCompanyDao.getById(logisticsUser.getCompanyId());
// 将员工的信息封装至公司信息中
logiticsCompany.setId(logisticsUser.getId());
logiticsCompany.setPassword(logisticsUser.getPassword());
logiticsCompany.setUsername(logisticsUser.getMobile());
logiticsCompany.setCompanyId(logisticsUser.getCompanyId());
logiticsCompanyList.add(logiticsCompany);
return logiticsCompanyList;
}
}
}else{
// 循环将id的值放在companyId上
for (LogiticsCompany logiticsCompany : logiticsCompanyList) {
logiticsCompany.setCompanyId(logiticsCompany.getId());
}
}
//
// 校验密码,一个老板有多个店铺的时候,密码一定是一样的,所以这里校验其中一个就行
@ -678,11 +690,14 @@ public class SecurityUtil {
if(logisticsUser == null){
return null;
}else{
logiticsCompany = logiticsCompanyDao.getById(logisticsUser.getCompanyId());
// 覆盖物流公司id为当前登录的物流公司员工id
logiticsCompany.setId(logisticsUser.getId());
logiticsCompany.setContacts(logisticsUser.getNickName());
logiticsCompany.setUsername(logisticsUser.getMobile());
logiticsCompany.setPassword(logisticsUser.getPassword());
logiticsCompany.setCompanyId(logisticsUser.getCompanyId());
}
}
Boolean saved = false;

7
hiver-core/src/main/java/cc/hiver/core/entity/LogiticsCompany.java

@ -16,6 +16,7 @@ limitations under the License.
package cc.hiver.core.entity;
import cc.hiver.core.base.HiverBaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -25,6 +26,7 @@ import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.math.BigDecimal;
/**
@ -105,4 +107,9 @@ public class LogiticsCompany extends HiverBaseEntity {
@ApiModelProperty(value = "是否支持上门取货:0:否;1:是")
private Integer canToDoor = 0;
@Transient
@TableField(exist = false)
@ApiModelProperty(value = "物流公司id")
private String companyId;
}

11
hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/service/LogisticsAddressBookService.java

@ -7,6 +7,8 @@ import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
public interface LogisticsAddressBookService extends IService<LogisticsAddressBook> {
@ -23,4 +25,13 @@ public interface LogisticsAddressBookService extends IService<LogisticsAddressBo
* @return JSONObject
*/
JSONObject getLogisticsAddressBookList(LogisticsAddressBookQueryVo logisticsAddressBookQueryVo);
/**
* 获取订单中收货人及发货人信息
* @author 王富康
* @date 2024/10/15
* @param logisticsOrder
* @return Map<LogisticsAddressBook>
*/
Map<String, LogisticsAddressBook> getByOrder(LogisticsOrder logisticsOrder);
}

35
hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/service/impl/LogisticsAddressBookServiceImpl.java

@ -16,7 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassNameLogisticsAddressBookServiceImpl
@ -69,8 +71,6 @@ public class LogisticsAddressBookServiceImpl extends ServiceImpl<LogisticsAddres
shipperAddressBook.setMobile(logisticsOrder.getShipperMobile());
// 设置收发货人名称,从物流订单的发货人名称中获取
shipperAddressBook.setShipperOrReceiverName(logisticsOrder.getShipperName());
// 设置创建人
shipperAddressBook.setCreateBy(logisticsOrder.getCreateBy());
list.add(shipperAddressBook);
}
@ -98,8 +98,6 @@ public class LogisticsAddressBookServiceImpl extends ServiceImpl<LogisticsAddres
reciverAddressBook.setCreateBy(logisticsOrder.getCreateBy());
// 设置联系电话,从物流订单的发货人手机信息中获取
reciverAddressBook.setMobile(logisticsOrder.getReceiverMobile());
// 设置创建人
reciverAddressBook.setCreateBy(logisticsOrder.getCreateBy());
list.add(reciverAddressBook);
}
// 调用save方法保存地址簿信息,返回保存结果
@ -148,4 +146,33 @@ public class LogisticsAddressBookServiceImpl extends ServiceImpl<LogisticsAddres
return jsonObject;
}
@Override
public Map<String, LogisticsAddressBook> getByOrder(LogisticsOrder logisticsOrder) {
final Map<String, LogisticsAddressBook> logisticsAddressBookMap = new HashMap<>();
// 根据名称、电话、地址查询,正常这里是能查询到的。
// 发货人
final LambdaQueryWrapper<LogisticsAddressBook> stuQuery = new LambdaQueryWrapper<>();
stuQuery.eq(LogisticsAddressBook::getShipperOrReceiverName, logisticsOrder.getShipperName())
.eq(LogisticsAddressBook::getAddressType, 1)
.eq(LogisticsAddressBook::getMobile, logisticsOrder.getShipperMobile())
.eq(LogisticsAddressBook::getAddressInfo, logisticsOrder.getShipperAddress());
final LogisticsAddressBook shipperLogisticsAddressBook = getBaseMapper().selectOne(stuQuery);
if(shipperLogisticsAddressBook != null ){
logisticsAddressBookMap.put("shipperLogisticsAddressBook",shipperLogisticsAddressBook);
}
// 收货人
final LambdaQueryWrapper<LogisticsAddressBook> stuQuery2 = new LambdaQueryWrapper<>();
stuQuery2.eq(LogisticsAddressBook::getShipperOrReceiverName, logisticsOrder.getReceiverName())
.eq(LogisticsAddressBook::getAddressType, 2)
.eq(LogisticsAddressBook::getMobile, logisticsOrder.getReceiverMobile())
.eq(LogisticsAddressBook::getAddressInfo, logisticsOrder.getReceiverAddress());
final LogisticsAddressBook receiverLogisticsAddressBook = getBaseMapper().selectOne(stuQuery2);
if(receiverLogisticsAddressBook != null ){
logisticsAddressBookMap.put("receiverLogisticsAddressBook",receiverLogisticsAddressBook);
}
return logisticsAddressBookMap;
}
}

3
hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/vo/LogisticsAddressBookQueryVo.java

@ -24,5 +24,8 @@ public class LogisticsAddressBookQueryVo extends HiverBasePageQuery {
@ApiModelProperty(value = "地址类型 1发货地址信息 2收货地址信息")
private Integer addressType;
@ApiModelProperty(value = "物流公司id")
private String companyId;
private String keyWord;
}

8
hiver-core/src/main/java/cc/hiver/core/logisticscompanyroute/service/impl/LogisticsCompanyRouteServiceImpl.java

@ -4,9 +4,11 @@ import cc.hiver.core.logisticscompanyroute.entity.LogisticsCompanyRoute;
import cc.hiver.core.logisticscompanyroute.mapper.LogisticsCompanyRouteMapper;
import cc.hiver.core.logisticscompanyroute.service.LogisticsCompanyRouteService;
import cc.hiver.core.logisticscompanyroute.vo.LogisticsCompanyRouteQueryVo;
import cc.hiver.core.utils.DateUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -27,12 +29,18 @@ public class LogisticsCompanyRouteServiceImpl extends ServiceImpl<LogisticsCompa
*/
@Override
public IPage<LogisticsCompanyRoute> getLogisticsCompanyRoutePageList(LogisticsCompanyRouteQueryVo logisticsCompanyRouteQueryVo) {
if(StringUtils.isNotEmpty(logisticsCompanyRouteQueryVo.getEndDate())){
logisticsCompanyRouteQueryVo.setEndDate(DateUtil.addDay(logisticsCompanyRouteQueryVo.getEndDate(), 1));
}
final Page<LogisticsCompanyRoute> page = new Page<>(logisticsCompanyRouteQueryVo.getPageNum(), logisticsCompanyRouteQueryVo.getPageSize());
return logisticsCompanyRouteMapper.getLogisticsCompanyRoutePageList(page, logisticsCompanyRouteQueryVo);
}
@Override
public List<LogisticsCompanyRoute> getLogisticsCompanyRouteListByCompanyId(LogisticsCompanyRouteQueryVo logisticsCompanyRouteQueryVo) {
if(StringUtils.isNotEmpty(logisticsCompanyRouteQueryVo.getEndDate())){
logisticsCompanyRouteQueryVo.setEndDate(DateUtil.addDay(logisticsCompanyRouteQueryVo.getEndDate(), 1));
}
return logisticsCompanyRouteMapper.getLogisticsCompanyRouteListByCompanyId(logisticsCompanyRouteQueryVo);
}
}

6
hiver-core/src/main/java/cc/hiver/core/logisticscompanyroute/vo/LogisticsCompanyRouteQueryVo.java

@ -26,4 +26,10 @@ public class LogisticsCompanyRouteQueryVo extends HiverBasePageQuery {
@ApiModelProperty(value = "线路名称")
private String circuitName;
@ApiModelProperty(value = "开始时间")
private String startDate;
@ApiModelProperty(value = "结束时间")
private String endDate;
}

29
hiver-core/src/main/java/cc/hiver/core/logisticsorder/controller/LogisticsOrderController.java

@ -5,6 +5,7 @@ import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.core.entity.LogiticsCompany;
import cc.hiver.core.logisticsaddressbook.entity.LogisticsAddressBook;
import cc.hiver.core.logisticsaddressbook.service.LogisticsAddressBookService;
import cc.hiver.core.logisticsorder.entity.LogisticsOrder;
import cc.hiver.core.logisticsorder.entity.LogisticsOrderChangeLog;
@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 物流订单控制器
@ -63,16 +65,25 @@ public class LogisticsOrderController {
}
logisticsOrder.setOrderNumber(orderNumber);
// 设置创建人姓名
final LogiticsCompany logiticsCompany = securityUtil.getCurrCompany();
logisticsOrder.setCreateBy(logiticsCompany.getId());
logisticsOrder.setCreateByName(logiticsCompany.getContacts());
final boolean b = logisticsOrderService.saveOrUpdate(logisticsOrder);
if (b) {
//保存收发货人地址簿
logisticsAddressBookService.saveLogisticsAddressBook(logisticsOrder);
final LogiticsCompany logiticsCompany = securityUtil.getCurrCompany();
logisticsOrder.setCreateBy(logiticsCompany.getId());
logisticsOrder.setCreateByName(logiticsCompany.getContacts());
// 20241015 保存收发货人地址簿,先保存地址簿,方便后边获取收发货人id
boolean b = logisticsAddressBookService.saveLogisticsAddressBook(logisticsOrder);
if(b){
// 获取收货人id
Map<String, LogisticsAddressBook> logisticsAddressBook = logisticsAddressBookService.getByOrder(logisticsOrder);
if(logisticsAddressBook.containsKey("shipperLogisticsAddressBook")){
logisticsOrder.setShipperId(logisticsAddressBook.get("shipperLogisticsAddressBook").getId());
}
if(logisticsAddressBook.containsKey("receiverLogisticsAddressBook")){
logisticsOrder.setReceiverId(logisticsAddressBook.get("receiverLogisticsAddressBook").getId());
}
logisticsOrderService.saveOrUpdate(logisticsOrder);
return ResultUtil.success("保存成功!");
} else {
return ResultUtil.error("保存失败!");
}else{
return ResultUtil.success("保存失败!");
}
}

8
hiver-core/src/main/java/cc/hiver/core/logisticsorder/entity/LogisticsOrder.java

@ -82,6 +82,10 @@ public class LogisticsOrder{
@ApiModelProperty(value = "线路名称")
private String circuitName;
@CompareField(name = "发货人id")
@ApiModelProperty(value = "发货人id")
private String shipperId;
@CompareField(name = "发货人名称")
@ApiModelProperty(value = "发货人名称")
private String shipperName;
@ -94,6 +98,10 @@ public class LogisticsOrder{
@ApiModelProperty(value = "发货地址")
private String shipperAddress;
@CompareField(name = "收货人id")
@ApiModelProperty(value = "收货人id")
private String receiverId;
@CompareField(name = "收货人名称")
@ApiModelProperty(value = "收货人名称")
private String receiverName;

49
hiver-core/src/main/java/cc/hiver/core/logisticsorder/service/impl/LogisticsOrderServiceImpl.java

@ -41,7 +41,7 @@ public class LogisticsOrderServiceImpl extends ServiceImpl<LogisticsOrderMapper,
@Override
public IPage<LogisticsOrder> getLogisticsOrderPageList(LogisticsOrderQueryVo logisticsOrderQueryVo) {
// 如果按照时间范围查询,结束时间加1天
if(StringUtils.isNotEmpty(logisticsOrderQueryVo.getEndDate())){
if (StringUtils.isNotEmpty(logisticsOrderQueryVo.getEndDate())) {
logisticsOrderQueryVo.setEndDate(DateUtil.addDay(logisticsOrderQueryVo.getEndDate(), 1));
}
final Page<LogisticsOrder> page = new Page<>(logisticsOrderQueryVo.getPageNum(), logisticsOrderQueryVo.getPageSize());
@ -53,12 +53,12 @@ public class LogisticsOrderServiceImpl extends ServiceImpl<LogisticsOrderMapper,
* 根据条件查询物流订单
*/
@Override
public LogisticsOrder getLogisticsOrderByCompanyId(LogisticsOrder logisticsOrder){
public LogisticsOrder getLogisticsOrderByCompanyId(LogisticsOrder logisticsOrder) {
LambdaQueryWrapper<LogisticsOrder> stuQuery = new LambdaQueryWrapper<>();
final LambdaQueryWrapper<LogisticsOrder> stuQuery = new LambdaQueryWrapper<>();
stuQuery.eq(LogisticsOrder::getCompanyId, logisticsOrder.getCompanyId())
.orderByDesc(LogisticsOrder::getCreateTime)
.between(LogisticsOrder::getCreateTime, DateUtil.COMMON.getDateText(new Date())+" 00:00:00", DateUtil.COMMON.getDateText(new Date())+" 23:59:59")
.between(LogisticsOrder::getCreateTime, DateUtil.COMMON.getDateText(new Date()) + " 00:00:00", DateUtil.COMMON.getDateText(new Date()) + " 23:59:59")
.last("limit 1");
return getBaseMapper().selectOne(stuQuery);
@ -66,28 +66,29 @@ public class LogisticsOrderServiceImpl extends ServiceImpl<LogisticsOrderMapper,
@Override
public int saveLogisticsOrderChangeLog(LogisticsOrderChangeLog logisticsOrderChangeLog){
public int saveLogisticsOrderChangeLog(LogisticsOrderChangeLog logisticsOrderChangeLog) {
return logisticsOrderMapper.saveLogisticsOrderChangeLog(logisticsOrderChangeLog);
}
/**
* 查询物流订单修改记录
*
* @param orderId
* @return int
*/
@Override
public List<LogisticsOrderChangeLogVo> getLogisticsOrderChangeLog(String orderId){
List<LogisticsOrderChangeLog> list = logisticsOrderMapper.getLogisticsOrderChangeLog(orderId);
List<LogisticsOrderChangeLogVo> logisticsOrderChangeLogVoList = new ArrayList<>();
if(CollectionUtils.isNotEmpty(list)){
Gson gson = new Gson();
for (LogisticsOrderChangeLog logisticsOrderChangeLog : list){
LogisticsOrderChangeLogVo logisticsOrderChangeLogVo = new LogisticsOrderChangeLogVo();
LogisticsOrder oldData = gson.fromJson(logisticsOrderChangeLog.getOldData(), LogisticsOrder.class);
LogisticsOrder newData = gson.fromJson(logisticsOrderChangeLog.getNewData(), LogisticsOrder.class);
CompareObjectUtils<LogisticsOrder> compareObjectUtils = new CompareObjectUtils<>();
List<DiffAttr> diffAttrs = compareObjectUtils.CompareObjWithAnnotation(oldData, newData);
public List<LogisticsOrderChangeLogVo> getLogisticsOrderChangeLog(String orderId) {
final List<LogisticsOrderChangeLog> list = logisticsOrderMapper.getLogisticsOrderChangeLog(orderId);
final List<LogisticsOrderChangeLogVo> logisticsOrderChangeLogVoList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list)) {
final Gson gson = new Gson();
for (LogisticsOrderChangeLog logisticsOrderChangeLog : list) {
final LogisticsOrderChangeLogVo logisticsOrderChangeLogVo = new LogisticsOrderChangeLogVo();
final LogisticsOrder oldData = gson.fromJson(logisticsOrderChangeLog.getOldData(), LogisticsOrder.class);
final LogisticsOrder newData = gson.fromJson(logisticsOrderChangeLog.getNewData(), LogisticsOrder.class);
final CompareObjectUtils<LogisticsOrder> compareObjectUtils = new CompareObjectUtils<>();
final List<DiffAttr> diffAttrs = compareObjectUtils.CompareObjWithAnnotation(oldData, newData);
logisticsOrderChangeLogVo.setOrderId(oldData.getId());
logisticsOrderChangeLogVo.setCreateBy(logisticsOrderChangeLog.getCreateBy());
logisticsOrderChangeLogVo.setCreateByName(logisticsOrderChangeLog.getCreateByName());
@ -101,20 +102,26 @@ public class LogisticsOrderServiceImpl extends ServiceImpl<LogisticsOrderMapper,
/**
* 物流订单数据统计
* @author 王富康
* @date 2024/9/7
*
* @param logisticsOrderQueryVo
* @return StatisticsVo
* @author 王富康
* @date 2024/9/7
*/
@Override
public StatisticsVo getLogisticsOrderStatistics(LogisticsOrderQueryVo logisticsOrderQueryVo) {
// 如果结束时间不为空,加1天
if (StringUtils.isNotEmpty(logisticsOrderQueryVo.getEndDate())) {
logisticsOrderQueryVo.setEndDate(DateUtil.addDay(logisticsOrderQueryVo.getEndDate(), 1));
}
// 从订单表获取客户总运费、运单数、小费、保费
StatisticsVo statisticsVo = logisticsOrderMapper.getLogisticsOrderStatistics(logisticsOrderQueryVo);
final StatisticsVo statisticsVo = logisticsOrderMapper.getLogisticsOrderStatistics(logisticsOrderQueryVo);
// 从订单表获取客户数
int customerCount = logisticsOrderMapper.getCustomerCount(logisticsOrderQueryVo);
final int customerCount = logisticsOrderMapper.getCustomerCount(logisticsOrderQueryVo);
statisticsVo.setTotalCustomer(customerCount);
// 从装车记录获取运输费、装车费
StatisticsVo carStatisticsVo = logisticsEntruckingLogService.getCarStatistics(logisticsOrderQueryVo);
final StatisticsVo carStatisticsVo = logisticsEntruckingLogService.getCarStatistics(logisticsOrderQueryVo);
statisticsVo.setTotalTransportationFee(carStatisticsVo.getTotalTransportationFee());
statisticsVo.setTotalLoadingFee(carStatisticsVo.getTotalLoadingFee());
return statisticsVo;

9
hiver-core/src/main/java/cc/hiver/core/logisticsstation/mapper/LogisticsStationMapper.java

@ -31,4 +31,13 @@ public interface LogisticsStationMapper extends BaseMapper<LogisticsStation> {
* @date 2024/8/28
*/
List<LogisticsStation> getLogisticsStationListByCompanyId(@Param("queryParams") LogisticsStationQueryVo logisticsRouteQueryVo);
/**
* 根据站点名称匹配到达站支持拼音
* @author 王富康
* @date 2024/10/15
* @param logisticsRouteQueryVo
* @return List<LogisticsStation>
*/
List<LogisticsStation> getLogisticsStationListBystationName(@Param("queryParams") LogisticsStationQueryVo logisticsRouteQueryVo);
}

9
hiver-core/src/main/java/cc/hiver/core/logisticsstation/service/LogisticsStationService.java

@ -28,4 +28,13 @@ public interface LogisticsStationService extends IService<LogisticsStation> {
* @date 2024/8/28
*/
List<LogisticsStation> getLogisticsStationListByCompanyId(LogisticsStationQueryVo logisticsRouteQueryVo);
/**
* 根据站点名称匹配到达站支持拼音
* @author 王富康
* @date 2024/10/15
* @param logisticsRouteQueryVo
* @return List<LogisticsStation>
*/
List<LogisticsStation> getLogisticsStationListBystationName(LogisticsStationQueryVo logisticsRouteQueryVo);
}

12
hiver-core/src/main/java/cc/hiver/core/logisticsstation/service/impl/LogisticsStationServiceImpl.java

@ -44,4 +44,16 @@ public class LogisticsStationServiceImpl extends ServiceImpl<LogisticsStationMap
public List<LogisticsStation> getLogisticsStationListByCompanyId(LogisticsStationQueryVo logisticsRouteQueryVo) {
return logisticsStationMapper.getLogisticsStationListByCompanyId(logisticsRouteQueryVo);
}
/**
* 根据站点名称匹配到达站支持拼音
* @author 王富康
* @date 2024/10/15
* @param logisticsRouteQueryVo
* @return List<LogisticsStation>
*/
@Override
public List<LogisticsStation> getLogisticsStationListBystationName(LogisticsStationQueryVo logisticsRouteQueryVo) {
return logisticsStationMapper.getLogisticsStationListBystationName(logisticsRouteQueryVo);
}
}

3
hiver-core/src/main/resources/mapper/LogisticsAddressBookMapper.xml

@ -162,7 +162,8 @@
t.shipper_or_receiver_name, t.address_type, t.mobile, t.address_info, t.company_id, t.company_name
from t_logistics_address_book t
<where>
t.address_type = #{queryParams.addressType}
t.company_id = #{queryParams.companyId}
and t.address_type = #{queryParams.addressType}
AND (
<if test='queryParams.shipperOrReceiverName!=null and queryParams.shipperOrReceiverName.trim() neq ""'>
t.shipper_or_receiver_name LIKE CONCAT( '%', #{queryParams.shipperOrReceiverName}, '%' )

8
hiver-core/src/main/resources/mapper/LogisticsCompanyRouteMapper.xml

@ -156,6 +156,10 @@
<if test='queryParams.circuitName!=null and queryParams.circuitName.trim() neq ""'>
AND t.circuit_name like concat('%',#{queryParams.circuitName},'%')
</if>
<!--开始时间、结束时间-->
<if test="queryParams.startDate!=null and queryParams.endDate!=null">
AND t.create_time BETWEEN #{queryParams.startDate} AND #{queryParams.endDate}
</if>
</where>
ORDER BY
t.create_time desc
@ -180,6 +184,10 @@
<if test='queryParams.circuitName!=null and queryParams.circuitName.trim() neq ""'>
AND t.circuit_name like concat('%',#{queryParams.circuitName},'%')
</if>
<!--开始时间、结束时间-->
<if test="queryParams.startDate!=null and queryParams.endDate!=null">
AND t.create_time BETWEEN #{queryParams.startDate} AND #{queryParams.endDate}
</if>
</where>
ORDER BY
t.create_time desc

4
hiver-core/src/main/resources/mapper/LogisticsOrderMapper.xml

@ -191,6 +191,10 @@
<if test='logisticsOrderQueryVo.arrivalStationId!=null and logisticsOrderQueryVo.arrivalStationId.trim() neq ""'>
AND t.arrival_station_id = #{logisticsOrderQueryVo.arrivalStationId}
</if>
<!--开始时间、结束时间-->
<if test="logisticsOrderQueryVo.startDate!=null and logisticsOrderQueryVo.endDate!=null">
AND t.create_time BETWEEN #{logisticsOrderQueryVo.startDate} AND #{logisticsOrderQueryVo.endDate}
</if>
</select>
<!--获取客户数-->

15
hiver-core/src/main/resources/mapper/LogisticsStationMapper.xml

@ -175,4 +175,19 @@
ORDER BY
t.create_time desc
</select>
<select id="getLogisticsStationListBystationName" resultMap="BaseResultMap" parameterType="cc.hiver.core.logisticsstation.vo.LogisticsStationQueryVo">
select
t.id, t.create_by,t.create_time,t.del_flag,t.update_by,t.update_time,t.circuit_id,t.station_name,t.freight_rules,t.landing_fee_rules,t.delivery_fee_rules
from t_logistics_station t
<where>
<if test='queryParams.stationName!=null and queryParams.stationName.trim() neq ""'>
AND (t.station_name LIKE CONCAT( '%', #{queryParams.stationName}, '%' )
OR to_pinyin ( t.station_name ) LIKE CONCAT( '%', to_pinyin ( #{queryParams.stationName} ), '%' )
OR to_initial_pinyin ( t.station_name ) LIKE CONCAT( '%', #{queryParams.stationName}, '%' ))
</if>
</where>
ORDER BY
t.create_time desc
</select>
</mapper>

16
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/LcomAuthController.java

@ -24,6 +24,8 @@ import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.core.config.properties.HiverTokenProperties;
import cc.hiver.core.entity.LogiticsCompany;
import cc.hiver.core.logisticsuser.entity.LogisticsUser;
import cc.hiver.core.logisticsuser.service.LogisticsUserService;
import cc.hiver.core.service.LogiticsCompanyService;
import cc.hiver.core.vo.LcomDetailVO;
import cn.hutool.core.text.CharSequenceUtil;
@ -59,6 +61,9 @@ public class LcomAuthController {
@Autowired
private LogiticsCompanyService logiticsCompanyService;
@Autowired
private LogisticsUserService logisticsUserService;
public static final String LOGIN_FAIL_FLAG = "COMPANY_LOGIN_FAIL_FLAG:";
public static final String LOGIN_TIME_LIMIT = "COMPANY_LOGIN_TIME_LIMIT:";
@ -164,7 +169,16 @@ public class LcomAuthController {
@RateLimiter(name = "sendLoginSms", ipLimit = true)
public Result chooseCompany(@RequestParam String companyId,@RequestParam String username) {
final boolean saveLogin = true;
final LogiticsCompany logiticsCompany = logiticsCompanyService.findById(companyId);
LogiticsCompany logiticsCompany = logiticsCompanyService.findById(companyId);
if(logiticsCompany == null ){
// 可能是员工登录,这里反查公司信息
final LogisticsUser logisticsUser = logisticsUserService.getById(companyId);
logiticsCompany = logiticsCompanyService.findById(logisticsUser.getCompanyId());
}else{
logiticsCompany.setCompanyId(logiticsCompany.getId());
}
// accessToken,是根据username去设置的,可能是员工的,也可能是公司的。
final String accessToken = securityUtil.getAppWLToken(logiticsCompany, saveLogin,username);
final LcomDetailVO detailVO = new LcomDetailVO();

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

@ -2,10 +2,14 @@ package cc.hiver.mall.purchaseocr.service.impl;
import cc.hiver.core.common.utils.CommonUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.entity.LogiticsCompany;
import cc.hiver.core.entity.User;
import cc.hiver.core.logisticsaddressbook.entity.LogisticsAddressBook;
import cc.hiver.core.logisticsaddressbook.service.LogisticsAddressBookService;
import cc.hiver.core.logisticsaddressbook.vo.LogisticsAddressBookQueryVo;
import cc.hiver.core.logisticsstation.entity.LogisticsStation;
import cc.hiver.core.logisticsstation.service.LogisticsStationService;
import cc.hiver.core.logisticsstation.vo.LogisticsStationQueryVo;
import cc.hiver.mall.common.constant.PurchaseConstant;
import cc.hiver.mall.config.thread.AiPurchaseThread;
import cc.hiver.mall.config.thread.ThreadPoolConfiguration;
@ -83,6 +87,9 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
@Autowired
private LogisticsAddressBookService logisticsAddressBookService;
@Autowired
private LogisticsStationService logisticsStationService;
@Override
public JSONObject batchSave(PurchaseOciPictureAddVo purchaseOciPictureAddVo) {
@ -248,14 +255,14 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
final String attributeList = object.getString("attributeList");
final JSONArray attributeListJsonArray = JSON.parseArray(attributeList);
// 根据货号去查询商品,如果
final List<Product> byProductSn = productService.getByProductSn(productSn, shopId,"");
final List<Product> byProductSn = productService.getByProductSn(productSn, shopId, "");
if (StringUtils.isNotEmpty(singleProductId) || (byProductSn != null && !byProductSn.isEmpty())) {
// 原则上一个店铺一个货号对应一个商品,这里如果查到了,直接拿第一个。
Product product = new Product();
if(!byProductSn.isEmpty()){
if (!byProductSn.isEmpty()) {
product = byProductSn.get(0);
}
if(StringUtils.isNotEmpty(singleProductId)){
if (StringUtils.isNotEmpty(singleProductId)) {
// 20240928 app/sale/buyAi接口加个参数productId,如果传值了,查规格库存数的时候就查这款商品的
product = productService.getById(singleProductId);
}
@ -283,13 +290,13 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
// ai语音入库旧商品 如果通义千问返回的价格为0,返回当前采购价 ,采购价:purchasePrice
if (price.compareTo(BigDecimal.ZERO) == 0) {
purchaseDetail.setPurchasePrice(product.getPurchasePrice());
}else{
} else {
purchaseDetail.setPurchasePrice(price);
}
// ai语音入库旧商品 如果通义千问返回的价格为0,返回当前批发价 ,批发价:wholesalePrice
if (wholesalePrice.compareTo(BigDecimal.ZERO) == 0) {
purchaseDetail.setWholesalePrice(product.getWholesalePrice());
}else{
} else {
purchaseDetail.setWholesalePrice(wholesalePrice);
}
purchaseDetail.setAttrId(product.getAttrId());
@ -401,9 +408,9 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
}
// 如果客户id不为空,那么就查询商品的购买记录
if(StringUtils.isNotEmpty(customerId)){
if (StringUtils.isNotEmpty(customerId)) {
// 获取客户的购买次数
final List<BuyCountVo> buyCount = saleService.buyCount(customerId,oldProductIdList);
final List<BuyCountVo> buyCount = saleService.buyCount(customerId, oldProductIdList);
// 封装为Map
final Map<String, Integer> buyCountMap = new HashMap<>();
for (BuyCountVo buyCountVo : buyCount) {
@ -440,9 +447,9 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
for (int j = 0; j < attributeListJsonArray.size(); j++) {
final JSONObject attributeListObject = attributeListJsonArray.getJSONObject(j);
String color = attributeListObject.getString("color");
color = StringUtils.isEmpty(color) ? "均色" :color.toUpperCase();
color = StringUtils.isEmpty(color) ? "均色" : color.toUpperCase();
String size = attributeListObject.getString("size");
size = StringUtils.isEmpty(size) ? "均码" :size.toUpperCase();
size = StringUtils.isEmpty(size) ? "均码" : size.toUpperCase();
String productCount1 = attributeListObject.getString("productCount");
productCount1 = StringUtils.isEmpty(productCount1) ? "0" : productCount1;
final Matcher countMatchered = COMPILE.matcher(productCount1);
@ -521,7 +528,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
BigDecimal weight = BigDecimal.ZERO;
// 使用正则表达式提取数字部分
final Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
if(StringUtils.isNotEmpty(weightStr)){
if (StringUtils.isNotEmpty(weightStr)) {
final Matcher matcher = pattern.matcher(weightStr);
if (matcher.find()) {
// 获取匹配到的数字字符串并转换为BigDecimal
@ -533,7 +540,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
customInfoOfAiVo.setWeight(weight);
final String countStr = object.getString("count");
int count = 0;
if(StringUtils.isNotEmpty(countStr)){
if (StringUtils.isNotEmpty(countStr)) {
final Matcher countMatchered = COMPILE.matcher(countStr);
String replaced = "";
if (countMatchered.find()) {
@ -547,7 +554,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
customInfoOfAiVo.setMethodOfSettlement(methodOfSettlement);
final String tipsStr = object.getString("tips");
BigDecimal tips = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(tipsStr)){
if (StringUtils.isNotEmpty(tipsStr)) {
// 使用正则表达式提取数字部分
final Matcher matcherOfTips = pattern.matcher(tipsStr);
if (matcherOfTips.find()) {
@ -561,7 +568,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
customInfoOfAiVos.add(customInfoOfAiVo);
}
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
returnJsonObject.put("code", 500);
}
returnJsonObject.put("data", customInfoOfAiVos);
@ -593,7 +600,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
BigDecimal weight = BigDecimal.ZERO;
// 使用正则表达式提取数字部分
final Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
if(StringUtils.isNotEmpty(weightStr)){
if (StringUtils.isNotEmpty(weightStr)) {
final Matcher matcher = pattern.matcher(weightStr);
if (matcher.find()) {
// 获取匹配到的数字字符串并转换为BigDecimal
@ -605,7 +612,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
logisticsOrderOfAiVo.setWeight(weight);
final String countStr = object.getString("count");
int count = 0;
if(StringUtils.isNotEmpty(countStr)){
if (StringUtils.isNotEmpty(countStr)) {
final Matcher countMatchered = COMPILE.matcher(countStr);
String replaced = "";
if (countMatchered.find()) {
@ -617,7 +624,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
logisticsOrderOfAiVo.setCount(count);
final String tipsStr = object.getString("tips");
BigDecimal tips = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(tipsStr)){
if (StringUtils.isNotEmpty(tipsStr)) {
// 使用正则表达式提取数字部分
final Matcher matcherOfTips = pattern.matcher(tipsStr);
if (matcherOfTips.find()) {
@ -631,7 +638,7 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
final String premiumStr = object.getString("premium");
BigDecimal premium = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(premiumStr)){
if (StringUtils.isNotEmpty(premiumStr)) {
// 使用正则表达式提取数字部分
final Matcher matcherOfPremium = pattern.matcher(premiumStr);
if (matcherOfPremium.find()) {
@ -650,11 +657,13 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
logisticsAddressBookQueryVo.setAddressType(1);
logisticsAddressBookQueryVo.setShipperOrReceiverName(shipperName);
logisticsAddressBookQueryVo.setMobile(shipperMobile);
LogiticsCompany currCompany = securityUtil.getCurrCompany();
logisticsAddressBookQueryVo.setCompanyId(currCompany.getCompanyId());
final cn.hutool.json.JSONObject logisticsAddressBookList = logisticsAddressBookService.getLogisticsAddressBookList(logisticsAddressBookQueryVo);
if("1".equals(logisticsAddressBookList.get("flag"))){
if ("1".equals(logisticsAddressBookList.get("flag"))) {
final List<LogisticsAddressBook> data = (List<LogisticsAddressBook>) logisticsAddressBookList.get("data");
logisticsOrderOfAiVo.setShipperList(data);
}else{
} else {
log.info(logisticsAddressBookList.get("msg").toString());
}
// 收货人 receiverName,receiverMobile
@ -663,16 +672,24 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
receiverQueryVo.setShipperOrReceiverName(receiverName);
receiverQueryVo.setMobile(receiverMobile);
final cn.hutool.json.JSONObject receiverList = logisticsAddressBookService.getLogisticsAddressBookList(receiverQueryVo);
if("1".equals(receiverList.get("flag"))){
if ("1".equals(receiverList.get("flag"))) {
final List<LogisticsAddressBook> data = (List<LogisticsAddressBook>) receiverList.get("data");
logisticsOrderOfAiVo.setReceiverList(data);
}else{
} else {
log.info(receiverList.get("msg").toString());
}
// 到达站列表
if (StringUtils.isNotEmpty(arrivalStationName)) {
LogisticsStationQueryVo logisticsRouteQueryVo = new LogisticsStationQueryVo();
logisticsRouteQueryVo.setStationName(arrivalStationName);
List<LogisticsStation> logisticsStationListBystationName = logisticsStationService.getLogisticsStationListBystationName(logisticsRouteQueryVo);
logisticsOrderOfAiVo.setLogisticsStationList(logisticsStationListBystationName);
}
logisticsOrderOfAiVos.add(logisticsOrderOfAiVo);
}
} catch (Exception e) {
log.error(e.getMessage(),e);
log.error(e.getMessage(), e);
returnJsonObject.put("code", 500);
}
returnJsonObject.put("data", logisticsOrderOfAiVos);

4
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/LogisticsOrderOfAiVo.java

@ -1,6 +1,7 @@
package cc.hiver.mall.purchaseocr.vo;
import cc.hiver.core.logisticsaddressbook.entity.LogisticsAddressBook;
import cc.hiver.core.logisticsstation.entity.LogisticsStation;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -43,6 +44,9 @@ public class LogisticsOrderOfAiVo {
@ApiModelProperty(value = "到达站")
private String arrivalStationName;
@ApiModelProperty(value = "到达站列表")
private List<LogisticsStation> logisticsStationList;
@ApiModelProperty(value = "物品")
private String objectName;
}

Loading…
Cancel
Save