接着上期创建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 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 ListfindPhoneInfoVOByCategoryType(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 findAll() {
// List buyerAddressList =buyerAddressRepository.findAll();
List 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 phoneCategoryList = phoneCategoryRepository.findAll();
//常规写法
// ListphoneCategoryVOList=new ArrayList<>();
// for (PhoneCategory phoneCategory:phoneCategoryList){
// PhoneCategoryVO phoneCategoryVO = new PhoneCategoryVO();
// phoneCategoryVO.setCategoryName(phoneCategory.getCategoryName());
// phoneCategoryVO.setCategoryType(phoneCategory.getCategoryType());
// phoneCategoryVOList.add(phoneCategoryVO);
// }
//stream
List phoneCategoryVOList = phoneCategoryList.stream()
.map(e -> new PhoneCategoryVO(e.getCategoryName(),
e.getCategoryType()
)).collect(Collectors.toList());
dataVO.setCategories(phoneCategoryVOList);
//手机
List phoneInfoList = phoneInfoRepository.findAllByCategoryType(phoneCategoryList.get(0).getCategoryType());
//常规方法
// ListphoneInfoVOList=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 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 findPhoneInfoVOByCategoryType(Integer categoryType) {
List phoneInfoList = phoneInfoRepository.findAllByCategoryType(categoryType);
List 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 phoneSpecsList = phoneSpecsRepository.findAllByPhoneId(phoneId);
//tree
List phoneSpecsVOSLis = new ArrayList<>();
List 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 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 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
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代码



