Browse Source

物流优化

dev
wangfukang 1 year ago
parent
commit
65643f2285
  1. 14
      hiver-admin/test-output/test-report.html
  2. 4
      hiver-core/src/main/java/cc/hiver/core/common/constant/DealingsRecordConstant.java
  3. 92
      hiver-core/src/main/java/cc/hiver/core/logisticsaddressbook/service/impl/LogisticsAddressBookServiceImpl.java
  4. 23
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/controller/DebtController.java
  5. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/mapper/DebtMapper.java
  6. 8
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/service/DebtService.java
  7. 62
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/service/impl/DebtServiceImpl.java
  8. 2
      hiver-modules/hiver-mall/src/main/resources/mapper/DealingsRecordMapper.xml

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

@ -35,7 +35,7 @@
<a href="#"><span class="badge badge-primary">Hiver</span></a> <a href="#"><span class="badge badge-primary">Hiver</span></a>
</li> </li>
<li class="m-r-10"> <li class="m-r-10">
<a href="#"><span class="badge badge-primary">十一月 18, 2024 20:21:08</span></a> <a href="#"><span class="badge badge-primary">十一月 21, 2024 21:56:37</span></a>
</li> </li>
</ul> </ul>
</div> </div>
@ -84,7 +84,7 @@
<div class="test-detail"> <div class="test-detail">
<span class="meta text-white badge badge-sm"></span> <span class="meta text-white badge badge-sm"></span>
<p class="name">passTest</p> <p class="name">passTest</p>
<p class="text-sm"><span>20:21:09 下午</span> / <span>0.016 secs</span></p> <p class="text-sm"><span>21:56:37 下午</span> / <span>0.016 secs</span></p>
</div> </div>
<div class="test-contents d-none"> <div class="test-contents d-none">
<div class="detail-head"> <div class="detail-head">
@ -92,8 +92,8 @@
<div class="info"> <div class="info">
<div class='float-right'><span class='badge badge-default'>#test-id=1</span></div> <div class='float-right'><span class='badge badge-default'>#test-id=1</span></div>
<h5 class="test-status text-pass">passTest</h5> <h5 class="test-status text-pass">passTest</h5>
<span class='badge badge-success'>11.18.2024 20:21:09</span> <span class='badge badge-success'>11.21.2024 21:56:37</span>
<span class='badge badge-danger'>11.18.2024 20:21:09</span> <span class='badge badge-danger'>11.21.2024 21:56:37</span>
<span class='badge badge-default'>0.016 secs</span> <span class='badge badge-default'>0.016 secs</span>
</div> </div>
<div class="m-t-10 m-l-5"></div> <div class="m-t-10 m-l-5"></div>
@ -104,7 +104,7 @@
<tbody> <tbody>
<tr class="event-row"> <tr class="event-row">
<td><span class="badge log pass-bg">Pass</span></td> <td><span class="badge log pass-bg">Pass</span></td>
<td>20:21:09</td> <td>21:56:37</td>
<td> <td>
Test passed Test passed
</td> </td>
@ -128,13 +128,13 @@
<div class="col-md-3"> <div class="col-md-3">
<div class="card"><div class="card-body"> <div class="card"><div class="card-body">
<p class="m-b-0">Started</p> <p class="m-b-0">Started</p>
<h3>十一月 18, 2024 20:21:08</h3> <h3>十一月 21, 2024 21:56:37</h3>
</div></div> </div></div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<div class="card"><div class="card-body"> <div class="card"><div class="card-body">
<p class="m-b-0">Ended</p> <p class="m-b-0">Ended</p>
<h3>十一月 18, 2024 20:21:09</h3> <h3>十一月 21, 2024 21:56:37</h3>
</div></div> </div></div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">

4
hiver-core/src/main/java/cc/hiver/core/common/constant/DealingsRecordConstant.java

