package com.alatus.mall.order.service.impl; import com.alatus.common.to.MemberAddressTo; import com.alatus.common.utils.R; import com.alatus.common.vo.MemberRespVo; import com.alatus.common.vo.SkuHasStockVo; import com.alatus.mall.order.feign.CartFeignService; import com.alatus.mall.order.feign.MemberFeignService; import com.alatus.mall.order.feign.WareFeignService; import com.alatus.mall.order.interceptor.LoginUserInterceptor; import com.alatus.mall.order.vo.OrderConfirmVo; import com.alatus.mall.order.vo.OrderItemVo; import com.alibaba.fastjson.TypeReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.Query; import com.alatus.mall.order.dao.OrderDao; import com.alatus.mall.order.entity.OrderEntity; import com.alatus.mall.order.service.OrderService; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; @Service("orderService") public class OrderServiceImpl extends ServiceImpl<OrderDao, OrderEntity> implements OrderService { @Autowired private MemberFeignService memberFeignService; @Autowired private CartFeignService cartFeignService; @Autowired private ThreadPoolExecutor threadPoolExecutor; @Autowired private WareFeignService wareFeignService; @Override public PageUtils queryPage(Map<String, Object> params) { IPage<OrderEntity> page = this.page( new Query<OrderEntity>().getPage(params), new QueryWrapper<OrderEntity>() ); return new PageUtils(page); } @Override public OrderConfirmVo confirmOrder() throws ExecutionException, InterruptedException { OrderConfirmVo confirmVo = new OrderConfirmVo(); // 获取原请求信息,避免异步导致丢失 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); MemberRespVo memberRespVo = LoginUserInterceptor.loginUser.get(); // 远程查询购物车所有选中的购物项 CompletableFuture<Void> itemVoList = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setItemVoList(cartFeignService.getCurrentCartItem()); }, threadPoolExecutor).thenRunAsync(()->{ // 获取原请求信息,避免异步导致丢失 RequestContextHolder.setRequestAttributes(requestAttributes); // 查询库存 List<OrderItemVo> itemList = confirmVo.getItemVoList(); List<Long> ids = itemList.stream().map(OrderItemVo::getSkuId).collect(Collectors.toList()); R skuHasStock = wareFeignService.getSkuHasStock(ids); if(skuHasStock.getCode()==0){ List<SkuHasStockVo> data = skuHasStock.getData(new TypeReference<List<SkuHasStockVo>>(){}); if(data!=null&& !data.isEmpty()){ Map<Long, Boolean> collect = data.stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, SkuHasStockVo::getHasStock)); confirmVo.setStocks(collect); } } },threadPoolExecutor); // 远程查询所有的用户地址列表 CompletableFuture<Void> addressTask = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setAddress(memberFeignService.getAddress(memberRespVo.getId())); }, threadPoolExecutor).thenRunAsync(()->{ // 获取运费信息 RequestContextHolder.setRequestAttributes(requestAttributes); List<MemberAddressTo> address = confirmVo.getAddress(); for (MemberAddressTo memberAddressTo : address) { if(memberAddressTo.getDefaultStatus()==1){ R fare = wareFeignService.getFare(memberAddressTo.getId()); if (fare.getCode()==200) { confirmVo.setFare(fare.getData(new TypeReference<BigDecimal>(){})); } } } },threadPoolExecutor); // 用户积分 CompletableFuture<Void> integrationTask = CompletableFuture.runAsync(() -> { confirmVo.setIntegration(memberRespVo.getIntegration()); }, threadPoolExecutor); CompletableFuture.allOf(addressTask,itemVoList,integrationTask).get(); // TODO 订单令牌 return confirmVo; } @Override public OrderConfirmVo confirmOrder(Long addrId) throws ExecutionException, InterruptedException { // 获取原请求信息,避免异步导致丢失 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); MemberRespVo memberRespVo = LoginUserInterceptor.loginUser.get(); R r = memberFeignService.changeAddr(memberRespVo.getId(), addrId); if(r.getCode()!=0){ throw new RuntimeException("修改失败"); } OrderConfirmVo confirmVo = new OrderConfirmVo(); // 查询新的运费信息 CompletableFuture<Void> getFare = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); R fare = wareFeignService.getFare(addrId); if (fare.getCode() == 200) { confirmVo.setFare(fare.getData(new TypeReference<BigDecimal>(){})); } }, threadPoolExecutor); // 远程查询购物车所有选中的购物项 CompletableFuture<Void> itemVoList = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setItemVoList(cartFeignService.getCurrentCartItem()); }, threadPoolExecutor).thenRunAsync(()->{ // 获取原请求信息,避免异步导致丢失 RequestContextHolder.setRequestAttributes(requestAttributes); // 查询库存 List<OrderItemVo> itemList = confirmVo.getItemVoList(); List<Long> ids = itemList.stream().map(OrderItemVo::getSkuId).collect(Collectors.toList()); R skuHasStock = wareFeignService.getSkuHasStock(ids); if(skuHasStock.getCode()==0){ List<SkuHasStockVo> data = skuHasStock.getData(new TypeReference<List<SkuHasStockVo>>() {}); if(data!=null&& !data.isEmpty()){ Map<Long, Boolean> collect = data.stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, SkuHasStockVo::getHasStock)); confirmVo.setStocks(collect); } } },threadPoolExecutor); // 远程查询所有的用户地址列表 CompletableFuture<Void> addressTask = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setAddress(memberFeignService.getAddress(memberRespVo.getId())); }, threadPoolExecutor); // 用户积分 CompletableFuture<Void> integrationTask = CompletableFuture.runAsync(() -> { confirmVo.setIntegration(memberRespVo.getIntegration()); }, threadPoolExecutor); CompletableFuture.allOf(addressTask,itemVoList,integrationTask,getFare).get(); // TODO 订单令牌 return confirmVo; } }
package com.alatus.mall.order.service.impl; import com.alatus.common.to.MemberAddressTo; import com.alatus.common.utils.R; import com.alatus.common.vo.MemberRespVo; import com.alatus.common.vo.SkuHasStockVo; import com.alatus.mall.order.feign.CartFeignService; import com.alatus.mall.order.feign.MemberFeignService; import com.alatus.mall.order.feign.WareFeignService; import com.alatus.mall.order.interceptor.LoginUserInterceptor; import com.alatus.mall.order.vo.OrderConfirmVo; import com.alatus.mall.order.vo.OrderItemVo; import com.alibaba.fastjson.TypeReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.Query; import com.alatus.mall.order.dao.OrderDao; import com.alatus.mall.order.entity.OrderEntity; import com.alatus.mall.order.service.OrderService; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; @Service("orderService") public class OrderServiceImpl extends ServiceImpl<OrderDao, OrderEntity> implements OrderService { @Autowired private MemberFeignService memberFeignService; @Autowired private CartFeignService cartFeignService; @Autowired private ThreadPoolExecutor threadPoolExecutor; @Autowired private WareFeignService wareFeignService; @Override public PageUtils queryPage(Map<String, Object> params) { IPage<OrderEntity> page = this.page( new Query<OrderEntity>().getPage(params), new QueryWrapper<OrderEntity>() ); return new PageUtils(page); } @Override public OrderConfirmVo confirmOrder() throws ExecutionException, InterruptedException { OrderConfirmVo confirmVo = new OrderConfirmVo(); // 获取原请求信息,避免异步导致丢失 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); MemberRespVo memberRespVo = LoginUserInterceptor.loginUser.get(); // 远程查询购物车所有选中的购物项 CompletableFuture<Void> itemVoList = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setItemVoList(cartFeignService.getCurrentCartItem()); }, threadPoolExecutor).thenRunAsync(()->{ // 获取原请求信息,避免异步导致丢失 RequestContextHolder.setRequestAttributes(requestAttributes); // 查询库存 List<OrderItemVo> itemList = confirmVo.getItemVoList(); List<Long> ids = itemList.stream().map(OrderItemVo::getSkuId).collect(Collectors.toList()); R skuHasStock = wareFeignService.getSkuHasStock(ids); if(skuHasStock.getCode()==0){ List<SkuHasStockVo> data = skuHasStock.getData(new TypeReference<List<SkuHasStockVo>>(){}); if(data!=null&& !data.isEmpty()){ Map<Long, Boolean> collect = data.stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, SkuHasStockVo::getHasStock)); confirmVo.setStocks(collect); } } },threadPoolExecutor); // 远程查询所有的用户地址列表 CompletableFuture<Void> addressTask = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setAddress(memberFeignService.getAddress(memberRespVo.getId())); }, threadPoolExecutor).thenRunAsync(()->{ // 获取运费信息 RequestContextHolder.setRequestAttributes(requestAttributes); List<MemberAddressTo> address = confirmVo.getAddress(); for (MemberAddressTo memberAddressTo : address) { if(memberAddressTo.getDefaultStatus()==1){ R fare = wareFeignService.getFare(memberAddressTo.getId()); if (fare.getCode()==200) { confirmVo.setFare(fare.getData(new TypeReference<BigDecimal>(){})); } } } },threadPoolExecutor); // 用户积分 CompletableFuture<Void> integrationTask = CompletableFuture.runAsync(() -> { confirmVo.setIntegration(memberRespVo.getIntegration()); }, threadPoolExecutor); CompletableFuture.allOf(addressTask,itemVoList,integrationTask).get(); // TODO 订单令牌 return confirmVo; } @Override public OrderConfirmVo confirmOrder(Long addrId) throws ExecutionException, InterruptedException { // 获取原请求信息,避免异步导致丢失 RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); MemberRespVo memberRespVo = LoginUserInterceptor.loginUser.get(); R r = memberFeignService.changeAddr(memberRespVo.getId(), addrId); if(r.getCode()!=0){ throw new RuntimeException("修改失败"); } OrderConfirmVo confirmVo = new OrderConfirmVo(); // 查询新的运费信息 CompletableFuture<Void> getFare = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); R fare = wareFeignService.getFare(addrId); if (fare.getCode() == 200) { confirmVo.setFare(fare.getData(new TypeReference<BigDecimal>(){})); } }, threadPoolExecutor); // 远程查询购物车所有选中的购物项 CompletableFuture<Void> itemVoList = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setItemVoList(cartFeignService.getCurrentCartItem()); }, threadPoolExecutor).thenRunAsync(()->{ // 获取原请求信息,避免异步导致丢失 RequestContextHolder.setRequestAttributes(requestAttributes); // 查询库存 List<OrderItemVo> itemList = confirmVo.getItemVoList(); List<Long> ids = itemList.stream().map(OrderItemVo::getSkuId).collect(Collectors.toList()); R skuHasStock = wareFeignService.getSkuHasStock(ids); if(skuHasStock.getCode()==0){ List<SkuHasStockVo> data = skuHasStock.getData(new TypeReference<List<SkuHasStockVo>>() {}); if(data!=null&& !data.isEmpty()){ Map<Long, Boolean> collect = data.stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, SkuHasStockVo::getHasStock)); confirmVo.setStocks(collect); } } },threadPoolExecutor); // 远程查询所有的用户地址列表 CompletableFuture<Void> addressTask = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(requestAttributes); confirmVo.setAddress(memberFeignService.getAddress(memberRespVo.getId())); }, threadPoolExecutor); // 用户积分 CompletableFuture<Void> integrationTask = CompletableFuture.runAsync(() -> { confirmVo.setIntegration(memberRespVo.getIntegration()); }, threadPoolExecutor); CompletableFuture.allOf(addressTask,itemVoList,integrationTask,getFare).get(); // TODO 订单令牌 return confirmVo; } }
package com.alatus.common.to; import lombok.Data; @Data public class MemberAddressTo { private Long id; /** * member_id */ private Long memberId; /** * 收货人姓名 */ private String name; /** * 电话 */ private String phone; /** * 邮政编码 */ private String postCode; /** * 省份/直辖市 */ private String province; /** * 城市 */ private String city; /** * 区 */ private String region; /** * 详细地址(街道) */ private String detailAddress; /** * 省市区代码 */ private String areacode; /** * 是否默认 */ private Integer defaultStatus; }
package com.alatus.common.to; import lombok.Data; @Data public class MemberAddressTo { private Long id; /** * member_id */ private Long memberId; /** * 收货人姓名 */ private String name; /** * 电话 */ private String phone; /** * 邮政编码 */ private String postCode; /** * 省份/直辖市 */ private String province; /** * 城市 */ private String city; /** * 区 */ private String region; /** * 详细地址(街道) */ private String detailAddress; /** * 省市区代码 */ private String areacode; /** * 是否默认 */ private Integer defaultStatus; }
package com.alatus.mall.order.vo; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class OrderItemVo { private Long skuId; private String title; private String image; private List<String> skuAttr; private BigDecimal price; private Integer count; private BigDecimal totalPrice; // 商品重量信息 private BigDecimal weight; }
package com.alatus.mall.order.vo; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data public class OrderItemVo { private Long skuId; private String title; private String image; private List<String> skuAttr; private BigDecimal price; private Integer count; private BigDecimal totalPrice; // 商品重量信息 private BigDecimal weight; }
package com.alatus.mall.order.vo; import com.alatus.common.to.MemberAddressTo; import lombok.Data; import java.math.BigDecimal; import java.util.List; import java.util.Map; @Data public class OrderConfirmVo { // 用户的收货地址 private List<MemberAddressTo> address; // 所有选中的购物车商品项 private List<OrderItemVo> itemVoList; // TODO 发票信息 // 优惠券信息,积分可以减免金额 private Integer integration; // 订单令牌 private String orderToken; // 总价格 private BigDecimal total; // 应付金额 private BigDecimal payPrice; // 库存信息 private Map<Long,Boolean> stocks; // 运费 private BigDecimal fare; public Integer getCount(){ Integer count = 0; if(itemVoList!=null){ for (OrderItemVo orderItemVo : itemVoList) { count += orderItemVo.getCount(); } } return count; } public BigDecimal getTotal() { BigDecimal total = new BigDecimal(0); if(itemVoList!=null){ for (OrderItemVo orderItemVo : itemVoList) { total = total.add(orderItemVo.getTotalPrice()); } } return total; } public BigDecimal getPayPrice() { if(integration!=null){ BigDecimal integrationBD = new BigDecimal(String.valueOf(integration)); return getTotal().subtract(integrationBD); } return getTotal(); } }
package com.alatus.mall.order.vo; import com.alatus.common.to.MemberAddressTo; import lombok.Data; import java.math.BigDecimal; import java.util.List; import java.util.Map; @Data public class OrderConfirmVo { // 用户的收货地址 private List<MemberAddressTo> address; // 所有选中的购物车商品项 private List<OrderItemVo> itemVoList; // TODO 发票信息 // 优惠券信息,积分可以减免金额 private Integer integration; // 订单令牌 private String orderToken; // 总价格 private BigDecimal total; // 应付金额 private BigDecimal payPrice; // 库存信息 private Map<Long,Boolean> stocks; // 运费 private BigDecimal fare; public Integer getCount(){ Integer count = 0; if(itemVoList!=null){ for (OrderItemVo orderItemVo : itemVoList) { count += orderItemVo.getCount(); } } return count; } public BigDecimal getTotal() { BigDecimal total = new BigDecimal(0); if(itemVoList!=null){ for (OrderItemVo orderItemVo : itemVoList) { total = total.add(orderItemVo.getTotalPrice()); } } return total; } public BigDecimal getPayPrice() { if(integration!=null){ BigDecimal integrationBD = new BigDecimal(String.valueOf(integration)); return getTotal().subtract(integrationBD); } return getTotal(); } }
package com.alatus.mall.order.web; import com.alatus.mall.order.service.OrderService; import com.alatus.mall.order.vo.OrderConfirmVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.concurrent.ExecutionException; @Controller public class OrderWebController { @Autowired private OrderService orderService; @GetMapping("/toTrade") public String toTrade(Model model) throws ExecutionException, InterruptedException { OrderConfirmVo confirmVo = orderService.confirmOrder(); model.addAttribute("orderConfirmData",confirmVo); return "confirm"; } @GetMapping("/changeAddr/{addrId}") public String changeAddr(@PathVariable("addrId") Long addrId, Model model) throws ExecutionException, InterruptedException { OrderConfirmVo confirmVo = orderService.confirmOrder(addrId); model.addAttribute("orderConfirmData",confirmVo); return "confirm"; } }
package com.alatus.mall.order.web; import com.alatus.mall.order.service.OrderService; import com.alatus.mall.order.vo.OrderConfirmVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.concurrent.ExecutionException; @Controller public class OrderWebController { @Autowired private OrderService orderService; @GetMapping("/toTrade") public String toTrade(Model model) throws ExecutionException, InterruptedException { OrderConfirmVo confirmVo = orderService.confirmOrder(); model.addAttribute("orderConfirmData",confirmVo); return "confirm"; } @GetMapping("/changeAddr/{addrId}") public String changeAddr(@PathVariable("addrId") Long addrId, Model model) throws ExecutionException, InterruptedException { OrderConfirmVo confirmVo = orderService.confirmOrder(addrId); model.addAttribute("orderConfirmData",confirmVo); return "confirm"; } }
package com.alatus.mall.order.feign; import com.alatus.common.utils.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; @FeignClient("Mall-ware") public interface WareFeignService { @PostMapping("/ware/waresku/hasstock") R getSkuHasStock(@RequestBody List<Long> skuIds); @GetMapping("/ware/wareinfo/getFare/{addrId}") R getFare(@PathVariable("addrId") Long addrId); }
package com.alatus.mall.order.feign; import com.alatus.common.utils.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; @FeignClient("Mall-ware") public interface WareFeignService { @PostMapping("/ware/waresku/hasstock") R getSkuHasStock(@RequestBody List<Long> skuIds); @GetMapping("/ware/wareinfo/getFare/{addrId}") R getFare(@PathVariable("addrId") Long addrId); }
package com.alatus.mall.ware.app; import java.math.BigDecimal; import java.util.Arrays; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.alatus.mall.ware.entity.WareInfoEntity; import com.alatus.mall.ware.service.WareInfoService; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.R; /** * 仓库信息 * * @author alatus * @email 1571345941@qq.com * @date 2024-03-12 14:08:46 */ @RestController @RequestMapping("/ware/wareinfo") public class WareInfoController { @Autowired private WareInfoService wareInfoService; /** * 获取运费信息 */ @GetMapping("/getFare/{addrId}") public R getFare(@PathVariable("addrId") Long addrId){ BigDecimal fare = wareInfoService.getFare(addrId); return R.ok().put("data",fare); } /** * 列表 */ @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params){ PageUtils page = wareInfoService.queryPage(params); return R.ok().put("page", page); } /** * 信息 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ WareInfoEntity wareInfo = wareInfoService.getById(id); return R.ok().put("wareInfo", wareInfo); } /** * 保存 */ @RequestMapping("/save") public R save(@RequestBody WareInfoEntity wareInfo){ wareInfoService.save(wareInfo); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody WareInfoEntity wareInfo){ wareInfoService.updateById(wareInfo); return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ wareInfoService.removeByIds(Arrays.asList(ids)); return R.ok(); } }
package com.alatus.mall.ware.app; import java.math.BigDecimal; import java.util.Arrays; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import com.alatus.mall.ware.entity.WareInfoEntity; import com.alatus.mall.ware.service.WareInfoService; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.R; /** * 仓库信息 * * @author alatus * @email 1571345941@qq.com * @date 2024-03-12 14:08:46 */ @RestController @RequestMapping("/ware/wareinfo") public class WareInfoController { @Autowired private WareInfoService wareInfoService; /** * 获取运费信息 */ @GetMapping("/getFare/{addrId}") public R getFare(@PathVariable("addrId") Long addrId){ BigDecimal fare = wareInfoService.getFare(addrId); return R.ok().put("data",fare); } /** * 列表 */ @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params){ PageUtils page = wareInfoService.queryPage(params); return R.ok().put("page", page); } /** * 信息 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ WareInfoEntity wareInfo = wareInfoService.getById(id); return R.ok().put("wareInfo", wareInfo); } /** * 保存 */ @RequestMapping("/save") public R save(@RequestBody WareInfoEntity wareInfo){ wareInfoService.save(wareInfo); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody WareInfoEntity wareInfo){ wareInfoService.updateById(wareInfo); return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ wareInfoService.removeByIds(Arrays.asList(ids)); return R.ok(); } }
package com.alatus.mall.ware.service; import com.baomidou.mybatisplus.extension.service.IService; import com.alatus.common.utils.PageUtils; import com.alatus.mall.ware.entity.WareInfoEntity; import java.math.BigDecimal; import java.util.Map; /** * 仓库信息 * * @author alatus * @email 1571345941@qq.com * @date 2024-03-12 14:08:46 */ public interface WareInfoService extends IService<WareInfoEntity> { PageUtils queryPage(Map<String, Object> params); BigDecimal getFare(Long addrId); }
package com.alatus.mall.ware.service; import com.baomidou.mybatisplus.extension.service.IService; import com.alatus.common.utils.PageUtils; import com.alatus.mall.ware.entity.WareInfoEntity; import java.math.BigDecimal; import java.util.Map; /** * 仓库信息 * * @author alatus * @email 1571345941@qq.com * @date 2024-03-12 14:08:46 */ public interface WareInfoService extends IService<WareInfoEntity> { PageUtils queryPage(Map<String, Object> params); BigDecimal getFare(Long addrId); }
package com.alatus.mall.ware.service.impl; import com.alatus.common.utils.R; import com.alatus.mall.ware.feign.MemberFeignService; import com.alibaba.fastjson.TypeReference; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.alatus.common.to.MemberAddressTo; import java.math.BigDecimal; import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.Query; import com.alatus.mall.ware.dao.WareInfoDao; import com.alatus.mall.ware.entity.WareInfoEntity; import com.alatus.mall.ware.service.WareInfoService; @Service("wareInfoService") public class WareInfoServiceImpl extends ServiceImpl<WareInfoDao, WareInfoEntity> implements WareInfoService { @Autowired private MemberFeignService memberFeignService; @Override public PageUtils queryPage(Map<String, Object> params) { QueryWrapper<WareInfoEntity> queryWrapper = new QueryWrapper<>(); String key = (String) params.get("key"); if(!StringUtils.isEmpty(key)){ queryWrapper.eq("id",key) .or().like("name",key) .or().like("address",key) .or().like("areacode",key); } IPage<WareInfoEntity> page = this.page( new Query<WareInfoEntity>().getPage(params), queryWrapper ); return new PageUtils(page); } @Override public BigDecimal getFare(Long addrId) { R info = memberFeignService.info(addrId); if(info.getCode()==0){ MemberAddressTo memberAddress = info.get("memberReceiveAddress",new TypeReference<MemberAddressTo>(){}); // TODO 计算运费的接口,目前全部写死,全部按15块钱算 if(memberAddress!=null){ return new BigDecimal(15); } } return null; } }
package com.alatus.mall.ware.service.impl; import com.alatus.common.utils.R; import com.alatus.mall.ware.feign.MemberFeignService; import com.alibaba.fastjson.TypeReference; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.alatus.common.to.MemberAddressTo; import java.math.BigDecimal; import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.alatus.common.utils.PageUtils; import com.alatus.common.utils.Query; import com.alatus.mall.ware.dao.WareInfoDao; import com.alatus.mall.ware.entity.WareInfoEntity; import com.alatus.mall.ware.service.WareInfoService; @Service("wareInfoService") public class WareInfoServiceImpl extends ServiceImpl<WareInfoDao, WareInfoEntity> implements WareInfoService { @Autowired private MemberFeignService memberFeignService; @Override public PageUtils queryPage(Map<String, Object> params) { QueryWrapper<WareInfoEntity> queryWrapper = new QueryWrapper<>(); String key = (String) params.get("key"); if(!StringUtils.isEmpty(key)){ queryWrapper.eq("id",key) .or().like("name",key) .or().like("address",key) .or().like("areacode",key); } IPage<WareInfoEntity> page = this.page( new Query<WareInfoEntity>().getPage(params), queryWrapper ); return new PageUtils(page); } @Override public BigDecimal getFare(Long addrId) { R info = memberFeignService.info(addrId); if(info.getCode()==0){ MemberAddressTo memberAddress = info.get("memberReceiveAddress",new TypeReference<MemberAddressTo>(){}); // TODO 计算运费的接口,目前全部写死,全部按15块钱算 if(memberAddress!=null){ return new BigDecimal(15); } } return null; } }