订单完成回收员累计信息更新功能

wxpay
LI-CCONG\李聪聪 7 months ago
parent a99c7ec2f0
commit d8cd33a696

@ -0,0 +1,30 @@
package cc.yunxi.common.domain;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
public class LambdaUpdateWrapperX<T> extends LambdaUpdateWrapper<T> {
public LambdaUpdateWrapperX() {
super();
}
public LambdaUpdateWrapperX(Class<T> entityClass) {
super(entityClass);
}
public LambdaUpdateWrapperX<T> incrField(SFunction<T, ?> columns, Object value) {
String columnsToString = super.columnToString(columns);
String format = String.format("%s = %s + %s", columnsToString,columnsToString, value);
setSql(format);
return this;
}
public LambdaUpdateWrapperX<T> descField(SFunction<T, ?> columns, Object value) {
String columnsToString = super.columnToString(columns);
String format = String.format("%s = %s - %s", columnsToString,columnsToString, value);
setSql(format);
return this;
}
}

@ -200,7 +200,8 @@ public class RecycleOrderController {
String orderLongitude = orderRespVO.getLocation().getLongitude();
String orderLatitude = orderRespVO.getLocation().getLatitude();
BigDecimal distance = CommonUtil.getDistance(longitude, latitude, orderLongitude, orderLatitude);
orderRespVO.setDistance(distance.toString().concat("km"));
// orderRespVO.setDistance(distance.toString().concat("km"));
orderRespVO.setDistance(distance.doubleValue());
}
}

@ -49,6 +49,11 @@ public class RecycleStationController {
}
Page<RecycleStation> result = recycleStationService.queryStationByPage(recycleStationQuery);
PageDTO<RecycleStationRespVO> recycleStationPageVO = PageDTO.of(result, RecycleStationRespVO.class);
List<RecycleStationRespVO> recycleStationRespVOList = recycleStationPageVO.getList();
recycleStationRespVOList.forEach(stationRespVO -> {
List<ProductRespVO> produceList = recycleStationService.getStationProduct(stationRespVO.getId());
stationRespVO.setStationProducts(produceList);
}); // 性能优化 todo
return CommonResult.success(recycleStationPageVO);
}

@ -64,7 +64,7 @@ public class EnterpriseAccountBill {
@ApiModelProperty("创建时间")
@TableField("creator_time")
@TableField("f_creator_time")
private LocalDateTime creatorTime;
@ApiModelProperty("备注")

@ -91,6 +91,10 @@ public class RecycleOrder {
@TableField("staffs_name")
private String staffsName;
@ApiModelProperty("订单距离(回收员专用)")
@TableField("distance")
private Double distance;
@ApiModelProperty("下单时间")
@TableField("f_creator_time")
private LocalDateTime creatorTime;
@ -163,8 +167,4 @@ public class RecycleOrder {
// @TableField("is_deleted")
// private Integer isDeleted;
@ApiModelProperty("订单距离(回收员专用)")
@TableField(exist = false)
private String distance;
}

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import io.swagger.annotations.ApiModel;

@ -124,7 +124,7 @@ public class RecycleOrderRespVO {
// private Integer isDeleted;
@ApiModelProperty("订单距离(回收员专用)")
private String distance;
private Double distance;
@ApiModelProperty("散户地址信息")
private ClientAddressSimpleVO addressInfo;

@ -8,6 +8,8 @@ import cc.yunxi.domain.vo.recycler.RecyclerUpdateVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
/**
*
*/
@ -48,4 +50,13 @@ public interface IRecyclerService extends IService<Recycler> {
* @param recyclerUpdateVO
*/
void updateRecycler(RecyclerUpdateVO recyclerUpdateVO);
/**
*
* @param recyclerId
* @param distance
* @param amount
*/
void totalTick(String recyclerId, Double distance, BigDecimal amount);
}

@ -247,9 +247,10 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
BigDecimal balance = client.getBanlance();
String remark;
LocalDateTime now = LocalDateTime.now();
String amountStr = String.valueOf(amount.setScale(2));
if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入
balance = balance.add(amount);
remark = "废品回收结算,收入" + amount + "元";
remark = "废品回收结算,收入" + amountStr + "元";
// 更新商户资金
Enterprise enterprise = enterpriseService.getEnterpriseByStationId(stationId);
@ -268,7 +269,7 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
accountBill.setAccountBalance(fund);
accountBill.setPayoutAmount(amount);
accountBill.setOrderNumber(orderNo);
accountBill.setRemark("支付给散户"+ amount + "元");
accountBill.setRemark("支付给散户"+ amountStr + "元");
accountBill.setCreatorTime(now);
accountBillMapper.insert(accountBill);
@ -277,7 +278,7 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
throw new BizIllegalException("余额不足");
}
balance = balance.subtract(amount);
remark = "微信提现" + amount + "元";
remark = "微信提现" + amountStr + "元";
}
// 更新散户余额
client.setBanlance(balance);

@ -13,10 +13,7 @@ import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailCreateVO;
import cc.yunxi.domain.vo.recycleorderdetail.RecycleOrderDetailUpdateVO;
import cc.yunxi.enums.*;
import cc.yunxi.mapper.RecycleOrderMapper;
import cc.yunxi.service.IClientService;
import cc.yunxi.service.IRecycleOrderProductService;
import cc.yunxi.service.IRecycleOrderService;
import cc.yunxi.service.IRecycleStationService;
import cc.yunxi.service.*;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -49,6 +46,9 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
@Resource
private IClientService clientService;
@Resource
private IRecyclerService recyclerService;
@Resource
private IRecycleOrderProductService recycleOrderProductService;
@ -117,6 +117,7 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
recycleOrder.setClientName(client.getNickName());
recycleOrder.setClientMobile(client.getMobilePhone());
recycleOrder.setOrderNumber(idNumber);
recycleOrder.setDistance(distance.doubleValue());
recycleOrder.setOrderType(OrderTypeEnum.SH_ORDER);
recycleOrder.setOrderStatus(OrderStatusEnum.PENDING);
recycleOrder.setCreatorTime(LocalDateTime.now());
@ -237,13 +238,14 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
// 记录关键信息
String clientId = recycleOrder.getClientId();
String recyclerId = recycleOrder.getStaffsId();
String orderNumber = recycleOrder.getOrderNumber();
String recycleStationId = recycleOrder.getRecycleStationId();
recycleOrder = BeanUtils.copyBean(orderFinishVO, RecycleOrder.class);
recycleOrder.setOrderStatus(OrderStatusEnum.FINISHED);
recycleOrder.setCompleteTime(LocalDateTime.now());
log.info("recycleOrder orderFinishVO: {}", recycleOrder);
RecycleOrder recycleOrder1 = BeanUtils.copyBean(orderFinishVO, RecycleOrder.class);
recycleOrder1.setOrderStatus(OrderStatusEnum.FINISHED);
recycleOrder1.setCompleteTime(LocalDateTime.now());
log.info("recycleOrder orderFinishVO: {}", recycleOrder1);
// 订单总金额计算
BigDecimal totalAmount = new BigDecimal("0.00");
@ -253,9 +255,13 @@ public class RecycleOrderServiceImpl extends ServiceImpl<RecycleOrderMapper, Rec
totalAmount = totalAmount.add(weight.multiply(price));
}
recycleOrder.setOrderAmount(totalAmount);
recycleOrder1.setOrderAmount(totalAmount);
this.updateById(recycleOrder);
// 回收员累计值更新
Double distance = recycleOrder.getDistance();
recyclerService.totalTick(recyclerId, distance, totalAmount);
// 增加收入余额 异步? todo
clientService.addBalance(clientId, totalAmount, orderNumber, recycleStationId);
}

