接着上期创建service文件夹创建接口和实现层
在文件中创建接口
1.方法调用层
1)AddressService(定义实现地址查找更新保存的方法)
package com.southwind2.phone_store_demo.service; import com.southwind2.phone_store_demo.from.AddressForm; import com.southwind2.phone_store_demo.vo.AddressVO; import java.util.List; public interface AddressService { public List<AddressVO> findAll(); public void saveOrUpdate(AddressForm addressForm); }
2)OderService(定义订单创建以及以订单编号查找订单详情的方法)
package com.southwind2.phone_store_demo.service; import com.southwind2.phone_store_demo.dto.OrderDTO; import com.southwind2.phone_store_demo.vo.OrderDetailVO; public interface OderService { public OrderDTO create(OrderDTO orderDTO); public OrderDetailVO findOrderDetailByOrderId(String orderId); public String pay(String orderId); }
3.PhoneService(定义手机查询等各项需要的方法)
package com.southwind2.phone_store_demo.service; import com.southwind2.phone_store_demo.vo.DataVO; import com.southwind2.phone_store_demo.vo.PhoneInfoVO; import com.southwind2.phone_store_demo.vo.SpecsPackageVO; import java.util.List; public interface PhoneService { public DataVO findDateVO(); public List<PhoneInfoVO>findPhoneInfoVOByCategoryType(Integer categoryType); public SpecsPackageVO findSpecsByPhoneId(Integer phoneId); public void subStock(Integer specsId,Integer quantity); }
2.方法实现层在service文件中创建impl文件
1)AddressServiceImpl地址相关方法实现类
package com.southwind2.phone_store_demo.service.impl; import com.southwind2.phone_store_demo.entity.BuyerAddress; import com.southwind2.phone_store_demo.from.AddressForm; import com.southwind2.phone_store_demo.repository.BuyerAddressRepository; import com.southwind2.phone_store_demo.service.AddressService; import com.southwind2.phone_store_demo.vo.AddressVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class AddressServiceImpl implements AddressService { @Autowired private BuyerAddressRepository buyerAddressRepository; @Override public List<AddressVO> findAll() { // List<BuyerAddress> buyerAddressList =buyerAddressRepository.findAll(); List<AddressVO> list=buyerAddressRepository.findAll().stream(). map(e->new AddressVO( e.getAddressId(), e.getAreaCode(), e.getBuyerName(), e.getBuyerPhone(), e.getBuyerAddress() )).collect(Collectors.toList()); return list; } @Override public void saveOrUpdate(AddressForm addressForm) { BuyerAddress buyerAddress; if (addressForm.getId()==null){ buyerAddress=new BuyerAddress(); }else { buyerAddress=buyerAddressRepository.findById(addressForm.getId()).get(); } buyerAddress.setBuyerName(addressForm.getName()); buyerAddress.setBuyerPhone(addressForm.getTel()); StringBuffer stringBuffer =new StringBuffer(); stringBuffer.append(addressForm.getProvince()) .append(addressForm.getCity()) .append(addressForm.getCounty()) .append(addressForm.getAddressDetail()); buyerAddress.setBuyerAddress(stringBuffer.toString()); buyerAddress.setAreaCode(addressForm.getAreaCode()); buyerAddressRepository.save(buyerAddress); } }
2)OrderServiceImpl订单相关实现类
package com.southwind2.phone_store_demo.service.impl; import com.southwind2.phone_store_demo.dto.OrderDTO; import com.southwind2.phone_store_demo.entity.OrderMaster; import com.southwind2.phone_store_demo.entity.PhoneInfo; import com.southwind2.phone_store_demo.entity.PhoneSpecs; import com.southwind2.phone_store_demo.enums.PayStatusEnum; import com.southwind2.phone_store_demo.enums.ResultEnum; import com.southwind2.phone_store_demo.exception.PhoneException; import com.southwind2.phone_store_demo.repository.OrderMasterRepository; import com.southwind2.phone_store_demo.repository.PhoneInfoRepository; import com.southwind2.phone_store_demo.repository.PhoneSpecsRepository; import com.southwind2.phone_store_demo.service.OderService; import com.southwind2.phone_store_demo.service.PhoneService; import com.southwind2.phone_store_demo.service.util.KeyUtil; import com.southwind2.phone_store_demo.vo.OrderDetailVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; @Service @Slf4j public class OrderServiceImpl implements OderService { @Autowired private PhoneSpecsRepository phoneSpecsRepository; @Autowired private PhoneInfoRepository phoneInfoRepository; @Autowired private OrderMasterRepository orderMasterRepository; @Autowired private PhoneService phoneService; @Override public OrderDTO create(OrderDTO orderDTO) { OrderMaster orderMaster = new OrderMaster(); BeanUtils.copyProperties(orderDTO,orderMaster); PhoneSpecs phoneSpecs = phoneSpecsRepository.findById(orderDTO.getSpecsId()).get(); if (phoneSpecs==null){ log.error("[创建订单] 规格不存在,phoneSpecs={}",phoneSpecs); throw new PhoneException(ResultEnum.SPECS_NOT_EXIST); } BeanUtils.copyProperties(phoneSpecs,orderMaster); PhoneInfo phoneInfo = phoneInfoRepository.findById(phoneSpecs.getPhoneId()).get(); if (phoneInfo == null){ log.error("[创建订单] 手机不存在,phoneInfo={}",phoneInfo); throw new PhoneException(ResultEnum.PHONE_NOT_EXIST); } BeanUtils.copyProperties(phoneInfo,orderMaster); //计算总价 BigDecimal orderAmount =new BigDecimal(0); orderAmount = phoneSpecs.getSpecsPrice().divide(new BigDecimal(100)) .multiply(new BigDecimal(orderDTO.getPhoneQuantity())) .add(orderAmount) .add(new BigDecimal(10)); orderMaster.setOrderAmount(orderAmount); //orderId orderMaster.setOrderId(KeyUtil.creatUniqueKey()); orderDTO.setOrderId(orderMaster.getOrderId()); //payStatus orderMaster.setPayStatus(PayStatusEnum.UNPIAD.getCode()); orderMasterRepository.save(orderMaster); //改库存 phoneService.subStock(orderDTO.getSpecsId(),orderDTO.getPhoneQuantity()); return orderDTO; } @Override public OrderDetailVO findOrderDetailByOrderId(String orderId) { OrderDetailVO orderDetailVO= new OrderDetailVO(); OrderMaster orderMaster= orderMasterRepository.findById(orderId).get(); if (orderMaster==null){ log.error("[查询订单] 订单不存在,orderMaster={}",orderMaster); throw new PhoneException(ResultEnum.ORDER_NOT_EXIST); } BeanUtils.copyProperties(orderMaster,orderDetailVO); orderDetailVO.setSpecsPrice(orderMaster.getSpecsPrice().divide(new BigDecimal(100))+".00"); return orderDetailVO; } @Override public String pay(String orderId) { OrderMaster orderMaster=orderMasterRepository.findById(orderId).get(); if (orderMaster == null){ log.error("[支付订单] 订单不存在,orderMaster={}",orderMaster); throw new PhoneException(ResultEnum.ORDER_NOT_EXIST); } if (orderMaster.getPayStatus().equals(PayStatusEnum.UNPIAD.getCode())){ orderMaster.setPayStatus(PayStatusEnum.PIAD.getCode()); orderMasterRepository.save(orderMaster); }else { log.error("[支付订单] 订单已支付,orderMaster={}",orderMaster); } return orderId; } }
3)PhoneServiceImpl 手机业务相关实现类
package com.southwind2.phone_store_demo.service.impl; import ch.qos.logback.core.joran.util.beans.BeanUtil; import com.southwind2.phone_store_demo.entity.PhoneCategory; import com.southwind2.phone_store_demo.entity.PhoneInfo; import com.southwind2.phone_store_demo.entity.PhoneSpecs; import com.southwind2.phone_store_demo.enums.ResultEnum; import com.southwind2.phone_store_demo.exception.PhoneException; import com.southwind2.phone_store_demo.repository.PhoneCategoryRepository; import com.southwind2.phone_store_demo.repository.PhoneInfoRepository; import com.southwind2.phone_store_demo.repository.PhoneSpecsRepository; import com.southwind2.phone_store_demo.service.PhoneService; import com.southwind2.phone_store_demo.service.util.PhoneUtil; import com.southwind2.phone_store_demo.vo.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service @Slf4j public class PhoneServiceImpl implements PhoneService { @Autowired private PhoneCategoryRepository phoneCategoryRepository; @Autowired private PhoneInfoRepository phoneInfoRepository; @Autowired private PhoneSpecsRepository phoneSpecsRepository; @Override public DataVO findDateVO() { DataVO dataVO = new DataVO(); //类型 List<PhoneCategory> phoneCategoryList = phoneCategoryRepository.findAll(); //常规写法 // List<PhoneCategoryVO>phoneCategoryVOList=new ArrayList<>(); // for (PhoneCategory phoneCategory:phoneCategoryList){ // PhoneCategoryVO phoneCategoryVO = new PhoneCategoryVO(); // phoneCategoryVO.setCategoryName(phoneCategory.getCategoryName()); // phoneCategoryVO.setCategoryType(phoneCategory.getCategoryType()); // phoneCategoryVOList.add(phoneCategoryVO); // } //stream List<PhoneCategoryVO> phoneCategoryVOList = phoneCategoryList.stream() .map(e -> new PhoneCategoryVO(e.getCategoryName(), e.getCategoryType() )).collect(Collectors.toList()); dataVO.setCategories(phoneCategoryVOList); //手机 List<PhoneInfo> phoneInfoList = phoneInfoRepository.findAllByCategoryType(phoneCategoryList.get(0).getCategoryType()); //常规方法 // List<PhoneInfoVO>phoneInfoVOList=new ArrayList<>(); // for (PhoneInfo phoneInfo:phoneInfoList){ // PhoneInfoVO phoneInfoVO =new PhoneInfoVO(); // BeanUtils.copyProperties(phoneInfo,phoneInfoVO); // phoneInfoVO.setTag(PhoneUtil.createTag(phoneInfo.getPhoneTag())); // phoneInfoVOList.add(phoneInfoVO); // } //stream List<PhoneInfoVO> phoneInfoVOList = phoneInfoList.stream() .map(e -> new PhoneInfoVO( e.getPhoneId(), e.getPhoneName(), e.getPhonePrice() + ".00", e.getPhoneDescription(), PhoneUtil.createTag(e.getPhoneTag()), e.getPhoneIcon() )).collect(Collectors.toList()); dataVO.setPhones(phoneInfoVOList); return dataVO; } @Override public List<PhoneInfoVO> findPhoneInfoVOByCategoryType(Integer categoryType) { List<PhoneInfo> phoneInfoList = phoneInfoRepository.findAllByCategoryType(categoryType); List<PhoneInfoVO> phoneInfoVOList = phoneInfoList.stream(). map(e -> new PhoneInfoVO( e.getPhoneId(), e.getPhoneName(), e.getPhonePrice() + ".00", e.getPhoneDescription(), PhoneUtil.createTag(e.getPhoneTag()), e.getPhoneIcon() )).collect(Collectors.toList()); return phoneInfoVOList; } @Override public SpecsPackageVO findSpecsByPhoneId(Integer phoneId) { PhoneInfo phoneInfo = phoneInfoRepository.findById(phoneId).get(); List<PhoneSpecs> phoneSpecsList = phoneSpecsRepository.findAllByPhoneId(phoneId); //tree List<PhoneSpecsVO> phoneSpecsVOSLis = new ArrayList<>(); List<PhoneSpecsCasVO> phoneSpecsCasVOList = new ArrayList<>(); PhoneSpecsVO phoneSpecsVO; PhoneSpecsCasVO phoneSpecsCasVO; for (PhoneSpecs phoneSpecs : phoneSpecsList) { phoneSpecsVO = new PhoneSpecsVO(); phoneSpecsCasVO = new PhoneSpecsCasVO(); BeanUtils.copyProperties(phoneSpecs, phoneSpecsVO); BeanUtils.copyProperties(phoneSpecs, phoneSpecsCasVO); phoneSpecsVOSLis.add(phoneSpecsVO); phoneSpecsCasVOList.add(phoneSpecsCasVO); } TreeVO treeVO = new TreeVO(); treeVO.setV(phoneSpecsVOSLis); List<TreeVO> treeVOList = new ArrayList<>(); treeVOList.add(treeVO); SkuVO skuVO = new SkuVO(); Integer price = phoneInfo.getPhonePrice().intValue(); skuVO.setPrice(price + ".00"); skuVO.setStock_num(phoneInfo.getPhoneStock()); skuVO.setTree(treeVOList); skuVO.setList(phoneSpecsCasVOList); SpecsPackageVO specsPackageVO = new SpecsPackageVO(); specsPackageVO.setSku(skuVO); Map<String, String> goods = new HashMap<>(); goods.put("picture", phoneInfo.getPhoneIcon()); specsPackageVO.setGoods(goods); return specsPackageVO; } @Override public void subStock(Integer specsId, Integer quantity) { PhoneSpecs phoneSpecs = phoneSpecsRepository.findById(specsId).get(); PhoneInfo phoneInfo = phoneInfoRepository.findById(phoneSpecs.getPhoneId()).get(); Integer result = phoneSpecs.getSpecsStock() - quantity; if (result < 0) { log.error("[扣库存]库存不足"); throw new PhoneException(ResultEnum.PHONE_STOCK_ERROR); } phoneSpecs.setSpecsStock(result); phoneSpecsRepository.save(phoneSpecs); result = phoneInfo.getPhoneStock() - quantity; if (result < 0) { log.error("[扣库存]库存不足"); throw new PhoneException(ResultEnum.PHONE_STOCK_ERROR); } phoneInfo.setPhoneStock(result); phoneInfoRepository.save(phoneInfo); } }
3.其他附加功能实现层在service文件夹下创建util
1)KeyUtil订单号码随机生成方法
package com.southwind2.phone_store_demo.service.util; import java.util.Random; public class KeyUtil { public static synchronized String creatUniqueKey(){ Random random = new Random(); Integer kye=random.nextInt(900000)+100000; return System.currentTimeMillis()+String.valueOf(kye); } }
2)PhoneUtil 手机信息列举
package com.southwind2.phone_store_demo.service.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class PhoneUtil { public static List<Map<String,String>> createTag(String tag){ String[] tags = tag.split("&"); List<Map<String,String>> list = new ArrayList<>(); Map<String,String> map; for (String s : tags) { map = new HashMap<>(); map.put("name",s); list.add(map); } return list; } }
3)ResultVOUtil 返回结果提示
package com.southwind2.phone_store_demo.service.util; import com.southwind2.phone_store_demo.vo.ResultVO; public class ResultVOUtil { public static ResultVO success(Object data){ ResultVO resultVO = new ResultVO(); resultVO.setCode(0); resultVO.setMsg("成功"); resultVO.setData(data); return resultVO; } public static ResultVO error(String error){ ResultVO resultVO = new ResultVO(); resultVO.setCode(1); resultVO.setMsg(error); resultVO.setData(null); return resultVO; } } 以上就是所有相关service代码