package com.sunda.spmsoversea.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsoversea.dto.OverseaWerksCostDTO;
import com.sunda.spmsoversea.dto.OverseaWerksCostQueryDTO;
import com.sunda.spmsoversea.entity.OverseaWerksCost;
import com.sunda.spmsoversea.mapper.OverseaWerksCostMapper;
import com.sunda.spmsoversea.service.IOverseaWerksCostService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static com.sunda.spmsoversea.constant.CommonConstant.SUCCESS;

/**
 * <p>
 * 工厂车间映射成本中心配置 服务实现类
 * </p>
 *
 * @author Hzc
 * @since 2022-12-06
 */
@Service
public class OverseaWerksCostServiceImpl extends ServiceImpl<OverseaWerksCostMapper, OverseaWerksCost> implements IOverseaWerksCostService {

    @Override
    public IPage getOverseaWerksCostPage(OverseaWerksCostQueryDTO overseaWerksCostQueryDTO) {
        IPage iPage = overseaWerksCostQueryDTO.getPage();
        List<Map<String, Object>> mapList = this.baseMapper.getOverseaWerksCostPage(iPage, overseaWerksCostQueryDTO);
        iPage.setRecords(mapList);
        return iPage;
    }


    @Override
    @Transactional(rollbackFor = Exception.class)
    public ResponseResult createOrUpdateOverseaWerksCost(OverseaWerksCostDTO overseaWerksCostDTO, String userId) throws Exception {
        OverseaWerksCost overseaWerksCost = new OverseaWerksCost();
        overseaWerksCost.setWorkCode(userId);
        overseaWerksCost.setWerks(overseaWerksCostDTO.getWerks());
        overseaWerksCost.setWhsLocationCode(overseaWerksCostDTO.getWhsLocationCode());
        overseaWerksCost.setCostCenter(overseaWerksCostDTO.getCostCenter());
        overseaWerksCost.setCostCenterName(overseaWerksCostDTO.getCostCenterName());
        if(overseaWerksCostDTO.getUuid()!=null && overseaWerksCostDTO.getUuid().length()>0){
            overseaWerksCost.setUuid(overseaWerksCostDTO.getUuid());
            QueryWrapper<OverseaWerksCost> queryWrapper = new QueryWrapper<OverseaWerksCost>().eq("UUID", overseaWerksCostDTO.getUuid());
            overseaWerksCost.setUpdateDate(new Date());
            this.baseMapper.update(overseaWerksCost, queryWrapper);
        }else{
            String uuid  = UUID.randomUUID().toString().replaceAll("-","").toLowerCase();
            overseaWerksCost.setUuid(uuid);
            overseaWerksCost.setSpmsStatus("1");
            overseaWerksCost.setCreateDate(new Date());
            this.baseMapper.insert(overseaWerksCost);
        }

        return ResponseResult.success("操作成功！");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public ResponseResult deleteOverseaWerksCost(OverseaWerksCostDTO overseaWerksCostDTO, String userId) throws Exception {
        if(overseaWerksCostDTO.getUuid()==null){
            throw new Exception("UUID不能为空" );
        }

        OverseaWerksCost overseaWerksCost = new OverseaWerksCost();
        overseaWerksCost.setWorkCode(userId);
        overseaWerksCost.setUuid(overseaWerksCostDTO.getUuid());
        overseaWerksCost.setSpmsStatus("0");
        QueryWrapper<OverseaWerksCost> queryWrapper = new QueryWrapper<OverseaWerksCost>().eq("UUID", overseaWerksCostDTO.getUuid());
        overseaWerksCost.setUpdateDate(new Date());
        this.baseMapper.update(overseaWerksCost, queryWrapper);

        return ResponseResult.success("操作成功！");
    }

}
