优化
This commit is contained in:
@ -0,0 +1,20 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.controller.app.orderdetail.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zt
|
||||||
|
* @description <description class purpose>
|
||||||
|
* @since 2024/10/10
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OtherVO {
|
||||||
|
private Long orderId;
|
||||||
|
private String dishesName;
|
||||||
|
private String dishesImageUrl;
|
||||||
|
private String sn;
|
||||||
|
private BigDecimal price;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.service.async;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zt
|
||||||
|
* @description <description class purpose>
|
||||||
|
* @since 2024/10/10
|
||||||
|
*/
|
||||||
|
public interface MemberAsyncService {
|
||||||
|
|
||||||
|
|
||||||
|
void flashTime(DiningPlatesDO diningPlatesDO);
|
||||||
|
|
||||||
|
void createOrderDetail(AppOrderDetailSaveReqVO createReqVO, OtherVO otherVO);
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
package cn.iocoder.yudao.module.member.service.async;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
|
||||||
|
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
|
||||||
|
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zt
|
||||||
|
* @description <description class purpose>
|
||||||
|
* @since 2024/10/10
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
public class MemberAsyncServiceImpl implements MemberAsyncService{
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private DiningPlatesMapper diningPlatesMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private DishesNutritionApi dishesNutritionApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private OrderDetailMapper orderDetailMapper;
|
||||||
|
|
||||||
|
@Async
|
||||||
|
@Override
|
||||||
|
public void flashTime(DiningPlatesDO diningPlatesDO){
|
||||||
|
diningPlatesDO.setBindingTime(LocalDateTime.now());
|
||||||
|
diningPlatesMapper.updateById(diningPlatesDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Async
|
||||||
|
@Override
|
||||||
|
public void createOrderDetail(AppOrderDetailSaveReqVO createReqVO, OtherVO otherVO) {
|
||||||
|
DishesNutritionRespDTO dishEnergy = dishesNutritionApi.getDishEnergy(createReqVO.getDishesId());
|
||||||
|
|
||||||
|
// 插入数据
|
||||||
|
OrderDetailDO orderDetail = BeanUtils.toBean(createReqVO, OrderDetailDO.class);
|
||||||
|
|
||||||
|
//计算热量
|
||||||
|
if (dishEnergy != null && StrUtil.isNotEmpty(dishEnergy.getDishesNumber())) {
|
||||||
|
BigDecimal dishesNumber = new BigDecimal(dishEnergy.getDishesNumber());
|
||||||
|
BigDecimal nutritionNumber = new BigDecimal(dishEnergy.getNutritionNumber());
|
||||||
|
if (BigDecimal.ZERO.compareTo(dishesNumber) != 0) {
|
||||||
|
BigDecimal bigDecimal = createReqVO.getWeight().multiply(nutritionNumber).divide(dishesNumber.multiply(new BigDecimal("4.184")), 2, RoundingMode.HALF_UP);
|
||||||
|
orderDetail.setHeat(bigDecimal.doubleValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
orderDetail.setOrderId(otherVO.getOrderId()).setDishesName(otherVO.getDishesName()).setDishUrl(otherVO.getDishesImageUrl());
|
||||||
|
orderDetail.setSn(otherVO.getSn());
|
||||||
|
orderDetail.setPrice(otherVO.getPrice());
|
||||||
|
orderDetailMapper.insert(orderDetail);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void discard(){
|
||||||
|
//DishesNutritionRespDTO dishEnergy = dishesNutritionApi.getDishEnergy(createReqVO.getDishesId());
|
||||||
|
//
|
||||||
|
//// 插入数据
|
||||||
|
//OrderDetailDO orderDetail = BeanUtils.toBean(createReqVO, OrderDetailDO.class);
|
||||||
|
//
|
||||||
|
////计算热量
|
||||||
|
//if (dishEnergy != null && StrUtil.isNotEmpty(dishEnergy.getDishesNumber())) {
|
||||||
|
// BigDecimal dishesNumber = new BigDecimal(dishEnergy.getDishesNumber());
|
||||||
|
// BigDecimal nutritionNumber = new BigDecimal(dishEnergy.getNutritionNumber());
|
||||||
|
// if (BigDecimal.ZERO.compareTo(dishesNumber) != 0) {
|
||||||
|
// BigDecimal bigDecimal = createReqVO.getWeight().multiply(nutritionNumber).divide(dishesNumber.multiply(new BigDecimal("4.184")), 2, RoundingMode.HALF_UP);
|
||||||
|
// orderDetail.setHeat(bigDecimal.doubleValue());
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//orderDetail.setOrderId(diningPlatesDO.getOrderId()).setDishesName(dish.getDishesName()).setDishUrl(dish.getDishesImageUrl());
|
||||||
|
//orderDetail.setSn(this.getHearder());
|
||||||
|
//orderDetail.setPrice(bigDecimal1);
|
||||||
|
//orderDetailMapper.insert(orderDetail);
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.diningplates.DiningPlatesMapper;
|
|||||||
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
|
||||||
import cn.iocoder.yudao.module.member.service.admincard.AdminCardService;
|
import cn.iocoder.yudao.module.member.service.admincard.AdminCardService;
|
||||||
|
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
|
||||||
import cn.iocoder.yudao.module.member.service.card.CardService;
|
import cn.iocoder.yudao.module.member.service.card.CardService;
|
||||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||||
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
||||||
@ -41,8 +42,6 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.ForkJoinPool;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
@ -75,6 +74,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
|||||||
private DishesApi dishesApi;
|
private DishesApi dishesApi;
|
||||||
@Resource
|
@Resource
|
||||||
private AdminCardService adminCardService;
|
private AdminCardService adminCardService;
|
||||||
|
@Resource
|
||||||
|
private MemberAsyncService asyncService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) {
|
public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) {
|
||||||
@ -303,32 +304,13 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
|||||||
throw exception(DINING_PLATES_NOT_BIND);
|
throw exception(DINING_PLATES_NOT_BIND);
|
||||||
}
|
}
|
||||||
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
||||||
//String name = stringRedisTemplate.opsForValue().get("DATA-name" + diningPlatesDO.getUserId());
|
|
||||||
//String money = stringRedisTemplate.opsForValue().get("DATA-money" + diningPlatesDO.getUserId());
|
|
||||||
//if(StrUtil.isNotBlank(name)&& StrUtil.isNotBlank(money)){
|
|
||||||
// appUserInfoCardVO.setName(name);
|
|
||||||
// appUserInfoCardVO.setMoney(new BigDecimal(money));
|
|
||||||
// return appUserInfoCardVO;
|
|
||||||
//}
|
|
||||||
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
|
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
|
||||||
//stringRedisTemplate.opsForValue().set("DATA-name"+diningPlatesDO.getUserId(), memberUserDO.getNickname());
|
|
||||||
//stringRedisTemplate.opsForValue().set("DATA-money"+diningPlatesDO.getUserId(), cardService.getMoneyByUserId(memberUserDO.getId()).toString());
|
|
||||||
appUserInfoCardVO.setName(memberUserDO.getNickname());
|
appUserInfoCardVO.setName(memberUserDO.getNickname());
|
||||||
appUserInfoCardVO.setMoney(cardService.getMoneyByUserId(memberUserDO.getId()));
|
appUserInfoCardVO.setMoney(cardService.getMoneyByUserId(memberUserDO.getId()));
|
||||||
|
|
||||||
//刷新绑定时间
|
//刷新绑定时间
|
||||||
ForkJoinPool pool = new ForkJoinPool();
|
asyncService.flashTime(diningPlatesDO);
|
||||||
CompletableFuture.supplyAsync(() -> {
|
|
||||||
int i = 0;
|
|
||||||
try {
|
|
||||||
// 模拟耗时操作,这里可以替换为实际的代码逻辑
|
|
||||||
diningPlatesDO.setBindingTime(LocalDateTime.now());
|
|
||||||
i = diningPlatesMapper.updateById(diningPlatesDO);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return i>0;
|
|
||||||
},pool);
|
|
||||||
return appUserInfoCardVO;
|
return appUserInfoCardVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -511,4 +493,5 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
|||||||
return "bind";
|
return "bind";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -7,17 +7,16 @@ import cn.iocoder.yudao.module.member.controller.admin.screen.vo.DishVO;
|
|||||||
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
|
||||||
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.OtherVO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
|
||||||
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
|
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
|
||||||
|
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
|
||||||
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
|
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
|
||||||
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
import cn.iocoder.yudao.module.member.util.MemberConstants;
|
||||||
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
|
||||||
import cn.iocoder.yudao.module.system.api.dish.DishesApi;
|
import cn.iocoder.yudao.module.system.api.dish.DishesApi;
|
||||||
import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto;
|
import cn.iocoder.yudao.module.system.api.dish.dto.DishesRespDto;
|
||||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.DishesNutritionApi;
|
|
||||||
import cn.iocoder.yudao.module.system.api.dishesnutrition.dto.DishesNutritionRespDTO;
|
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -48,12 +47,6 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||||||
@Resource
|
@Resource
|
||||||
private OrderDetailMapper orderDetailMapper;
|
private OrderDetailMapper orderDetailMapper;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private CarteenApi carteenApi;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private DishesNutritionApi dishesNutritionApi;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private DishOrderMapper dishOrderMapper;
|
private DishOrderMapper dishOrderMapper;
|
||||||
|
|
||||||
@ -68,6 +61,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private HttpServletRequest httpServletRequest;
|
private HttpServletRequest httpServletRequest;
|
||||||
|
@Resource
|
||||||
|
private MemberAsyncService asyncService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -79,37 +74,27 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||||||
throw exception(ORDER_ALREADY_COMPLETE);
|
throw exception(ORDER_ALREADY_COMPLETE);
|
||||||
}
|
}
|
||||||
|
|
||||||
DishesRespDto dish = dishesApi.getDish(createReqVO.getDishesId());
|
|
||||||
DishesNutritionRespDTO dishEnergy = dishesNutritionApi.getDishEnergy(createReqVO.getDishesId());
|
|
||||||
|
|
||||||
// 插入数据
|
|
||||||
OrderDetailDO orderDetail = BeanUtils.toBean(createReqVO, OrderDetailDO.class);
|
|
||||||
|
|
||||||
//计算新总价
|
//计算新总价
|
||||||
|
DishesRespDto dish = dishesApi.getDish(createReqVO.getDishesId());
|
||||||
|
|
||||||
String old = stringRedisTemplate.opsForValue().get(createReqVO.getDiningPlatesNum()+"-" +createReqVO.getStoreId());
|
String old = stringRedisTemplate.opsForValue().get(createReqVO.getDiningPlatesNum()+"-" +createReqVO.getStoreId());
|
||||||
BigDecimal oldBigDecimal = new BigDecimal(StrUtil.isBlank(old)?"0":old);
|
BigDecimal oldBigDecimal = new BigDecimal(StrUtil.isBlank(old)?"0":old);
|
||||||
//计算每个菜品的价格
|
//计算每个菜品的价格
|
||||||
BigDecimal bigDecimal1 = dish.getDishesSumPrice().multiply(createReqVO.getWeight()).divide(dish.getDishesNumber(), 2, RoundingMode.HALF_UP);
|
BigDecimal bigDecimal1 = dish.getDishesSumPrice().multiply(createReqVO.getWeight()).divide(dish.getDishesNumber(), 2, RoundingMode.HALF_UP);
|
||||||
//
|
//更新价格
|
||||||
BigDecimal newPrice = bigDecimal1.add(oldBigDecimal).setScale(2, RoundingMode.HALF_UP);
|
BigDecimal newPrice = bigDecimal1.add(oldBigDecimal).setScale(2, RoundingMode.HALF_UP);
|
||||||
stringRedisTemplate.opsForValue().set(createReqVO.getDiningPlatesNum() + "-" +createReqVO.getStoreId(), newPrice.toString());
|
stringRedisTemplate.opsForValue().set(createReqVO.getDiningPlatesNum() + "-" +createReqVO.getStoreId(), newPrice.toString());
|
||||||
|
|
||||||
//计算热量
|
OtherVO otherVO = new OtherVO();
|
||||||
if (dishEnergy != null && StrUtil.isNotEmpty(dishEnergy.getDishesNumber())) {
|
otherVO.setSn(getHearder());
|
||||||
BigDecimal dishesNumber = new BigDecimal(dishEnergy.getDishesNumber());
|
otherVO.setOrderId(diningPlatesDO.getOrderId());
|
||||||
BigDecimal nutritionNumber = new BigDecimal(dishEnergy.getNutritionNumber());
|
otherVO.setDishesName(dish.getDishesName());
|
||||||
if (BigDecimal.ZERO.compareTo(dishesNumber) != 0) {
|
otherVO.setDishesImageUrl(dish.getDishesImageUrl());
|
||||||
BigDecimal bigDecimal = createReqVO.getWeight().multiply(nutritionNumber).divide(dishesNumber.multiply(new BigDecimal("4.184")), 2, RoundingMode.HALF_UP);
|
otherVO.setPrice(bigDecimal1);
|
||||||
orderDetail.setHeat(bigDecimal.doubleValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
orderDetail.setOrderId(diningPlatesDO.getOrderId()).setDishesName(dish.getDishesName()).setDishUrl(dish.getDishesImageUrl());
|
asyncService.createOrderDetail(createReqVO,otherVO);
|
||||||
orderDetail.setSn(this.getHearder());
|
// 返回写死
|
||||||
orderDetail.setPrice(bigDecimal1);
|
return 0L;
|
||||||
orderDetailMapper.insert(orderDetail);
|
|
||||||
// 返回
|
|
||||||
return orderDetail.getId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user