Browse Source

物流相关问题修改

dev
wangfukang 2 years ago
parent
commit
3a0a839d47
  1. 16
      hiver-admin/test-output/test-report.html
  2. 18
      hiver-core/src/main/java/cc/hiver/core/common/utils/SecurityUtil.java
  3. 15
      hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/controller/LogisticsEntruckingLogController.java
  4. 4
      hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/mapper/LogisticsEntruckingLogMapper.java
  5. 3
      hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/service/LogisticsEntruckingLogService.java
  6. 42
      hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/service/impl/LogisticsEntruckingLogServiceImpl.java
  7. 23
      hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/vo/LogisticsEntruckingLogDatePageVo.java
  8. 2
      hiver-core/src/main/java/cc/hiver/core/logisticsorder/controller/LogisticsOrderController.java
  9. 6
      hiver-core/src/main/java/cc/hiver/core/logisticsorder/entity/LogisticsOrder.java
  10. 72
      hiver-core/src/main/resources/mapper/LogisticsEntruckingLogMapper.xml
  11. 14
      hiver-core/src/main/resources/mapper/LogisticsOrderMapper.xml
  12. 15
      hiver-core/src/main/resources/mapper/LogisticsUserMapper.xml
  13. 4
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/LcomAuthController.java
  14. 10
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/controller/PurchaseOcrPictureController.java
  15. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/PurchaseOcrPictureService.java
  16. 89
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/impl/PurchaseOcrPictureServiceImpl.java
  17. 37
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/vo/LogisticsOrderOfAiVo.java
  18. 43
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliOcrUtil.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">九月 08, 2024 22:36:27</span></a>
<a href="#"><span class="badge badge-primary">九月 05, 2024 21:22:19</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>22:36:27 下午</span> / <span>0.015 secs</span></p>
<p class="text-sm"><span>21:22:20 下午</span> / <span>0.034 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'>09.08.2024 22:36:27</span>
<span class='badge badge-danger'>09.08.2024 22:36:27</span>
<span class='badge badge-default'>0.015 secs</span>
<span class='badge badge-success'>09.05.2024 21:22:20</span>
<span class='badge badge-danger'>09.05.2024 21:22:20</span>
<span class='badge badge-default'>0.034 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>22:36:27</td>
<td>21:22:20</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>九月 08, 2024 22:36:27</h3>
<h3>九月 05, 2024 21:22:19</h3>
</div></div>
</div>
<div class="col-md-3">
<div class="card"><div class="card-body">
<p class="m-b-0">Ended</p>
<h3>九月 08, 2024 22:36:27</h3>
<h3>九月 05, 2024 21:22:20</h3>
</div></div>
</div>
<div class="col-md-3">

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