@ -98,10 +98,13 @@ public class RecycleStationServiceImpl extends ServiceImpl<RecycleStationMapper,
public List<ProductRespVO> getStationProduct(String stationId) {
QueryWrapper<Price> wrapper = new QueryWrapper<Price>().eq("a.status", GlobalStatusEnum.VALID);
String priceId = recycleStationPriceMapper.getLatestPriceByStationId(stationId,wrapper);
// if (ObjectUtil.isEmpty(priceId)) {
// throw new BizIllegalException("回收站点未配置有效价目信息");
// }
List<ProductRespVO> productRespVOList = new ArrayList<>(20);
if (ObjectUtil.isEmpty(priceId)) {
throw new BizIllegalException("回收站点未配置有效价目信息");
return productRespVOList;
}
List<ProductRespVO> productRespVOList = new ArrayList<>(20);
List<PriceProduct> priceProductList = new LambdaQueryChainWrapper<>(priceProductMapper)
.eq(PriceProduct::getPriceId, priceId).list();
if (CollectionUtil.isNotEmpty(priceProductList)) {

@ -1,6 +1,7 @@
package cc.yunxi.service.impl;
import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.domain.LambdaUpdateWrapperX;
import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.common.exception.DbException;
import cc.yunxi.common.utils.BeanUtils;
@ -16,6 +17,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.injector.methods.SelectPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -23,6 +25,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
/**
*
@ -88,6 +91,17 @@ public class RecyclerServiceImpl extends ServiceImpl<RecyclerMapper, Recycler> i
return recycler;
}
@Override
public void totalTick(String recyclerId, Double distance, BigDecimal amount) {
LambdaUpdateWrapperX<Recycler> wrapperX = new LambdaUpdateWrapperX<>();
wrapperX.eq(Recycler::getId, recyclerId);
wrapperX.incrField(Recycler::getRecycleMiles, distance);
wrapperX.incrField(Recycler::getOrderTotal, 1);
wrapperX.incrField(Recycler::getOrderAmount, amount);
this.update(wrapperX);
}
// 校验散户是否存在
private void validateRecyclerExists(String id) {
if (this.getRecyclerById(id) == null) {

Loading…
Cancel
Save