This commit is contained in:
zengtao01
2024-10-10 19:04:20 +08:00
parent e7632a7807
commit 33440089e0
5 changed files with 154 additions and 54 deletions

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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.user.MemberUserMapper;
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.util.MemberConstants;
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
@ -41,8 +42,6 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -75,6 +74,8 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
private DishesApi dishesApi;
@Resource
private AdminCardService adminCardService;
@Resource
private MemberAsyncService asyncService;
@Override
public Long createDiningPlates(DiningPlatesSaveReqVO createReqVO) {
@ -303,32 +304,13 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
throw exception(DINING_PLATES_NOT_BIND);
}
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());
//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.setMoney(cardService.getMoneyByUserId(memberUserDO.getId()));
//刷新绑定时间
ForkJoinPool pool = new ForkJoinPool();
CompletableFuture.supplyAsync(() -> {
int i = 0;
try {
// 模拟耗时操作,这里可以替换为实际的代码逻辑
diningPlatesDO.setBindingTime(LocalDateTime.now());
i = diningPlatesMapper.updateById(diningPlatesDO);
} catch (Exception e) {
e.printStackTrace();
}
return i>0;
},pool);
asyncService.flashTime(diningPlatesDO);
return appUserInfoCardVO;
}
@ -511,4 +493,5 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
return "bind";
}
}
}

View File

@ -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.AppOrderDetailRespVO;
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.order.DishOrderMapper;
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.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.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 org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@ -48,12 +47,6 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Resource
private OrderDetailMapper orderDetailMapper;
@Resource
private CarteenApi carteenApi;
@Resource
private DishesNutritionApi dishesNutritionApi;
@Resource
private DishOrderMapper dishOrderMapper;
@ -68,6 +61,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Resource
private HttpServletRequest httpServletRequest;
@Resource
private MemberAsyncService asyncService;
@Override
@ -79,37 +74,27 @@ public class OrderDetailServiceImpl implements OrderDetailService {
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());
BigDecimal oldBigDecimal = new BigDecimal(StrUtil.isBlank(old)?"0":old);
//计算每个菜品的价格
BigDecimal bigDecimal1 = dish.getDishesSumPrice().multiply(createReqVO.getWeight()).divide(dish.getDishesNumber(), 2, RoundingMode.HALF_UP);
//
//更新价格
BigDecimal newPrice = bigDecimal1.add(oldBigDecimal).setScale(2, RoundingMode.HALF_UP);
stringRedisTemplate.opsForValue().set(createReqVO.getDiningPlatesNum() + "-" +createReqVO.getStoreId(), newPrice.toString());
//计算热量
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());
}
}
OtherVO otherVO = new OtherVO();
otherVO.setSn(getHearder());
otherVO.setOrderId(diningPlatesDO.getOrderId());
otherVO.setDishesName(dish.getDishesName());
otherVO.setDishesImageUrl(dish.getDishesImageUrl());
otherVO.setPrice(bigDecimal1);
orderDetail.setOrderId(diningPlatesDO.getOrderId()).setDishesName(dish.getDishesName()).setDishUrl(dish.getDishesImageUrl());
orderDetail.setSn(this.getHearder());
orderDetail.setPrice(bigDecimal1);
orderDetailMapper.insert(orderDetail);
// 返回
return orderDetail.getId();
asyncService.createOrderDetail(createReqVO,otherVO);
// 返回写死
return 0L;
}
@Override