自学实前后端践项目2 phone Store 5

接着上期创建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代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值