@ -653,11 +653,25 @@ public class SecurityUtil {
}
public String getAppWLToken(LogiticsCompany logiticsCompany, Boolean saveLogin) {
public String getAppWLToken(LogiticsCompany logiticsCompany, Boolean saveLogin, String username) {
if (logiticsCompany == null) {
throw new HiverException("logiticsCompany不能为空");
}
// 物流公司的员工页可以登录,这里防止员工登录顶掉物流公司,重新设置物流公司的id,并设置token,可根据员工id获取token
List<LogiticsCompany> logiticsCompanyList = new ArrayList<>();
if (NameUtil.mobile(username)) {
logiticsCompanyList = findCompanyByMobile(username);
}
if (logiticsCompanyList.isEmpty()) {
// 物流公司主表中没有查询到信息,查询物流公司员工信息
final LogisticsUser logisticsUser = logisticsUserService.findByMobile(username);
if(logisticsUser == null){
return null;
}else{
// 覆盖物流公司id为当前登录的物流公司员工id
logiticsCompany.setId(logisticsUser.getId());
}
}
Boolean saved = false;
if (saveLogin == null || saveLogin) {
saved = true;

15
hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/controller/LogisticsEntruckingLogController.java

@ -4,6 +4,7 @@ import cc.hiver.core.common.utils.ResultUtil;
import cc.hiver.core.common.vo.Result;
import cc.hiver.core.logisticsentruckinglog.entity.LogisticsEntruckingLog;
import cc.hiver.core.logisticsentruckinglog.service.LogisticsEntruckingLogService;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogDatePageVo;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
@ -103,6 +104,20 @@ public class LogisticsEntruckingLogController {
return new ResultUtil<IPage<LogisticsEntruckingLog>>().setData(result);
}
/**
* 根据日期分页查询物流装车记录
* @author 王富康
* @date 2024/9/5
* @param logisticsEntruckingLogQueryVo
* @return Result<IPage<LogisticsEntruckingLogDatePageVo>>
*/
@RequestMapping(value = "/getDateLogisticsEntruckingLogPageList", method = RequestMethod.POST)
@ApiOperation(value = "根据日期分页查询物流装车记录")
public Result<IPage<LogisticsEntruckingLogDatePageVo>> getDateLogisticsEntruckingLogPageList(@RequestBody(required = false) LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo) {
final IPage<LogisticsEntruckingLogDatePageVo> result = logisticsEntruckingLogService.getDateLogisticsEntruckingLogPageList(logisticsEntruckingLogQueryVo);
return new ResultUtil<IPage<LogisticsEntruckingLogDatePageVo>>().setData(result);
}
/**
* 批量新增装车记录

4
hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/mapper/LogisticsEntruckingLogMapper.java

@ -1,6 +1,7 @@
package cc.hiver.core.logisticsentruckinglog.mapper;
import cc.hiver.core.logisticsentruckinglog.entity.LogisticsEntruckingLog;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogDatePageVo;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -21,6 +22,9 @@ public interface LogisticsEntruckingLogMapper extends BaseMapper<LogisticsEntruc
* @date 2024/8/24
*/
IPage<LogisticsEntruckingLog> getLogisticsEntruckingLogPageList(Page<LogisticsEntruckingLog> page, @Param("queryParams") LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo);
List<LogisticsEntruckingLog> getLogisticsEntruckingLogList(@Param("queryParams") LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo);
void deleteByCarNumberAndCompanyId(@Param("logisticsEntruckingLogs")List<LogisticsEntruckingLog> logisticsEntruckingLogs,@Param("nowDate") String nowDate,@Param("afterDay") String afterDay);
IPage<LogisticsEntruckingLogDatePageVo> getDateLogisticsEntruckingLogPageList(Page<LogisticsEntruckingLogDatePageVo> page,@Param("queryParams") LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo);
}

3
hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/service/LogisticsEntruckingLogService.java

@ -1,6 +1,7 @@
package cc.hiver.core.logisticsentruckinglog.service;
import cc.hiver.core.logisticsentruckinglog.entity.LogisticsEntruckingLog;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogDatePageVo;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@ -20,4 +21,6 @@ public interface LogisticsEntruckingLogService extends IService<LogisticsEntruck
IPage<LogisticsEntruckingLog> getLogisticsEntruckingLogPageList(LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo);
void deleteByCarNumberAndCompanyId(List<LogisticsEntruckingLog> logisticsEntruckingLogs);
IPage<LogisticsEntruckingLogDatePageVo> getDateLogisticsEntruckingLogPageList(LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo);
}

42
hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/service/impl/LogisticsEntruckingLogServiceImpl.java

@ -3,6 +3,7 @@ package cc.hiver.core.logisticsentruckinglog.service.impl;
import cc.hiver.core.logisticsentruckinglog.entity.LogisticsEntruckingLog;
import cc.hiver.core.logisticsentruckinglog.mapper.LogisticsEntruckingLogMapper;
import cc.hiver.core.logisticsentruckinglog.service.LogisticsEntruckingLogService;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogDatePageVo;
import cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo;
import cc.hiver.core.utils.DateUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -11,8 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service
public class LogisticsEntruckingLogServiceImpl extends ServiceImpl<LogisticsEntruckingLogMapper, LogisticsEntruckingLog> implements LogisticsEntruckingLogService {
@ -22,10 +22,11 @@ public class LogisticsEntruckingLogServiceImpl extends ServiceImpl<LogisticsEntr
/**
* 分页查询物流装车记录
* @author 王富康
* @date 2024/8/24
*
* @param logisticsEntruckingLogQueryVo
* @return IPage<LogisticsEntruckingLog>
* @author 王富康
* @date 2024/8/24
*/
@Override
public IPage<LogisticsEntruckingLog> getLogisticsEntruckingLogPageList(LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo) {
@ -35,9 +36,10 @@ public class LogisticsEntruckingLogServiceImpl extends ServiceImpl<LogisticsEntr
/**
* 批量删除物流装车记录
*
* @param logisticsEntruckingLogs
* @author 王富康
* @date 2024/9/8
* @param logisticsEntruckingLogs
*/
@Override
public void deleteByCarNumberAndCompanyId(List<LogisticsEntruckingLog> logisticsEntruckingLogs) {
@ -47,4 +49,34 @@ public class LogisticsEntruckingLogServiceImpl extends ServiceImpl<LogisticsEntr
final String afterDay = DateUtil.addDay(nowDate, 1);
logisticsEntruckingLogMapper.deleteByCarNumberAndCompanyId(logisticsEntruckingLogs, nowDate, afterDay);
}
@Override
public IPage<LogisticsEntruckingLogDatePageVo> getDateLogisticsEntruckingLogPageList(LogisticsEntruckingLogQueryVo logisticsEntruckingLogQueryVo) {
final Page<LogisticsEntruckingLogDatePageVo> page = new Page<>(logisticsEntruckingLogQueryVo.getPageNum(), logisticsEntruckingLogQueryVo.getPageSize());
// 获取日期
final IPage<LogisticsEntruckingLogDatePageVo> dateLogisticsEntruckingLogPageList = logisticsEntruckingLogMapper.getDateLogisticsEntruckingLogPageList(page, logisticsEntruckingLogQueryVo);
// 获取数据列表
final List<LogisticsEntruckingLog> logisticsEntruckingLogList = logisticsEntruckingLogMapper.getLogisticsEntruckingLogList(logisticsEntruckingLogQueryVo);
// 将日期截取年月日,放到map中去
final Map<String, List<LogisticsEntruckingLog>> listMap = new HashMap<>();
for (LogisticsEntruckingLog logisticsEntruckingLog : logisticsEntruckingLogList) {
// 获取创建时间,这里不应该为空,如果为空了,算今天的
final Date createTime = logisticsEntruckingLog.getCreateTime()== null ? new Date() : logisticsEntruckingLog.getCreateTime();
final String dateText = DateUtil.COMMON.getDateText(createTime);
if (listMap.containsKey(dateText)) {
listMap.get(dateText).add(logisticsEntruckingLog);
} else {
final List<LogisticsEntruckingLog> logisticsEntruckingLogs = new ArrayList<>();
logisticsEntruckingLogs.add(logisticsEntruckingLog);
listMap.put(dateText, logisticsEntruckingLogs);
}
}
// 根据日期添加数据
for (LogisticsEntruckingLogDatePageVo dateLogisticsEntruckingLogPageVo : dateLogisticsEntruckingLogPageList.getRecords()) {
if (listMap.containsKey(dateLogisticsEntruckingLogPageVo.getEntruckingDate())) {
dateLogisticsEntruckingLogPageVo.setLogisticsEntruckingLogList(listMap.get(dateLogisticsEntruckingLogPageVo.getEntruckingDate()));
}
}
return dateLogisticsEntruckingLogPageList;
}
}

23
hiver-core/src/main/java/cc/hiver/core/logisticsentruckinglog/vo/LogisticsEntruckingLogDatePageVo.java

@ -0,0 +1,23 @@
package cc.hiver.core.logisticsentruckinglog.vo;
import cc.hiver.core.logisticsentruckinglog.entity.LogisticsEntruckingLog;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class LogisticsEntruckingLogDatePageVo {
/**
* 装车日期
*/
@ApiModelProperty(value = "装车日期")
private String entruckingDate;
/**
* 装车记录
*/
@ApiModelProperty(value = "装车记录")
private List<LogisticsEntruckingLog> logisticsEntruckingLogList;
}

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

@ -52,6 +52,8 @@ public class LogisticsOrderController {
orderNumber += 1;
}
logisticsOrder.setOrderNumber(orderNumber);
// 设置创建人姓名
// logisticsOrder.setCreateByName();
final boolean b = logisticsOrderService.saveOrUpdate(logisticsOrder);
if (b) {
//保存收发货人地址簿

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

@ -23,6 +23,9 @@ public class LogisticsOrder extends HiverBaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "操作人姓名")
private String createByName;
@ApiModelProperty(value = "物流公司id")
private String companyId;
@ -110,5 +113,8 @@ public class LogisticsOrder extends HiverBaseEntity {
@ApiModelProperty(value = "图片路径")
private String imagePath;
@ApiModelProperty(value = "代收货款")
private String paymentForGoods;
}

72
hiver-core/src/main/resources/mapper/LogisticsEntruckingLogMapper.xml

@ -66,7 +66,7 @@
where id = #{id,jdbcType=VARCHAR}
</update>
<!--管理商品分页列表-->
<!--装车记录分页列表-->
<select id="getLogisticsEntruckingLogPageList" resultMap="BaseResultMap" parameterType="cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo">
select
<include refid="Base_Column_List" />
@ -100,6 +100,76 @@
create_time desc
</select>
<!--装车记录列表(不分页)-->
<select id="getLogisticsEntruckingLogList" resultMap="BaseResultMap" parameterType="cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo">
select
<include refid="Base_Column_List" />
from t_logistics_entrucking_log
<where>
<!--物流公司id-->
<if test='queryParams.companyId!=null and queryParams.companyId.trim() neq ""'>
AND company_id = #{queryParams.companyId}
</if>
<!--物流公司名称-->
<if test='queryParams.companyName!=null and queryParams.companyName.trim() neq ""'>
AND company_name like concat('%',#{queryParams.companyName},'%')
</if>
<!--线路id-->
<if test='queryParams.circuitId!=null and queryParams.circuitId.trim() neq ""'>
AND circuit_id = #{queryParams.circuitId}
</if>
<!--线路名称-->
<if test='queryParams.circuitName!=null and queryParams.circuitName.trim() neq ""'>
AND circuit_name like concat('%',#{queryParams.circuitName},'%')
</if>
<!--车牌号-->
<if test='queryParams.carNumber!=null and queryParams.carNumber.trim() neq ""'>
AND car_number like concat('%',#{queryParams.carNumber},'%')
</if>
<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>
</where>
ORDER BY
create_time desc
</select>
<!--根据日期分类查询-->
<select id="getDateLogisticsEntruckingLogPageList" resultType="cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogDatePageVo" parameterType="cc.hiver.core.logisticsentruckinglog.vo.LogisticsEntruckingLogQueryVo">
select
DATE(create_time) AS entrucking_date
from t_logistics_entrucking_log
<where>
<!--物流公司id-->
<if test='queryParams.companyId!=null and queryParams.companyId.trim() neq ""'>
AND company_id = #{queryParams.companyId}
</if>
<!--物流公司名称-->
<if test='queryParams.companyName!=null and queryParams.companyName.trim() neq ""'>
AND company_name like concat('%',#{queryParams.companyName},'%')
</if>
<!--线路id-->
<if test='queryParams.circuitId!=null and queryParams.circuitId.trim() neq ""'>
AND circuit_id = #{queryParams.circuitId}
</if>
<!--线路名称-->
<if test='queryParams.circuitName!=null and queryParams.circuitName.trim() neq ""'>
AND circuit_name like concat('%',#{queryParams.circuitName},'%')
</if>
<!--车牌号-->
<if test='queryParams.carNumber!=null and queryParams.carNumber.trim() neq ""'>
AND car_number like concat('%',#{queryParams.carNumber},'%')
</if>
<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>
</where>
GROUP BY
DATE(create_time)
ORDER BY
DATE(create_time)
</select>
<update id="deleteByCarNumberAndCompanyId" >
update t_logistics_entrucking_log
set del_flag = '1'

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

@ -4,6 +4,7 @@
<resultMap id="BaseResultMap" type="cc.hiver.core.logisticsorder.entity.LogisticsOrder">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_by_name" jdbcType="VARCHAR" property="createByName" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="del_flag" jdbcType="INTEGER" property="delFlag" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
@ -37,13 +38,14 @@
<result column="receiving_user_id" jdbcType="VARCHAR" property="receivingUserId" />
<result column="receiving_user_name" jdbcType="VARCHAR" property="receivingUserName" />
<result column="image_path" jdbcType="VARCHAR" property="imagePath" />
<result column="payment_for_goods" jdbcType="VARCHAR" property="paymentForGoods" />
</resultMap>
<sql id="Base_Column_List">
id, create_by, create_time, del_flag, update_by, update_time,company_id, company_name, circuit_id, circuit_name,
id, create_by, create_by_name, create_time, del_flag, update_by, update_time,company_id, company_name, circuit_id, circuit_name,
shipper_name, shipper_mobile, shipper_address, receiver_name, receiver_mobile, receiver_address,
go_station_id, go_station_name, arrival_station_id, arrival_station_name, weight, count, freight, premium,
transit_fee, tips, method_of_settlement, cost, all_cost, order_number, object_name, remark, receiving_user_id, receiving_user_name,image_path
transit_fee, tips, method_of_settlement, cost, all_cost, order_number, object_name, remark, receiving_user_id, receiving_user_name,image_path, payment_for_goods
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
@ -60,11 +62,11 @@
<insert id="insert" parameterType="cc.hiver.core.logisticsorder.entity.LogisticsOrder">
insert into t_logistics_order
(id, create_by, create_time, del_flag, update_by, update_time,company_id, company_name, circuit_id, circuit_name,
(id, create_by, create_by_name, create_time, del_flag, update_by, update_time,company_id, company_name, circuit_id, circuit_name,
shipper_name, shipper_mobile, shipper_address, receiver_name, receiver_mobile, receiver_address,
go_station_id, go_station_name, arrival_station_id, arrival_station_name, weight, count, freight, premium,
transit_fee, tips, method_of_settlement, cost, all_cost, order_number, object_name, remark, receiving_user_id, receiving_user_name,image_path)
values (#{id,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
transit_fee, tips, method_of_settlement, cost, all_cost, order_number, object_name, remark, receiving_user_id, receiving_user_name,image_path, payment_for_goods)
values (#{id,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createByName,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
#{delFlag,jdbcType=INTEGER}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP},
#{companyId,jdbcType=VARCHAR}, #{companyName,jdbcType=VARCHAR}, #{circuitId,jdbcType=VARCHAR}, #{circuitName,jdbcType=VARCHAR},
#{shipperName,jdbcType=VARCHAR}, #{shipperMobile,jdbcType=VARCHAR}, #{shipperAddress,jdbcType=VARCHAR},
@ -73,7 +75,7 @@
#{weight,jdbcType=DECIMAL}, #{count,jdbcType=INTEGER}, #{freight,jdbcType=DECIMAL}, #{premium,jdbcType=DECIMAL},
#{transitFee,jdbcType=DECIMAL}, #{tips,jdbcType=DECIMAL}, #{methodOfSettlement,jdbcType=VARCHAR}, #{cost,jdbcType=DECIMAL},
#{allCost,jdbcType=DECIMAL}, #{orderNumber,jdbcType=VARCHAR}, #{objectName,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR},
#{receivingUserId,jdbcType=VARCHAR}, #{receivingUserName,jdbcType=VARCHAR},#{imagePath,jdbcType=VARCHAR})
#{receivingUserId,jdbcType=VARCHAR}, #{receivingUserName,jdbcType=VARCHAR},#{imagePath,jdbcType=VARCHAR}, #{paymentForGoods,jdbcType=VARCHAR})
</insert>
<!--管理商品分页列表-->

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

@ -12,10 +12,11 @@
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
<result column="company_id" jdbcType="VARCHAR" property="companyId" />
<result column="user_role" jdbcType="VARCHAR" property="userRole" />
<result column="password" jdbcType="VARCHAR" property="password" />
</resultMap>
<sql id="Base_Column_List">
id, create_by, create_time, del_flag, update_by, update_time,nick_name, mobile, company_id, user_role
id, create_by, create_time, del_flag, update_by, update_time,nick_name, mobile, company_id, user_role,password
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
@ -32,10 +33,10 @@
<insert id="insert" parameterType="cc.hiver.core.logisticsuser.entity.LogisticsUser">
insert into t_logistics_user
(id, create_by, create_time, del_flag, update_by, update_time, nick_name, mobile, company_id, user_role)
(id, create_by, create_time, del_flag, update_by, update_time, nick_name, mobile, company_id, user_role,password)
values (#{id,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
#{delFlag,jdbcType=INTEGER}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP},
#{nickName,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{companyId,jdbcType=VARCHAR}, #{userRole,jdbcType=VARCHAR})
#{nickName,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{companyId,jdbcType=VARCHAR}, #{userRole,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR})
</insert>
<update id="updateByExampleSelective" parameterType="map">
@ -85,7 +86,8 @@
nick_name = #{record.nickName,jdbcType=VARCHAR},
mobile = #{record.mobile,jdbcType=VARCHAR},
company_id = #{record.companyId,jdbcType=VARCHAR},
user_role = #{record.userRole,jdbcType=VARCHAR}
user_role = #{record.userRole,jdbcType=VARCHAR},
password = #{record.password,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKeySelective" parameterType="cc.hiver.core.logisticsuser.entity.LogisticsUser">
@ -132,7 +134,8 @@
nick_name = #{nickName,jdbcType=VARCHAR},
mobile = #{mobile,jdbcType=VARCHAR},
company_id = #{companyId,jdbcType=VARCHAR},
user_role = #{userRole,jdbcType=VARCHAR}
user_role = #{userRole,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
@ -155,7 +158,7 @@
<select id="findByMobile" resultMap="BaseResultMap">
select
t.id, t.create_by,t.create_time,t.del_flag,t.update_by,t.update_time,t.nick_name,t.mobile,t.company_id,t.user_role
t.id, t.create_by,t.create_time,t.del_flag,t.update_by,t.update_time,t.nick_name,t.mobile,t.company_id,t.user_role,t.password
from t_logistics_user t
where t.del_flag = '0'
and t.mobile = #{mobile}

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

@ -162,10 +162,10 @@ public class LcomAuthController {
@RequestMapping(value = "/chooseCompany", method = RequestMethod.POST)
@ApiOperation("登录后-选择物流公司")
@RateLimiter(name = "sendLoginSms", ipLimit = true)
public Result chooseCompany(@RequestParam String companyId) {
public Result chooseCompany(@RequestParam String companyId,@RequestParam String username) {
final boolean saveLogin = true;
final LogiticsCompany logiticsCompany = logiticsCompanyService.findById(companyId);
final String accessToken = securityUtil.getAppWLToken(logiticsCompany, saveLogin);
final String accessToken = securityUtil.getAppWLToken(logiticsCompany, saveLogin,username);
final LcomDetailVO detailVO = new LcomDetailVO();
detailVO.setLogiticsCompany(logiticsCompany);

10
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/controller/PurchaseOcrPictureController.java

@ -84,4 +84,14 @@ public class PurchaseOcrPictureController {
JSONObject jsonObject = purchaseOcrPictureService.getCustomInfoOfAi(questionMsg);
return ResultUtil.data(jsonObject);
}
@RequestMapping(value = "/getLogisticsOrderOfAi", method = RequestMethod.POST)
@ApiOperation("物流公司AI语音开单")
public Result getLogisticsOrderOfAi(String questionMsg) {
if(StringUtils.isEmpty(questionMsg)){
return ResultUtil.error("信息不能为空!");
}
JSONObject jsonObject = purchaseOcrPictureService.getLogisticsOrderOfAi(questionMsg);
return ResultUtil.data(jsonObject);
}
}

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/purchaseocr/service/PurchaseOcrPictureService.java

@ -27,4 +27,6 @@ public interface PurchaseOcrPictureService {
JSONObject callWithMessageOfPurchase(String questionMsg) throws NoApiKeyException, InputRequiredException;
JSONObject getCustomInfoOfAi(String questionMsg);
JSONObject getLogisticsOrderOfAi(String questionMsg);
}

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

@ -14,10 +14,7 @@ import cc.hiver.mall.pojo.vo.PurchaseVo;
import cc.hiver.mall.purchaseocr.entity.PurchaseOcrPicture;
import cc.hiver.mall.purchaseocr.mapper.PurchaseOcrPictureMapper;
import cc.hiver.mall.purchaseocr.service.PurchaseOcrPictureService;
import cc.hiver.mall.purchaseocr.vo.CustomInfoOfAiVo;
import cc.hiver.mall.purchaseocr.vo.PurchaseOciPictureAddVo;
import cc.hiver.mall.purchaseocr.vo.PurchaseOcrCountVo;
import cc.hiver.mall.purchaseocr.vo.PurchaseOcrExample;
import cc.hiver.mall.purchaseocr.vo.*;
import cc.hiver.mall.saleaimsg.entity.SaleAiMsg;
import cc.hiver.mall.service.ShopService;
import cc.hiver.mall.service.mybatis.*;
@ -537,6 +534,90 @@ public class PurchaseOcrPictureServiceImpl implements PurchaseOcrPictureService
return returnJsonObject;
}
@Override
public JSONObject getLogisticsOrderOfAi(String questionMsg) {
final JSONObject returnJsonObject = new JSONObject();
final List<LogisticsOrderOfAiVo> logisticsOrderOfAiVos = new ArrayList<>();
try {
final JSONObject jsonObject = AliOcrUtil.callWithMessageOfLogisticsOrder(questionMsg);
final String resultContent = jsonObject.get("resultContent").toString();
final JSONArray json = JSON.parseArray(resultContent);
for (int i = 0; i < json.size(); i++) {
final LogisticsOrderOfAiVo logisticsOrderOfAiVo = new LogisticsOrderOfAiVo();
final JSONObject object = json.getJSONObject(i);
final String shipperName = object.getString("shipperName");
logisticsOrderOfAiVo.setShipperName(shipperName);
final String shipperMobile = object.getString("shipperMobile");
logisticsOrderOfAiVo.setShipperMobile(shipperMobile);
final String receiverName = object.getString("receiverName");
logisticsOrderOfAiVo.setReceiverName(receiverName);
final String receiverMobile = object.getString("receiverMobile");
logisticsOrderOfAiVo.setReceiverMobile(receiverMobile);
final String arrivalStationName = object.getString("arrivalStationName");
logisticsOrderOfAiVo.setArrivalStationName(arrivalStationName);
final String weightStr = object.getString("weight");
BigDecimal weight = BigDecimal.ZERO;
// 使用正则表达式提取数字部分
final Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?");
if(StringUtils.isNotEmpty(weightStr)){
final Matcher matcher = pattern.matcher(weightStr);
if (matcher.find()) {
// 获取匹配到的数字字符串并转换为BigDecimal
final String numericPart = matcher.group();
weight = new BigDecimal(numericPart);
}
}
logisticsOrderOfAiVo.setWeight(weight);
final String countStr = object.getString("count");
int count = 0;
if(StringUtils.isNotEmpty(countStr)){
final Matcher countMatchered = COMPILE.matcher(countStr);
String replaced = "";
if (countMatchered.find()) {
replaced = countMatchered.group();
}
count = Integer.parseInt(StringUtils.isEmpty(replaced) ? "0" : replaced);
}
logisticsOrderOfAiVo.setCount(count);
final String tipsStr = object.getString("tips");
BigDecimal tips = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(tipsStr)){
// 使用正则表达式提取数字部分
final Matcher matcherOfTips = pattern.matcher(tipsStr);
if (matcherOfTips.find()) {
// 获取匹配到的数字字符串并转换为BigDecimal
final String numericPart = matcherOfTips.group();
tips = new BigDecimal(numericPart);
}
}
logisticsOrderOfAiVo.setTips(tips);
final String premiumStr = object.getString("premium");
BigDecimal premium = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(premiumStr)){
// 使用正则表达式提取数字部分
final Matcher matcherOfPremium = pattern.matcher(premiumStr);
if (matcherOfPremium.find()) {
// 获取匹配到的数字字符串并转换为BigDecimal
final String numericPart = matcherOfPremium.group();
premium = new BigDecimal(numericPart);
}
}
logisticsOrderOfAiVo.setPremium(premium);
logisticsOrderOfAiVos.add(logisticsOrderOfAiVo);
}
} catch (Exception e) {
log.error(e.getMessage(),e);
returnJsonObject.put("code", 500);
}
returnJsonObject.put("data", logisticsOrderOfAiVos);
return returnJsonObject;
}
/**
* 使用正则表达式替换输入字符串中连续的字符为相应数量的X字符
*

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

@ -0,0 +1,37 @@
package cc.hiver.mall.purchaseocr.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class LogisticsOrderOfAiVo {
@ApiModelProperty(value = "发货人")
private String shipperName;
@ApiModelProperty(value = "发货电话")
private String shipperMobile;
@ApiModelProperty(value = "收货人")
private String receiverName;
@ApiModelProperty(value = "收货电话")
private String receiverMobile;
@ApiModelProperty(value = "重量")
private BigDecimal weight;
@ApiModelProperty(value = "件数")
private Integer count;
@ApiModelProperty(value = "小费")
private BigDecimal tips;
@ApiModelProperty(value = "保费")
private BigDecimal premium;
@ApiModelProperty(value = "到达站")
private String arrivalStationName;
}

43
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/AliOcrUtil.java

@ -1241,4 +1241,47 @@ public class AliOcrUtil {
jsonObject.put("msg", result.getOutput().getChoices().get(0).getMessage().getContent());
return jsonObject;
}
/**
* 物流语音开单
* @author 王富康
* @date 2024/9/5
* @param questionMsg
* @return JSONObject
*/
public static JSONObject callWithMessageOfLogisticsOrder(String questionMsg) throws NoApiKeyException, ApiException, InputRequiredException {
final JSONObject jsonObject = new JSONObject();
Constants.apiKey = "sk-bcfa4865b89548acb8225f910f13d682";
final StopWatch stopWatch = new StopWatch("Ai回答计时");
final Generation gen = new Generation();
final MessageManager msgManager = new MessageManager(10);
final Message systemMsg =
Message.builder().role(Role.SYSTEM.getValue()).content("You are a helpful assistant.").build();
questionMsg += "你是一个物流开票员;\n" +
"请帮我把所有内容封装为JSON,json格式为:{\"shipperName\":\"发货人\",\"shipperMobile\":\"发货电话\",\"receiverName\":\"收货人\",\"receiverMobile\":\"收货电话\",\"weight\":\"重量\",\"count\":\"数量\",\"tips\":\"小费\",\"premium\":\"保费\",\"arrivalStationName\":\"到达站\"}" +
"1.没有识别到的字段,赋值\"\";" +
"2.weight、count、tips、premium这几个字段只返回数字;" +
"3.只输出1条JSON数据即可,禁止返回除JSON数据外的任何内容!返回的JSON数据不用换行,以最快的速度返回!";
final Message userMsg = Message.builder().role(Role.USER.getValue()).content(questionMsg).build();
msgManager.add(systemMsg);
msgManager.add(userMsg);
stopWatch.start("开始回答");
final QwenParam param =
QwenParam.builder().model("qwen2-72b-instruct").messages(msgManager.get())
.resultFormat(QwenParam.ResultFormat.MESSAGE)
.build();
final GenerationResult result = gen.call(param);
log.info(result.toString());
// 解析结果
final String text = result.getOutput().getChoices().get(0).getMessage().getContent();
// 根据{}截取数据
final int startIndex = text.indexOf('{');
final int endIndex = text.lastIndexOf('}');
final String jsonStr = '[' + text.substring(startIndex, endIndex + 1) + ']';
stopWatch.stop();
log.info(stopWatch.prettyPrint());
jsonObject.put("resultContent", jsonStr);
jsonObject.put("msg", result.getOutput().getChoices().get(0).getMessage().getContent());
return jsonObject;
}
}
Loading…
Cancel
Save