//package com.hys.app.service.erp.impl;
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.hys.app.converter.erp.CompanyConverter;
//import com.hys.app.framework.context.user.AdminUserContext;
//import com.hys.app.framework.exception.ServiceException;
//import com.hys.app.framework.util.StringUtil;
//import com.hys.app.mapper.erp.CompanyMapper;
//import com.hys.app.mapper.system.AdminUserMapper;
//import com.hys.app.model.erp.dos.ProductStockDO;
//import com.hys.app.model.erp.entity.*;
//import com.hys.app.model.system.dos.AdminUser;
//import com.hys.app.service.erp.CompanyManager;
//import com.hys.app.service.erp.CompanyPackageManager;
//import com.hys.app.util.PinYingUtil;
//import com.hys.app.util.ValidateUtil;
//import lombok.AllArgsConstructor;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import java.math.BigDecimal;
//import java.time.LocalDateTime;
//import java.time.ZoneId;
//import java.util.Date;
//import java.util.List;
//import java.util.Random;
//import java.util.regex.Pattern;
//
///**
// * 平台管理员业务类
// *
// * @author zh
// * @version v7.0
// * @since v7.0.0
// * 2018-06-20 20:38:26
// */
//@Service
//@AllArgsConstructor
//public class CompanyManagerImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyManager {
//
//    private RedisTemplate redisTemplate;
//    private CompanyPackageManager companyPackageManager;
//    private AdminUserMapper adminUserMapper;
//
//    @Override
//    public String createCompany(CompanyDO companyDO) {
//        CompanyPackage byId = companyPackageManager.getById(companyDO.getCompanyPackageId());
//        if (ObjectUtil.isNull(byId)){
//            throw new ServiceException("套餐不存在");
//        }
//        CompanyErp convert = CompanyConverter.INSTANCE.convert(companyDO);
//        convert.setThisDay(byId.getDay());
//        convert.setThisMoney(byId.getMoney());
//        convert.setRoleId(byId.getRoleId());
//        convert.setUserNum(byId.getUserNum());
//        checkParam(convert);
//        convert.setEndUseTime(LocalDateTime.now().plusDays(15));
//        convert.setPinying(PinYingUtil.toPinyin(companyDO.getName()));
//        convert.setFirstPy(PinYingUtil.toPinyinFirstLetter(companyDO.getName()));
//        save(convert);
//
//        //给公司创建初始账号
//        String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
//        StringBuilder sb = new StringBuilder();
//        Random random = new Random();
//        for (int i = 0; i < 6; i++) {
//            int index = random.nextInt(characters.length());
//            sb.append(characters.charAt(index));
//        }
//        String password = sb.toString();
//
//        //管理员信息入库
//        AdminUser adminUser = new AdminUser();
//        adminUser.setCompanyId(convert.getId());
//        adminUser.setUsername("admin");
//        adminUser.setRoleId(convert.getRoleId());
//        adminUser.setFounder(0);
//        adminUser.setNickname(convert.getName()+"管理员");
//        adminUser.setPassword(StringUtil.md5(password + adminUser.getUsername().toLowerCase()));
//        adminUser.setDateLine(com.hys.app.framework.util.DateUtil.getDateline());
//        adminUser.setUserState(0);
//        adminUser.setFirstPassword(password);
//        adminUser.setPhone(convert.getPhone());
//        adminUser.setEmail(convert.getEmail());
//        adminUserMapper.insert(adminUser);
//        //todo  发消息
//        return password;
//    }
//
//    @Override
//    public Long updateCompany(CompanyUpdateDO companyUpdateDO, Long id) {
//        Company company = ValidateUtil.getOne(baseMapper, Company::getId, id, "企业");
//        CompanyConverter.INSTANCE.convert(company, companyUpdateDO);
//        updateById(company);
//        return id;
//    }
//
//    @Override
//    public Long renewCompany(CompanyRenewDO companyUpdateDO, Long id) {
//        redisTemplate.opsForHash().put("company", id, companyUpdateDO);
//        //todo  如果没到期就续费并更改了套餐和人数需要计算出来差价，在付款了之后再回调里面更改状态和到期时间
//        return null;
//    }
//
//    @Override
//    public CompanyVO getOneCompany(Long id) {
//        return CompanyConverter.INSTANCE.convert(ValidateUtil.getOne(baseMapper, Company::getId, id, "企业"));
//    }
//
//    @Override
//    public IPage<CompanyVO> getPage(CompanyQuery query) {
//        CompanyPackage changePackage = companyPackageManager.getById(1810563436374044674L);
//        Company company = getById(56474);
//        List<Company> list1 = list();
//
//        List<Company> list = list(new LambdaQueryWrapper<Company>().like(StrUtil.isNotBlank(query.getName()), Company::getName, query.getName())
//                .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
//                .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
//                .ge(ObjectUtil.isNotNull(query.getHasUse()), Company::getEndUseTime, LocalDateTime.now())
//                .eq(!AdminUserContext.hasFound(), Company::getId, AdminUserContext.getCompanyId()));
//
//
//        Page<Company> page = this.baseMapper.selectPage(new Page<>(query.getPageNo(), query.getPageSize()),
//                new LambdaQueryWrapper<Company>().like(StrUtil.isNotBlank(query.getName()), Company::getName, query.getName())
//                        .like(StrUtil.isNotBlank(query.getIndustry()), Company::getIndustry, query.getIndustry())
//                        .like(StrUtil.isNotBlank(query.getUserName()), Company::getUserName, query.getUserName())
//                        .ge(ObjectUtil.isNotNull(query. getHasUse()), Company::getEndUseTime, LocalDateTime.now())
//                        .eq(!AdminUserContext.hasFound(),Company::getId,AdminUserContext.getCompanyId()));
//        Page<CompanyVO> convert = CompanyConverter.INSTANCE.convert(page);
//        for (CompanyVO vo : convert.getRecords()) {
//            //todo 人员做好了之后统计人数
//            vo.setCurrentUserNum(1);
//        }
//        return convert;
//    }
//
//    @Override
//    public BigDecimal renewCompanyDifference(Long id) {
//        Company company =getById(AdminUserContext.getCompanyId());
//        CompanyPackage changePackage = companyPackageManager.getById(id);
//        CompanyPackage usePackage = companyPackageManager.getById(company.getCompanyPackageId());
//        BigDecimal subtract = changePackage.getMoney().divide(BigDecimal.valueOf(changePackage.getDay()))
//                .subtract(usePackage.getMoney().divide(BigDecimal.valueOf(usePackage.getDay())));
//        if (subtract.compareTo(BigDecimal.ZERO)<0){
//            return BigDecimal.ZERO;
//        }
//        long betweenDay = DateUtil.betweenDay(Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()),
//                Date.from(company.getEndUseTime().atZone(ZoneId.systemDefault()).toInstant()),
//                true);
//        return subtract.multiply(BigDecimal.valueOf(betweenDay));
//    }
//
//
//
//    private void checkParam(Company convert) {
//        if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", convert.getCreditCode())){
//            throw new ServiceException("统一社会信用代码不能包含中文和特殊符号");
//        }
//        if (ValidateUtil.checkRepeat(baseMapper, Company::getCreditCode, convert.getCreditCode(), Company::getId, convert.getId())) {
//            throw new ServiceException("统一社会代码已存在");
//        }
//        if (ValidateUtil.checkRepeat(baseMapper, Company::getName, convert.getName(), Company::getId, convert.getId())) {
//            throw new ServiceException("公司名称重复");
//        }
//    }
//}
