package com.kidgrow.oprationcenter.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.annotation.LoginUser;
import com.kidgrow.common.constant.CommonConstant;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.model.SysUser;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.common.utils.DateUtil;
import com.kidgrow.common.utils.RandomValueUtils;
import com.kidgrow.oprationcenter.feign.RoleOrganizationService;
import com.kidgrow.oprationcenter.mapper.ProductOrderDetailMapper;
import com.kidgrow.oprationcenter.mapper.ProductOrderMapper;
import com.kidgrow.oprationcenter.mapper.ProductOrderRecordMapper;
import com.kidgrow.oprationcenter.model.ProductOrder;
import com.kidgrow.oprationcenter.model.ProductOrderDetail;
import com.kidgrow.oprationcenter.model.ProductOrderRecord;
import com.kidgrow.oprationcenter.model.SysProduct;
import com.kidgrow.oprationcenter.service.IProductOrderService;
import com.kidgrow.oprationcenter.service.ISysProductService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
* @Description: 产品的充值记录-订单
* @Project: 用户中心
* @CreateDate: Created in 2020-04-01 09:37:05
* @Author: liuke
* @version 1.0
*/
@Slf4j
@Service
public class ProductOrderServiceImpl extends SuperServiceImpl implements IProductOrderService {
@Autowired
private RoleOrganizationService roleOrganizationService;
@Autowired
private ISysProductService sysProductService;
@Autowired
private ProductOrderDetailMapper productOrderDetailMapper;
@Autowired
private ProductOrderRecordMapper productOrderRecordMapper;
/**
* 列表
* @param params
* @return
*/
@Override
public PageResult findList(Map params,@LoginUser SysUser sysUser){
Page page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
Map roleOrgMap = roleOrganizationService.getRoleOrgMap(sysUser.getRoles());
params.putAll(roleOrgMap);
List list = baseMapper.findList(page, params);
return PageResult.builder().data(list).code(0).count(page.getTotal()).build();
}
/**
* 根据ProductOrder对象当做查询条件进行查询
* @param productOrder
* @return ProductOrder
*/
@Override
public ProductOrder findByObject(ProductOrder productOrder){
return baseMapper.findByObject(productOrder);
}
/**
* 修改数据状态 启用 禁用
* @param params
* @return
*/
@Override
public ResultBody updateEnabled(Map params) {
Long id = MapUtils.getLong(params, "id");
Boolean enabled = MapUtils.getBoolean(params, "enabled");
ProductOrder productOrder = baseMapper.selectById(id);
if (productOrder == null) {
return ResultBody.failed("该数据不存在!");
}
productOrder.setEnabled(enabled);
productOrder.setUpdateTime(new Date());
int i = baseMapper.updateById(productOrder);
return i > 0 ? ResultBody.ok().data(productOrder).msg("更新成功") : ResultBody.failed("更新失败");
}
@Override
public int delProductDetail(Long orderId) {
return baseMapper.delProductDetail(orderId);
}
/**
* 用户充值(创建订单,增加充值记录,冲套餐)
* @param params
* @return
*/
@Override
@Transactional(rollbackFor = {Exception.class})
public boolean saveProductDetail(Map params)
{
//指定套餐数据
SysProduct sysProduct=sysProductService.getById(CommonConstant.REG_USER_PRODUCT_ID);
if (sysProduct != null) {
//订单合同数据
ProductOrder productOrder=new ProductOrder();
productOrder.setIsDel(false);
productOrder.setEnabled(true);
productOrder.setContractBeginTime(new Date());
productOrder.setContractEndTime(DateUtil.addDays(new Date(), CommonConstant.REG_USER_CONTRACT_DAY));
productOrder.setContractTime(new Date());
productOrder.setContractNo(RandomValueUtils.getRandom(10));
productOrder.setContractTitle(CommonConstant.REG_USER_CONTRACT_NAME);
productOrder.setHospitalId(Long.valueOf(params.get("departmentId").toString()));
productOrder.setHospitalName(params.get("hospitalName").toString());
productOrder.setDepartmentId(Long.valueOf(params.get("hospitalId").toString()));
productOrder.setDepartmentName(params.get("departmentName").toString());
productOrder.setCreateUserId(CommonConstant.CREATE_USER_ID);
productOrder.setCreateUserName(CommonConstant.CREATE_USER_NAME);
if (baseMapper.insert(productOrder)==1) {
//套餐数据
ProductOrderDetail productOrderDetail=new ProductOrderDetail();
productOrderDetail.setEnabled(true);
productOrderDetail.setIsDel(false);
productOrderDetail.setAilightCount(sysProduct.getAilightCount());
productOrderDetail.setRecordCount(sysProduct.getRecordCount());
productOrderDetail.setProBegintime(new Date());
//0 天 1 月 2 年
switch(sysProduct.getProTimeUnit())
{
case 0:
default:
productOrderDetail.setProEndtime(DateUtil.addDays(new Date(),sysProduct.getProTime()));
break;
case 1:
productOrderDetail.setProEndtime(DateUtil.addMonths(new Date(),sysProduct.getProTime()));
break;
case 2:
productOrderDetail.setProEndtime(DateUtil.addYears(new Date(),sysProduct.getProTime()));
break;
}
productOrderDetail.setProId(sysProduct.getId());
productOrderDetail.setProName(sysProduct.getProName());
productOrderDetail.setOrderId(productOrder.getId());
productOrderDetail.setProType(sysProduct.getProType());
if(productOrderDetailMapper.insert(productOrderDetail)==1)
{
//充值记录
ProductOrderRecord productOrderRecord=new ProductOrderRecord();
productOrderRecord.setEnabled(true);
productOrderRecord.setIsDel(false);
productOrderRecord.setAilightCount(sysProduct.getAilightCount());
productOrderRecord.setRecordCount(sysProduct.getRecordCount());
productOrderRecord.setProBegintime(new Date());
//0 天 1 月 2 年
switch(sysProduct.getProTimeUnit())
{
case 0:
default:
productOrderRecord.setProEndtime(DateUtil.addDays(new Date(),sysProduct.getProTime()));
break;
case 1:
productOrderRecord.setProEndtime(DateUtil.addMonths(new Date(),sysProduct.getProTime()));
break;
case 2:
productOrderRecord.setProEndtime(DateUtil.addYears(new Date(),sysProduct.getProTime()));
break;
}
productOrderRecord.setProId(sysProduct.getId());
productOrderRecord.setProName(sysProduct.getProName());
productOrderRecord.setOrderId(productOrder.getId());
productOrderRecord.setProType(sysProduct.getProType());
if(productOrderRecordMapper.insert(productOrderRecord)<1)
{
baseMapper.deleteById(productOrder.getId());
productOrderDetailMapper.deleteById(productOrderDetail.getId());
}
else
{
return true;
}
}
else
{
baseMapper.deleteById(productOrder.getId());
}
}
}
return false;
}
}