diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/OtherVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/OtherVO.java new file mode 100644 index 00000000..98e351dc --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/orderdetail/vo/OtherVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.member.controller.app.orderdetail.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author zt + * @description + * @since 2024/10/10 + */ +@Data +public class OtherVO { + private Long orderId; + private String dishesName; + private String dishesImageUrl; + private String sn; + private BigDecimal price; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java new file mode 100644 index 00000000..b65f9023 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncService.java @@ -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 + * @since 2024/10/10 + */ +public interface MemberAsyncService { + + + void flashTime(DiningPlatesDO diningPlatesDO); + + void createOrderDetail(AppOrderDetailSaveReqVO createReqVO, OtherVO otherVO); +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java new file mode 100644 index 00000000..de9a4781 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/async/MemberAsyncServiceImpl.java @@ -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 + * @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); + } +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java index c6e2b5bf..dfbb1d3c 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java @@ -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"; } } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java index d517ea7e..6bb23113 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/orderdetail/OrderDetailServiceImpl.java @@ -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