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

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 orderLongitude = orderRespVO.getLocation().getLongitude();
String orderLatitude = orderRespVO.getLocation().getLatitude(); String orderLatitude = orderRespVO.getLocation().getLatitude();
BigDecimal distance = CommonUtil.getDistance(longitude, latitude, orderLongitude, orderLatitude); 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); Page<RecycleStation> result = recycleStationService.queryStationByPage(recycleStationQuery);
PageDTO<RecycleStationRespVO> recycleStationPageVO = PageDTO.of(result, RecycleStationRespVO.class); 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); return CommonResult.success(recycleStationPageVO);
} }

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

@ -91,6 +91,10 @@ public class RecycleOrder {
@TableField("staffs_name") @TableField("staffs_name")
private String staffsName; private String staffsName;
@ApiModelProperty("订单距离(回收员专用)")
@TableField("distance")
private Double distance;
@ApiModelProperty("下单时间") @ApiModelProperty("下单时间")
@TableField("f_creator_time") @TableField("f_creator_time")
private LocalDateTime creatorTime; private LocalDateTime creatorTime;
@ -163,8 +167,4 @@ public class RecycleOrder {
// @TableField("is_deleted") // @TableField("is_deleted")
// private Integer isDeleted; // 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.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;

@ -124,7 +124,7 @@ public class RecycleOrderRespVO {
// private Integer isDeleted; // private Integer isDeleted;
@ApiModelProperty("订单距离(回收员专用)") @ApiModelProperty("订单距离(回收员专用)")
private String distance; private Double distance;
@ApiModelProperty("散户地址信息") @ApiModelProperty("散户地址信息")
private ClientAddressSimpleVO addressInfo; 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.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.math.BigDecimal;
/** /**
* *
*/ */
@ -48,4 +50,13 @@ public interface IRecyclerService extends IService<Recycler> {
* @param recyclerUpdateVO * @param recyclerUpdateVO
*/ */
void updateRecycler(RecyclerUpdateVO 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(); BigDecimal balance = client.getBanlance();
String remark; String remark;
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String amountStr = String.valueOf(amount.setScale(2));
if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入 if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入
balance = balance.add(amount); balance = balance.add(amount);
remark = "废品回收结算,收入" + amount + "元"; remark = "废品回收结算,收入" + amountStr + "元";
// 更新商户资金 // 更新商户资金
Enterprise enterprise = enterpriseService.getEnterpriseByStationId(stationId); Enterprise enterprise = enterpriseService.getEnterpriseByStationId(stationId);
@ -268,7 +269,7 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
accountBill.setAccountBalance(fund); accountBill.setAccountBalance(fund);
accountBill.setPayoutAmount(amount); accountBill.setPayoutAmount(amount);
accountBill.setOrderNumber(orderNo); accountBill.setOrderNumber(orderNo);
accountBill.setRemark("支付给散户"+ amount + "元"); accountBill.setRemark("支付给散户"+ amountStr + "元");
accountBill.setCreatorTime(now); accountBill.setCreatorTime(now);
accountBillMapper.insert(accountBill); accountBillMapper.insert(accountBill);
@ -277,7 +278,7 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
throw new BizIllegalException("余额不足"); throw new BizIllegalException("余额不足");
} }
balance = balance.subtract(amount); balance = balance.subtract(amount);
remark = "微信提现" + amount + "元"; remark = "微信提现" + amountStr + "元";
} }
// 更新散户余额 // 更新散户余额
client.setBanlance(balance); client.setBanlance(balance);

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

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

@ -1,6 +1,7 @@
package cc.yunxi.service.impl; package cc.yunxi.service.impl;
import cc.yunxi.common.domain.LambdaQueryWrapperX; import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.domain.LambdaUpdateWrapperX;
import cc.yunxi.common.exception.BizIllegalException; import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.common.exception.DbException; import cc.yunxi.common.exception.DbException;
import cc.yunxi.common.utils.BeanUtils; import cc.yunxi.common.utils.BeanUtils;
@ -16,6 +17,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.core.injector.methods.SelectPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -23,6 +25,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
/** /**
* *
@ -88,6 +91,17 @@ public class RecyclerServiceImpl extends ServiceImpl<RecyclerMapper, Recycler> i
return recycler; 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) { private void validateRecyclerExists(String id) {
if (this.getRecyclerById(id) == null) { if (this.getRecyclerById(id) == null) {

Loading…
Cancel
Save