@ -13,8 +13,8 @@ public interface DealingsRecordConstant {
Integer[] TYPE = {0, 1}; Integer[] TYPE = {0, 1};
/** /**
* 交易类型0:开单1退货(应该是没用到)2回款3新增客户/供应商欠款4充值5追加欠款;6:撤销订单;7:入库8删除交易记录; 9:入库退货10撤销入库退货 * 交易类型0:开单1退货(应该是没用到)2回款3新增客户/供应商欠款4充值5追加欠款;6:撤销订单;7:入库8删除交易记录; 9:入库退货10撤销入库退货;99:撤销欠款记录
*/ */
Integer[] DEALINGS_TYPE = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; Integer[] DEALINGS_TYPE = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,99};
} }

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

@ -46,25 +46,27 @@ public class LogisticsAddressBookServiceImpl extends ServiceImpl<LogisticsAddres
//根据名称、电话、地址查询看是不是存在,如果不存在则新建一条 //根据名称、电话、地址查询看是不是存在,如果不存在则新建一条
if (StringUtils.isEmpty(logisticsOrder.getShipperId())) { if (StringUtils.isEmpty(logisticsOrder.getShipperId())) {
// 创建发货人地址簿 if (StringUtils.isNotEmpty(logisticsOrder.getShipperName()) || StringUtils.isNotEmpty(logisticsOrder.getShipperAddress()) || StringUtils.isNotEmpty(logisticsOrder.getShipperMobile())) {
final LogisticsAddressBook shipperAddressBook = new LogisticsAddressBook(); // 创建发货人地址簿
// 设置发货人名称,从物流订单的发货人名称中获取 final LogisticsAddressBook shipperAddressBook = new LogisticsAddressBook();
shipperAddressBook.setShipperOrReceiverName(logisticsOrder.getShipperName()); // 设置发货人名称,从物流订单的发货人名称中获取
// 设置地址信息,从物流订单的发货人地址获取 shipperAddressBook.setShipperOrReceiverName(logisticsOrder.getShipperName());
shipperAddressBook.setAddressInfo(logisticsOrder.getShipperAddress()); // 设置地址信息,从物流订单的发货人地址获取
// 设置地址类型,1表示发货人地址 shipperAddressBook.setAddressInfo(logisticsOrder.getShipperAddress());
shipperAddressBook.setAddressType(1); // 设置地址类型,1表示发货人地址
// 设置公司ID,从物流订单中获取 shipperAddressBook.setAddressType(1);
shipperAddressBook.setCompanyId(logisticsOrder.getCompanyId()); // 设置公司ID,从物流订单中获取
// 设置公司名称,从物流订单中获取 shipperAddressBook.setCompanyId(logisticsOrder.getCompanyId());
shipperAddressBook.setCompanyName(logisticsOrder.getCompanyName()); // 设置公司名称,从物流订单中获取
// 设置创建人,从物流订单中获取 shipperAddressBook.setCompanyName(logisticsOrder.getCompanyName());
shipperAddressBook.setCreateBy(logisticsOrder.getCreateBy()); // 设置创建人,从物流订单中获取
// 设置联系电话,从物流订单的发货人手机信息中获取 shipperAddressBook.setCreateBy(logisticsOrder.getCreateBy());
shipperAddressBook.setMobile(logisticsOrder.getShipperMobile()); // 设置联系电话,从物流订单的发货人手机信息中获取
list.add(shipperAddressBook); shipperAddressBook.setMobile(logisticsOrder.getShipperMobile());
// 回填新增的发货人id list.add(shipperAddressBook);
logisticsOrder.setShipperId(shipperAddressBook.getId()); // 回填新增的发货人id
logisticsOrder.setShipperId(shipperAddressBook.getId());
}
} else { } else {
// 有id,查询,并更新名称 // 有id,查询,并更新名称
final LogisticsAddressBook oldLogisticsAddressBook = logisticsAddressBookMapper.selectById(logisticsOrder.getShipperId()); final LogisticsAddressBook oldLogisticsAddressBook = logisticsAddressBookMapper.selectById(logisticsOrder.getShipperId());
@ -77,26 +79,29 @@ public class LogisticsAddressBookServiceImpl extends ServiceImpl<LogisticsAddres
} }
if (StringUtils.isEmpty(logisticsOrder.getReceiverId())) { if (StringUtils.isEmpty(logisticsOrder.getReceiverId())) {
// 创建收货人地址簿 if (StringUtils.isNotEmpty(logisticsOrder.getReceiverName()) || StringUtils.isNotEmpty(logisticsOrder.getReceiverAddress()) || StringUtils.isNotEmpty(logisticsOrder.getReceiverMobile())) {
final LogisticsAddressBook reciverAddressBook = new LogisticsAddressBook(); // 创建收货人地址簿
// 设置收货人名称,从物流订单的收货人名称中获取 final LogisticsAddressBook reciverAddressBook = new LogisticsAddressBook();
reciverAddressBook.setShipperOrReceiverName(logisticsOrder.getReceiverName()); // 设置收货人名称,从物流订单的收货人名称中获取
// 设置地址信息,从物流订单的发货人地址获取 reciverAddressBook.setShipperOrReceiverName(logisticsOrder.getReceiverName());
reciverAddressBook.setAddressInfo(logisticsOrder.getReceiverAddress()); // 设置地址信息,从物流订单的发货人地址获取
// 设置地址类型,1表示发货人地址 reciverAddressBook.setAddressInfo(logisticsOrder.getReceiverAddress());
reciverAddressBook.setAddressType(2); // 设置地址类型,1表示发货人地址
// 设置公司ID,从物流订单中获取 reciverAddressBook.setAddressType(2);
reciverAddressBook.setCompanyId(logisticsOrder.getCompanyId()); // 设置公司ID,从物流订单中获取
// 设置公司名称,从物流订单中获取 reciverAddressBook.setCompanyId(logisticsOrder.getCompanyId());
reciverAddressBook.setCompanyName(logisticsOrder.getCompanyName()); // 设置公司名称,从物流订单中获取
// 设置创建人,从物流订单中获取 reciverAddressBook.setCompanyName(logisticsOrder.getCompanyName());
reciverAddressBook.setCreateBy(logisticsOrder.getCreateBy()); // 设置创建人,从物流订单中获取
// 设置联系电话,从物流订单的发货人手机信息中获取 reciverAddressBook.setCreateBy(logisticsOrder.getCreateBy());
reciverAddressBook.setMobile(logisticsOrder.getReceiverMobile()); // 设置联系电话,从物流订单的发货人手机信息中获取
list.add(reciverAddressBook); reciverAddressBook.setMobile(logisticsOrder.getReceiverMobile());
list.add(reciverAddressBook);
// 回填新增的收货人id
logisticsOrder.setReceiverId(reciverAddressBook.getId()); // 回填新增的收货人id
logisticsOrder.setReceiverId(reciverAddressBook.getId());
}
} else { } else {
// 有id,查询,并更新名称 // 有id,查询,并更新名称
final LogisticsAddressBook oldLogisticsAddressBook = logisticsAddressBookMapper.selectById(logisticsOrder.getReceiverId()); final LogisticsAddressBook oldLogisticsAddressBook = logisticsAddressBookMapper.selectById(logisticsOrder.getReceiverId());
@ -122,16 +127,17 @@ public class LogisticsAddressBookServiceImpl extends ServiceImpl<LogisticsAddres
public IPage<LogisticsAddressBook> getLogisticsAddressBookPageList(LogisticsAddressBookQueryVo logisticsAddressBookQueryVo) { public IPage<LogisticsAddressBook> getLogisticsAddressBookPageList(LogisticsAddressBookQueryVo logisticsAddressBookQueryVo) {
final Page<LogisticsAddressBook> page = new Page<>(); final Page<LogisticsAddressBook> page = new Page<>();
final LambdaQueryWrapper<LogisticsAddressBook> wrapper = new LambdaQueryWrapper<>(); final LambdaQueryWrapper<LogisticsAddressBook> wrapper = new LambdaQueryWrapper<>();
if (logisticsAddressBookQueryVo != null && StringUtils.isNotEmpty(logisticsAddressBookQueryVo.getKeyWord())) {
wrapper.like(LogisticsAddressBook::getShipperOrReceiverName, logisticsAddressBookQueryVo.getKeyWord()).or()
.like(LogisticsAddressBook::getMobile, logisticsAddressBookQueryVo.getKeyWord());
}
if (logisticsAddressBookQueryVo != null && logisticsAddressBookQueryVo.getAddressType() != null) { if (logisticsAddressBookQueryVo != null && logisticsAddressBookQueryVo.getAddressType() != null) {
wrapper.eq(LogisticsAddressBook::getAddressType, logisticsAddressBookQueryVo.getAddressType()); wrapper.eq(LogisticsAddressBook::getAddressType, logisticsAddressBookQueryVo.getAddressType());
} }
if (logisticsAddressBookQueryVo != null && logisticsAddressBookQueryVo.getCompanyId() != null) { if (logisticsAddressBookQueryVo != null && logisticsAddressBookQueryVo.getCompanyId() != null) {
wrapper.eq(LogisticsAddressBook::getCompanyId, logisticsAddressBookQueryVo.getCompanyId()); wrapper.eq(LogisticsAddressBook::getCompanyId, logisticsAddressBookQueryVo.getCompanyId());
} }
if (logisticsAddressBookQueryVo != null && StringUtils.isNotEmpty(logisticsAddressBookQueryVo.getKeyWord())) {
wrapper.like(LogisticsAddressBook::getShipperOrReceiverName, logisticsAddressBookQueryVo.getKeyWord()).or()
.like(LogisticsAddressBook::getMobile, logisticsAddressBookQueryVo.getKeyWord());
}
page.setCurrent(logisticsAddressBookQueryVo.getPageNum()); page.setCurrent(logisticsAddressBookQueryVo.getPageNum());
page.setSize(logisticsAddressBookQueryVo.getPageSize()); page.setSize(logisticsAddressBookQueryVo.getPageSize());
return logisticsAddressBookMapper.selectPage(page, wrapper); return logisticsAddressBookMapper.selectPage(page, wrapper);

23
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/controller/DebtController.java

@ -130,4 +130,27 @@ public class DebtController {
final DebtOfShopVo debtOfShopVo = debtService.getAllBalanceByShopId(queryDebtVo); final DebtOfShopVo debtOfShopVo = debtService.getAllBalanceByShopId(queryDebtVo);
return new ResultUtil<>().setData(debtOfShopVo); return new ResultUtil<>().setData(debtOfShopVo);
} }
/**
* 撤销充值
*
* @param id
* @return Result
* @author 王富康
* @date 2024/11/20
*/
@RequestMapping(value = "/revokeDebt", method = RequestMethod.POST)
@ApiOperation("撤销充值")
public Result revokeDebt(String id, String remark) {
if (StringUtils.isEmpty(id)) {
return ResultUtil.error("欠款id不能为空");
}
try {
debtService.revokeDebt(id, remark);
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/debt/mapper/DebtMapper.java

@ -6,9 +6,11 @@ import cc.hiver.mall.debt.vo.QueryDebtVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@Repository
public interface DebtMapper extends BaseMapper<Debt> { public interface DebtMapper extends BaseMapper<Debt> {
Page<Debt> getDebtByShopId(Page<QueryDebtVo> page, @Param("queryDebtVo") QueryDebtVo queryDebtVo); Page<Debt> getDebtByShopId(Page<QueryDebtVo> page, @Param("queryDebtVo") QueryDebtVo queryDebtVo);

8
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/service/DebtService.java

@ -94,4 +94,12 @@ public interface DebtService extends IService<Debt> {
* @date 2024/10/11 * @date 2024/10/11
*/ */
DebtOfShopVo getAllBalanceByShopId(QueryDebtVo queryDebtVo); DebtOfShopVo getAllBalanceByShopId(QueryDebtVo queryDebtVo);
/**
* 撤销充值
* @author 王富康
* @date 2024/11/20
* @param id
*/
void revokeDebt(String id, String remark);
} }

62
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/debt/service/impl/DebtServiceImpl.java

@ -1,5 +1,6 @@
package cc.hiver.mall.debt.service.impl; package cc.hiver.mall.debt.service.impl;
import cc.hiver.core.common.constant.CommonConstant;
import cc.hiver.core.common.constant.DealingsRecordConstant; import cc.hiver.core.common.constant.DealingsRecordConstant;
import cc.hiver.core.common.exception.HiverException; import cc.hiver.core.common.exception.HiverException;
import cc.hiver.core.common.utils.SecurityUtil; import cc.hiver.core.common.utils.SecurityUtil;
@ -443,4 +444,65 @@ public class DebtServiceImpl extends ServiceImpl<DebtMapper, Debt> implements De
public DebtOfShopVo getAllBalanceByShopId(QueryDebtVo queryDebtVo) { public DebtOfShopVo getAllBalanceByShopId(QueryDebtVo queryDebtVo) {
return debtMapper.getAllBalanceByShopId(queryDebtVo); return debtMapper.getAllBalanceByShopId(queryDebtVo);
} }
/**
* 撤销欠款记录
*
* @param id
* @param remark
* @author 王富康
* @date 2024/11/20
*/
@Override
public void revokeDebt(String id, String remark) {
final DealingsRecord oldDealingsRecord = dealingsRecordService.getById(id);
if (oldDealingsRecord == null) {
throw new HiverException("未查询到欠款记录信息!");
}
// 获取当前欠款
final String shopId = securityUtil.getShopId();
final User user = securityUtil.getCurrUser();
final Debt oldDebt = debtMapper.selectByUserId(shopId, oldDealingsRecord.getDealingsUserId());
// 回退金额
// 需要回退的金额
final BigDecimal needRevokeAmount = oldDealingsRecord.getAmount();
BigDecimal lastDebtAmount = BigDecimal.ZERO;
BigDecimal newDebtAmount = BigDecimal.ZERO;
lastDebtAmount = oldDebt.getAmountOwed() == null ? BigDecimal.ZERO : oldDebt.getAmountOwed();
// 计算欠款
if (oldDebt.getAmountOwed() != null) {
newDebtAmount = oldDebt.getAmountOwed().add(needRevokeAmount);
}
oldDebt.setAmountOwed(newDebtAmount);
debtMapper.updateById(oldDebt);
// 获取欠款记录
// 2. 新增欠款记录
// 创建人
final DealingsRecord dealingsRecord = new DealingsRecord();
dealingsRecord.setCreateBy(user.getId());
dealingsRecord.setCreateByName(user.getNickname());
dealingsRecord.setCreateTime(new Date());
dealingsRecord.setDelFlag(CommonConstant.DEL_FLAG_FALSE);
dealingsRecord.setDealingsUserId(oldDebt.getUserId());
dealingsRecord.setDealingsUserName(oldDebt.getUserName());
dealingsRecord.setDealingsWay("撤销欠款记录");
dealingsRecord.setShopId(shopId);
// 上次欠款
dealingsRecord.setLastDebtAmount(lastDebtAmount);
// 最新欠款
dealingsRecord.setBalanceDue(newDebtAmount);
// 金额
dealingsRecord.setAmount(needRevokeAmount);
// 充值
dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[11]);
dealingsRecord.setDealingsTime(new Date());
dealingsRecord.setRemark(remark);
dealingsRecord.setUserType(DealingsRecordConstant.TYPE[1]);
dealingsRecordService.save(dealingsRecord);
// 原来的交易记录变为已撤销
oldDealingsRecord.setDelFlag(CommonConstant.DEL_FLAG_TRUE);
dealingsRecordService.updateById(oldDealingsRecord);
}
} }

2
hiver-modules/hiver-mall/src/main/resources/mapper/DealingsRecordMapper.xml

@ -203,7 +203,7 @@
WHERE WHERE
<!--20240802 排除掉删除的交易记录--> <!--20240802 排除掉删除的交易记录-->
tdr.del_flag != 2 tdr.del_flag != 2
and tdr.dealings_type in ( '2','3','4','5','6','7' ) and tdr.dealings_type in ( '2','3','4','5','6','7','99' )
and tdr.dealings_user_id = #{supplierBillQueryVo.supplierId} and tdr.dealings_user_id = #{supplierBillQueryVo.supplierId}
and tdr.shop_id = #{supplierBillQueryVo.shopId} and tdr.shop_id = #{supplierBillQueryVo.shopId}
and (tdr.sale_id is null or ts.in_storage_status = '1') and (tdr.sale_id is null or ts.in_storage_status = '1')

Loading…
Cancel
Save