郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Service/ServiceImpl/ExcelExportServiceImpl.java
对比新文件
@@ -0,0 +1,1767 @@
package com.gk.firework.Service.ServiceImpl;
import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
import com.google.common.collect.Lists;
import java.util.Date;
import com.alibaba.fastjson.JSONObject;
import com.gk.firework.Domain.*;
import com.gk.firework.Domain.Enum.Element;
import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
import com.gk.firework.Domain.Exception.BusinessException;
import com.gk.firework.Domain.Utils.*;
import com.gk.firework.Domain.Vo.DirectionDetail;
import com.gk.firework.Domain.Vo.FireworkDeal;
import com.gk.firework.Domain.Vo.Product2JsonVo;
import com.gk.firework.Domain.Vo.ProductVo;
import com.gk.firework.Service.*;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.management.relation.Role;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
@Service("ExcelExportService")
public class ExcelExportServiceImpl implements ExcelExportService {
    private Logger logger = LogManager.getLogger(getClass());
    String[] districttitle = {"code", "name", "parentcode", "type"};
    String[] selfCheckTitle = {"检查类型", "检查内容", "参考判断", "排序", "备注"};
    String[] enterpriseTitle = {"企业名称", "单位编号", "安全监管分类", "省", "市", "区", "密码"};
    String[] feedTitle = {"反馈内容", "发现时间"};
    String[] userTitle = {"用户名", "密码", "单位", "省", "市", "区", "街道", "社区", "角色", "办公电话", "手机号", "邮箱", "部门", "职务"};
    String[] userCodeTitle = {"单位", "统一社会信用代码"};
    String[] productTitle = {"产品名称", "产品编号", "产品数量"};
    String[] contractProductTitle = {"产品名称", "产品编号", "产品数量", "单箱进价"};
    String[] productPriceTitle = {"产品名称", "流向码", "售价", "生产厂家", "规格", "含药量", "大类", "小类", "产品级别", "箱含量", "生产日期"};
    String[] returnTags = {"电子标签号", "产品名称", "生产厂家", "总装药量", "箱含量", "产品类型", "产品级别", "创建时间", "包装标识码", "进价"};
    String[] productDataTitle = {"流向码", "产品名称", "产品大类", "产品小类", "产品级别", "生产厂家", "规格", "含药量", "箱含量", "包装方式", "生产日期"};
    String[] companyCodeTitle = {"单位名称", "单位代码"};
    String[] saleProductTitle = {"包装标识码"};
    String[] saleOrderTitle = {"零售单位名称","购买人身份证号","购买时间","购买数量"};
    //正整数
    String pattern = "^[0-9]*[1-9][0-9]*$";
    Pattern pattern2 = Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$");
    @Autowired
    private DistrictService districtService;
    @Autowired
    private SelfCheckService selfCheckService;
    @Autowired
    private EnterpriseService enterpriseService;
    @Autowired
    private UserService userService;
    @Autowired
    private UserRolesService userRolesService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private EnterpriseFeedService enterpriseFeedService;
    @Autowired
    private ProductService productService;
    @Autowired
    private ProductPriceService productPriceService;
    @Autowired
    private ProductCategoryService productCategoryService;
    @Autowired
    private SaleProductService saleProductService;
    @Autowired
    private CustomerService customerService;
    @Autowired
    private SaleOrderService saleOrderService;
    @Autowired
    private ProductLocusService productLocusService;
    @Override
    public BooleanReason importDistrictExcel(InputStream in, String operator, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        List<DistrictInfo> districtInfoList = new ArrayList<>();
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != districttitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((districttitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + districttitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                DistrictInfo districtInfo = new DistrictInfo();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,编码不能为空.<br/>";
                    continue;
                } else {
                    districtInfo.setCode(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,名称不能为空.<br/>";
                    continue;
                } else {
                    districtInfo.setName(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,父编码不能为空.<br/>";
                    continue;
                } else {
                    districtInfo.setParentcode(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,类型不能为空.<br/>";
                    continue;
                } else {
                    districtInfo.setType(Byte.valueOf(value.toString()));
                }
                districtInfoList.add(districtInfo);
            }
            for (DistrictInfo districtInfo : districtInfoList) {
                districtService.save(districtInfo);
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + districtInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - districtInfoList.size()) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    @Override
    public BooleanReason imporSelfCheckExcel(InputStream in, String username, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        List<SelfCheckInfo> selfCheckInfoList = new ArrayList<>();
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != selfCheckTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((selfCheckTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                SelfCheckInfo selfCheckInfo = new SelfCheckInfo();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,检查类型不能为空.<br/>";
                    continue;
                } else {
                    selfCheckInfo.setType(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,检查内容不能为空.<br/>";
                    continue;
                } else {
                    selfCheckInfo.setContent(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,参考判断不能为空.<br/>";
                    continue;
                } else {
                    selfCheckInfo.setStandard(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    try {
                        selfCheckInfo.setSort(Integer.parseInt(value.toString().trim()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                selfCheckInfo.setCreatedby(username);
                selfCheckInfo.setModifiedby(username);
                selfCheckInfo.setCreateddate(new Date());
                selfCheckInfo.setModifieddate(new Date());
                selfCheckInfo.setIsdel((byte) 0);
                selfCheckInfoList.add(selfCheckInfo);
            }
            selfCheckService.saveBatch(selfCheckInfoList);
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + selfCheckInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - selfCheckInfoList.size()) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    @Override
    public BooleanReason importEnterpriseExcel(InputStream in, UserInfo userInfo, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        List<Enterprise> enterpriseList = new ArrayList<>();
        Date now = new Date();
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != enterpriseTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((enterpriseTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                Enterprise enterprise = new Enterprise();
                Object value = null;
                row = sheet.getRow(irow);
                //企业名称
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,企业名称不能为空.<br/>";
                    continue;
                } else if (enterpriseService.isDuplicateEnterpriseName(value.toString().trim(), null)) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,企业名称重复.<br/>";
                    continue;
                } else {
                    enterprise.setEnterprisename(value.toString().trim());
                }
                //单位编号
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位编号不能为空.<br/>";
                    continue;
                } else if (enterpriseService.isDuplicateNumber(value.toString().trim(), null)) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位编号重复.<br/>";
                    continue;
                } else {
                    enterprise.setEnterprisenumber(value.toString().trim());
                }
                //安全监管分类
                //判断监管分类的类型是否能在数据字典找到
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,安全监管分类不能为空.<br/>";
                    continue;
                } else if (!EnterpriseSafetySupervision.isInclude(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,安全监管分类输入错误.<br/>";
                    continue;
                } else {
                    enterprise.setSafetysupervision(value.toString().trim());
                }
                //省
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,省份不能为空.<br/>";
                    continue;
                } else {
                    enterprise.setProvince(value.toString().trim());
                }
                //市
                value = ExcelProperty.getCellValue(row.getCell(4), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,市不能为空.<br/>";
                    continue;
                } else {
                    enterprise.setCity(value.toString().trim());
                }
                //区
                value = ExcelProperty.getCellValue(row.getCell(5), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,区不能为空.<br/>";
                    continue;
                } else {
                    enterprise.setDistrict(value.toString().trim());
                }
                //密码
                String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
                value = ExcelProperty.getCellValue(row.getCell(6), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,参考判断不能为空.<br/>";
                    continue;
                } else if (!value.toString().matches(PW_PATTERN)) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上.<br/>";
                    continue;
                } else {
                    enterprise.setPassword(Base64Encrypt.encode(value.toString().getBytes()));
                }
                //计算安全监管分类个数
                {
                    int i = enterpriseService.countBySafetySupervision(enterprise.getSafetysupervision());
                    enterprise.setDivideflag((byte) (DivideFlagUtil.enterpriseDivideFlagGenerate(i)));
                }
                enterprise.setInfocreatebyname(userInfo.getUsername());
                enterprise.setInfocreateby(userInfo.getId());
                enterprise.setInfocreatetime(now);
                enterprise.setInfoupdatetime(now);
                enterprise.setValidflag(true);
                String randomStr = Element.random(Element.class).getValue().toString() + Element.random(Element.class).getValue().toString();
                while (enterpriseService.isDuplicate2BitCode(randomStr)) {
                    randomStr = Element.random(Element.class).getValue().toString() + Element.random(Element.class).getValue().toString();
                }
                enterprise.setTwobitcode(randomStr);
                enterpriseService.save(enterprise);
                enterpriseList.add(enterprise);
                //保存用户
                UserInfo user = new UserInfo();
                user.setIsdel((byte) 0);
                user.setProvince(enterprise.getProvince());
                user.setCity(enterprise.getCity());
                user.setArea(enterprise.getDistrict());
                user.setUsername(enterprise.getEnterprisename());
                user.setCompany(enterprise.getEnterprisename());
                user.setIssale((byte) 0);
                //普通用户
                user.setType(3);
                user.setCreatedby(user.getUsername());
                user.setCompanyid(enterprise.getId());
                user.setCreateddate(new Date());
                //设置密码
                user.setPassword(enterprise.getPassword());
                user.setCompanynumber(enterprise.getEnterprisenumber());
                //执行
                userService.save(user);
                //如果有企业角色设置用户角色为企业
                UserRolesInfo uri = new UserRolesInfo();
                uri.setUserid(user.getId());
                if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())) {
                    uri.setRoleid((long) 3);
                } else {
                    uri.setRoleid((long) 2);
                }
                userRolesService.save(uri);
                //终端机
                user.setId(null);
                user.setUsername(enterprise.getEnterprisenumber());
                user.setIssale((byte) 1);
                user.setStatus((byte) 1);
/*                Calendar cal = Calendar.getInstance();
                cal.setTime(new Date());
                cal.add(Calendar.DATE, +365);
                user.setExpiredate(cal.getTime());*/
                userService.save(user);
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + enterpriseList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - enterpriseList.size()) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    @Override
    public BooleanReason importUserExcel(InputStream in, String username, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        List<UserInfo> userInfoList = new ArrayList<>();
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != userTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((userTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + userTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                UserInfo userInfo = new UserInfo();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,用户名不能为空.<br/>";
                    continue;
                } else {
                    userInfo.setUsername(value.toString().trim());
                    UserInfo userInfoExist = userService.selectByUser(userInfo.getUsername());
                    if (null != userInfoExist) {
                        retmsg = retmsg + "导入失败,第" + realrow + "行,用户名重复.<br/>";
                        continue;
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,密码不能为空.<br/>";
                    continue;
                } else {
                    String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
                    if (!value.toString().trim().matches(PW_PATTERN)) {
                        retmsg = retmsg + "导入失败,第" + realrow + "行,密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上.<br/>";
                        continue;
                    } else {
                        userInfo.setPassword(Base64Encrypt.encode(value.toString().trim().getBytes()));
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位不能为空.<br/>";
                    continue;
                } else {
                    userInfo.setCompany(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setProvince(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(4), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setCity(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(5), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setArea(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(6), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setTown(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(7), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setCommunity(value.toString().trim());
                }
                Long roleId = null;
                value = ExcelProperty.getCellValue(row.getCell(8), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    //角色
                    RoleInfo roleInfo = new RoleInfo();
                    roleInfo.setName(value.toString().trim());
                    RoleInfo roleInfoExist = roleService.selectRoleByName(roleInfo);
                    if (roleInfoExist == null) {
                        retmsg = retmsg + "导入失败,第" + realrow + "行,角色不存在.<br/>";
                        continue;
                    } else {
                        roleId = roleInfoExist.getId();
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(9), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setPhone(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(10), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    if (value.toString().length() == 11) {
                        userInfo.setMobile(value.toString().trim());
                    } else {
                        retmsg = retmsg + "导入失败,第" + realrow + "行,手机号必须为11位数.<br/>";
                        continue;
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(11), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setEmail(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(11), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setDepartment(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(11), evaluator);
                if (null != value && StringUtils.isNotBlank(value.toString())) {
                    userInfo.setJob(value.toString().trim());
                }
                userInfo.setIsdel((byte) 0);
                userInfo.setIssale((byte) 0);
                userInfo.setCreatedby(username);
                userInfo.setCreateddate(new Date());
                userInfo.setLastmodifiedby(username);
                userInfo.setLastmodifieddate(new Date());
                userService.save(userInfo);
                if (roleId != null) {
                    UserRolesInfo userRolesInfo = new UserRolesInfo();
                    userRolesInfo.setUserid(userInfo.getId());
                    userRolesInfo.setRoleid(roleId);
                    userRolesService.save(userRolesInfo);
                }
                userInfoList.add(userInfo);
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + userInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - userInfoList.size()) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    @Override
    public List<Product2JsonVo> parsingProduct(InputStream inputStream, UserInfo userInfo, boolean isExcel2007, String enterprisenumber) {
        List<Product2JsonVo> productJsons = new ArrayList<>();
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(inputStream);
            } else {
                workbook = new HSSFWorkbook(inputStream);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                throw new BusinessException("excel 第1页不能为空");
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != contractProductTitle.length) {
                throw new BusinessException("上传文件的列的个数错误");
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((contractProductTitle[i]))) {
                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                Product2JsonVo productInfoJson = new Product2JsonVo();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                //产品名称
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[0] + "不能为空.");
                }
                //产品编号
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[1] + "不能为空.");
                } else {
                    String directionCode = value.toString().trim();
                    //检查产品编号是否是企业内的产品
                    int i = productService.countByEnterpriseNumberAndDirectionCode(enterprisenumber, directionCode);
                    assert i <= 1;
                    if (i < 1) {
                        throw new BusinessException("导入失败,第" + realrow + "行," + "产品信息不为所在生产企业的产品.>");
                    }
                    ProductInfo productInfo = productService.selectByDirection(directionCode);
                    if (productInfo.getIsOld() == 1) {
                        throw new BusinessException("导入失败,第" + realrow + "行," + "产品信息为旧系统产品,已不允许签订合同使用.>");
                    }
                    productInfoJson.setId(productInfo.getId());
                    productInfoJson.setName(productInfo.getName());
                    //使用数据库内容的流向码,区分大小写
                    productInfoJson.setDirectionCode(productInfo.getDirectionCode());
                    productInfoJson.setManufacturer(productInfo.getManufacturer());
                    productInfoJson.setSpecification(productInfo.getSpecification());
                    productInfoJson.setExplosiveContent(productInfo.getExplosiveContent());
                    productInfoJson.setType(productInfo.getType());
                    productInfoJson.setSecondaryType(productInfo.getSecondaryType());
                    productInfoJson.setLevel(productInfo.getLevel());
                    //箱含量
                    productInfoJson.setBoxNumber(productInfo.getBoxNumber());
                    productInfoJson.setPacking(productInfo.getPacking());
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[2] + "不能为空.");
                } else if (!Pattern.matches(pattern, value.toString().trim())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[2] + "不为正整数.");
                } else {
                    productInfoJson.setNum(Integer.valueOf(value.toString().trim()));
                }
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[3] + "不能为空.");
                } else if (!pattern2.matcher(value.toString().trim()).matches()) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[3] + "不为金额.");
                } else {
                    productInfoJson.setPrice(new BigDecimal(value.toString().trim()));
                }
                productJsons.add(productInfoJson);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new BusinessException("导入失败,请联系管理员");
        }
        return productJsons;
    }
    @Override
    public List<Product2JsonVo> parsingProduct(InputStream inputStream, UserInfo userInfo, boolean isExcel2007) {
        List<Product2JsonVo> productJsons = new ArrayList<>();
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(inputStream);
            } else {
                workbook = new HSSFWorkbook(inputStream);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                throw new BusinessException("excel 第1页不能为空");
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != productTitle.length) {
                throw new BusinessException("上传文件的列的个数错误");
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((productTitle[i]))) {
                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                Product2JsonVo productInfoJson = new Product2JsonVo();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                //产品名称
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[0] + "不能为空.");
                }
                //产品编号
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[1] + "不能为空.");
                } else {
                    String directionCode = value.toString().trim();
                    ProductInfo productInfo = productService.selectByDirection(directionCode);
                    productInfoJson.setId(productInfo.getId());
                    productInfoJson.setName(productInfo.getName());
                    productInfoJson.setDirectionCode(directionCode);
                    productInfoJson.setManufacturer(productInfo.getManufacturer());
                    productInfoJson.setSpecification(productInfo.getSpecification());
                    productInfoJson.setExplosiveContent(productInfo.getExplosiveContent());
                    productInfoJson.setType(productInfo.getType());
                    productInfoJson.setSecondaryType(productInfo.getSecondaryType());
                    productInfoJson.setLevel(productInfo.getLevel());
                    //箱含量
                    productInfoJson.setBoxNumber(productInfo.getBoxNumber());
                    productInfoJson.setPacking(productInfo.getPacking());
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[2] + "不能为空.");
                } else if (!Pattern.matches(pattern, value.toString().trim())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[2] + "不为正整数.");
                } else {
                    productInfoJson.setNum(Integer.valueOf(value.toString().trim()));
                }
                productJsons.add(productInfoJson);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new BusinessException("导入失败,请联系管理员");
        }
        return productJsons;
    }
    @Override
    public BooleanReason imporEditPriceExcel(InputStream in, String companynumber, String username, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        List<ProductPriceInfo> productPriceInfoList = new ArrayList<>();
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != productPriceTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((productPriceTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + productPriceTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                ProductPriceInfo productPriceInfo = new ProductPriceInfo();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,流向码不能为空.<br/>";
                    continue;
                } else {
                    productPriceInfo.setItemcode(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,售价不能为空.<br/>";
                    continue;
                } else {
                    try {
                        productPriceInfo.setPrice(new BigDecimal(value.toString().trim()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                productPriceInfo.setCompanynumber(companynumber);
                productPriceInfo.setUpdated(new Date());
                productPriceInfo.setUpdator(username);
                productPriceInfoList.add(productPriceInfo);
            }
            for (ProductPriceInfo productInfo : productPriceInfoList) {
                ProductPriceInfo productPriceInfo = productPriceService.selectByCode(companynumber, productInfo.getItemcode());
                if (productPriceInfo != null) {
                    productPriceInfo.setPrice(productInfo.getPrice());
                    productPriceInfo.setUpdated(new Date());
                    productPriceInfo.setUpdator(username);
                    productPriceService.updateById(productPriceInfo);
                } else {
                    ProductPriceInfo productPrice = new ProductPriceInfo();
                    productPrice.setCompanynumber(companynumber);
                    productPrice.setItemcode(productInfo.getItemcode());
                    productPrice.setPrice(productInfo.getPrice());
                    productPrice.setUpdated(new Date());
                    productPrice.setUpdator(username);
                    productPriceService.save(productPrice);
                }
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + productPriceInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - productPriceInfoList.size()) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    /**
     * @Description: 退货电子标签数据解析
     * @date 2021/6/3 17:15
     */
    @Override
    public List<String> parseProductCode(InputStream in, UserInfo userInfo, boolean isExcel2007) {
        Workbook workbook = null;
        try {
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                throw new BusinessException("excel 第1页不能为空");
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != returnTags.length) {
                throw new BusinessException("上传文件的列的个数错误");
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((returnTags[i]))) {
                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
                }
            }
            List<String> allReturnTags = new ArrayList<>();
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                EnterpriseFeed feed = new EnterpriseFeed();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行,电子标签不能为空.<br/>");
                } else {
                    allReturnTags.add(value.toString().trim());
                }
            }
            return allReturnTags;
        } catch (IOException e) {
            e.printStackTrace();
            throw new BusinessException("导入失败,请联系管理员");
        }
    }
    /**
     * @Description: 旧系统导入产品信息
     * @date 2021/6/30 12:29
     */
    @Override
    public List<ProductInfo> parseProductFromOldSystem(InputStream in, UserInfo user, boolean isExcel2007) {
        try {
            Workbook workbook = null;
            if (isExcel2007) workbook = new XSSFWorkbook(in);
            if (!isExcel2007) workbook = new HSSFWorkbook(in);
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null)
                throw new BusinessException("excel 第1页不能为空");
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != productDataTitle.length)
                throw new BusinessException("上传文件的列的个数错误");
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((productDataTitle[i]))) {
                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + productDataTitle[i]);
                }
            }
            List<ProductInfo> result = new ArrayList<>();
            ProductInfo product = null;
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                Object value = null;
                product = new ProductInfo();
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[0] + "不能为空.");
                } else {
                    //流向码
                    String productCode = value.toString().trim();
                    product.setDirectionCode(productCode);
                    if (productCode.length() != 10)
                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[0] + "长度不为10.");
                    //重复判断
                    List<ProductInfo> productInfosExist = productService.selectByProduct(product);
                    if (productInfosExist != null && productInfosExist.size() > 0)
                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[0] + "已经存在.");
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[1] + "不能为空.");
                } else {
                    //产品名称
                    String productName = value.toString().trim();
                    product.setName(productName);
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[2] + "不能为空.");
                } else {
                    //产品大类
                    String firstType = value.toString().trim();
                    product.setType(firstType);
                }
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[3] + "不能为空.");
                } else {
                    //产品小类
                    String secondaryType = value.toString().trim();
                    product.setSecondaryType(secondaryType);
                }
                value = ExcelProperty.getCellValue(row.getCell(4), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[4] + "不能为空.");
                } else {
                    //产品级别
                    String level = value.toString().trim();
                    product.setLevel(level);
                }
                value = ExcelProperty.getCellValue(row.getCell(5), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[5] + "不能为空.");
                } else {
                    //生产厂家
                    String manufacturer = value.toString().trim();
                    Enterprise enterprise = enterpriseService.selectEnterpriseByName(manufacturer);
                    //查不到企业 或者 不为生产企业
                    if (enterprise == null || !EnterpriseSafetySupervision.PRODUCE.getMsg().equals(enterprise.getSafetysupervision()))
                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[5] + "查找不到企业名称或者不为生产企业.");
                    product.setManufacturer(manufacturer);
                    product.setCompanyNumber(enterprise.getEnterprisenumber());
                }
                value = ExcelProperty.getCellValue(row.getCell(6), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[6] + "不能为空.");
                } else {
                    //规格
                    String specification = value.toString().trim();
                    product.setSpecification(specification);
                }
                value = ExcelProperty.getCellValue(row.getCell(7), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[7] + "不能为空.");
                } else {
                    //含药量
                    String explosiveContentStr = value.toString().trim();
                    try {
                        BigDecimal explosiveContent = new BigDecimal(explosiveContentStr);
                        product.setExplosiveContent(explosiveContent);
                        //正数
                        if (explosiveContent.compareTo(BigDecimal.ZERO) < 1)
                            throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[7] + "需要大于等于0.");
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[7] + "不合法.");
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(8), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[8] + "不能为空.");
                } else {
                    //箱含量
                    String boxNumberStr = value.toString().trim();
                    try {
                        int boxNumber = Integer.parseInt(boxNumberStr);
                        product.setBoxNumber(boxNumber);
                        if (boxNumber < 1)
                            throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[8] + "需要大于0.");
                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[8] + "不合法.");
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(9), evaluator);
                if (null != value && StringUtils.isBlank(value.toString())) {
                    //包装方式
                    String packing = value.toString().trim();
                    product.setPacking(packing);
                }
                value = ExcelProperty.getCellValue(row.getCell(10), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[10] + "不能为空.");
                } else {
                    //生产日期
                    try {
                        String productDateStr = value.toString().trim();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        Date productDate = sdf.parse(productDateStr);
                        product.setProductDate(productDate);
                    } catch (ParseException e) {
                        e.printStackTrace();
                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[10] + "日期请填写2021-09-27的字符型.");
                    }
                }
                //最后校验第一类型和第二类型和产品级别
                boolean isExist = productCategoryService.selectOne(product.getType(), product.getSecondaryType(), product.getLevel());
                if (!isExist)
                    throw new BusinessException("导入失败,第" + realrow + "行,大小类、级别不合法.");
                product.setCreatedBy(user.getUsername());
                product.setModifiedBy(user.getUsername());
                product.setCreatedDate(new Date());
                product.setModifiedDate(new Date());
                result.add(product);
            }
            return result;
        } catch (IOException e) {
            e.printStackTrace();
            throw new BusinessException("导入失败,请联系管理员");
        }
    }
    @Override
    public BooleanReason importUserCodeExcel(InputStream in, String operator, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        int z = 0;
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != userCodeTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((userCodeTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + userTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                UserInfo userInfo = new UserInfo();
                Object value = null;
                row = sheet.getRow(irow);
                String company = "";
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位名不能为空.<br/>";
                    continue;
                } else {
                    company = value.toString().trim();
                    List<UserInfo> userInfos = userService.selectByCompany(company);
                    if (userInfos.size() < 1) {
                        retmsg = retmsg + "导入失败,第" + realrow + "行,单位不存在.<br/>";
                        continue;
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,统一社会信用代码不能为空.<br/>";
                } else {
                    String code = value.toString().trim();
                    userService.updateCodeByCompany(company, code);
                    z++;
                }
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + z + "个," + "导入失败" + (sheet.getLastRowNum() - z) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    @Override
    public BooleanReason importDLCompanyCodeExcel(InputStream in, UserInfo userInfo, boolean isExcel2007) {
        Date now = new Date();
        List<Enterprise> updates = new ArrayList<>();
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                throw new BusinessException("excel 第1页不能为空");
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != companyCodeTitle.length) {
                throw new BusinessException("上传文件的列的个数错误");
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((companyCodeTitle[i]))) {
                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + companyCodeTitle[i]);
                }
            }
            if (sheet.getLastRowNum() < 1)
                throw new BusinessException("导入数据为空");
            int kk = 0;
            StringBuffer sb = new StringBuffer();
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                Object value = null;
                Enterprise upOne = new Enterprise();
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    sb.append("导入失败,第").append(realrow).append("行,单位名称不能为空.<br/>");
                    continue;
                } else {
                    String enterpriseName = value.toString().trim();
                    Enterprise enterprise = enterpriseService.selectEnterpriseByName(enterpriseName);
                    if (enterprise == null) {
                        sb.append("找不到该企业:").append(enterpriseName).append(",第").append(realrow).append("行");
                        continue;
                    }
                    upOne.setId(enterprise.getId());
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    sb.append("导入失败,第").append(realrow).append("行,单位代码不能为空.<br/>");
                    continue;
                } else {
                    String code = value.toString().trim();
                    upOne.setDlcompanycode(code);
                    upOne.setInfoupdatebyname(userInfo.getUsername());
                    upOne.setInfoupdateby(userInfo.getId());
                    upOne.setInfoupdatetime(now);
                }
                updates.add(upOne);
            }
            for (Enterprise e : updates) {
                enterpriseService.updateCompanyCode(e);
            }
            sb.append("成功" + updates.size() + "个,失败" + (sheet.getLastRowNum() - updates.size()) + "个");
            BooleanReason booleanReason = new BooleanReason();
            booleanReason.addReason(sb.toString());
            return booleanReason;
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new BusinessException("导入失败,请联系管理员");
        }
    }
    /**
     * @Description: 企业反馈导入
     * @date 2021/5/13 19:32
     */
    @Override
    public void importFeedExcel(InputStream in, UserInfo user, Boolean isExcel2007, Long enterpriseId) {
        List<EnterpriseFeed> feeds = new ArrayList<>();
        Date now = new Date();
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                throw new BusinessException("excel 第1页不能为空");
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != feedTitle.length) {
                throw new BusinessException("上传文件的列的个数错误");
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((feedTitle[i]))) {
                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                EnterpriseFeed feed = new EnterpriseFeed();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行,反馈内容不能为空.<br/>");
                } else {
                    feed.setContent(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    throw new BusinessException("导入失败,第" + realrow + "行,发现时间不能为空.<br/>");
                } else if (!DateUtils.isLegalDate(value.toString().length(), value.toString(), "d/M/yy")) {
                    throw new BusinessException("日期格式不正确,应如2020-10-10或者2020/10/10");
                } else {
                    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("d/M/yy");
                    Date date = sdf.parse(value.toString());
                    feed.setFindtime(date);
                }
                feed.setEnterpriseid(enterpriseId);
                feed.setCreateby(user.getId());
                feed.setCreatetime(now);
                feed.setCreatebyname(user.getUsername());
                feed.setValidflag(true);
                feeds.add(feed);
            }
            enterpriseFeedService.saveBatch(feeds);
        } catch (ParseException ex) {
            ex.printStackTrace();
            throw new BusinessException("类型转换错误");
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new BusinessException("导入失败,请联系管理员");
        }
    }
    @Override
    public BooleanReason imporSaleProductExcel(InputStream in, String username, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        int importSize = 0;
        String retmsg = "";
        blret.setValue(false);
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != saleProductTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((saleProductTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + saleProductTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                List<SaleProductInfo> saleProductInfoList = new ArrayList<>();
                Object value = null;
                row = sheet.getRow(irow);
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,流向码不能为空.<br/>";
                    continue;
                } else {
                    String directionCodeStr = value.toString().trim();
                    ProductInfo productInfo = productService.selectByDirection(directionCodeStr.substring(0, 10));
                    if (FireworkDeal.is22Characters(directionCodeStr)){
                        List<ProductVo>productVoList = new ArrayList<>();
                        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodeStr);
                        ProductVo productVo = productService.selectVoByDirection(directionCodeStr);
                        FireworkDeal.getProductVos(directionCodeStr,directionDetail,directionDetail,productVoList,productVo);
                        for (ProductVo productVo1 : productVoList){
                            SaleProductInfo saleProductInfo = new SaleProductInfo();
                            saleProductInfo.setItemcode(productInfo.getDirectionCode());
                            saleProductInfo.setDirectioncode(productVo1.getDirectionCode());
                            saleProductInfo.setItemname(productVo1.getName());
                            saleProductInfo.setSpecification(productVo1.getSpecification());
                            saleProductInfo.setPrice(new BigDecimal(0));
                            saleProductInfo.setCreatedby(username);
                            saleProductInfo.setCreatedat(new Date());
                            saleProductInfo.setIsuse((byte)0);
                            saleProductInfoList.add(saleProductInfo);
                        }
                    }else {
                        SaleProductInfo saleProductInfo = new SaleProductInfo();
                        saleProductInfo.setItemcode(productInfo.getDirectionCode());
                        saleProductInfo.setDirectioncode(directionCodeStr);
                        saleProductInfo.setItemname(productInfo.getName());
                        saleProductInfo.setSpecification(productInfo.getSpecification());
                        saleProductInfo.setPrice(new BigDecimal(0));
                        saleProductInfo.setCreatedby(username);
                        saleProductInfo.setCreatedat(new Date());
                        saleProductInfo.setIsuse((byte)0);
                        saleProductInfoList.add(saleProductInfo);
                    }
                }
                if (saleProductInfoList.size() > 0){
                    saleProductService.saveBatch(saleProductInfoList);
                    importSize ++;
                }
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + importSize + "个," + "导入失败" + (sheet.getLastRowNum() - importSize) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        }
        blret.setValue(true);
        return blret;
    }
    @Override
    public BooleanReason imporSaleOrderExcel(InputStream in, String username, Boolean isExcel2007) {
        BooleanReason blret = new BooleanReason();
        String retmsg = "";
        blret.setValue(false);
        int size = 0;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Workbook workbook = null;
            if (isExcel2007) {
                workbook = new XSSFWorkbook(in);
            } else {
                workbook = new HSSFWorkbook(in);
            }
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            Sheet sheet = workbook.getSheetAt(0);
            if (sheet == null) {
                blret.addReason("excel 第1页不能为空");
                return blret;
            }
            Row row = sheet.getRow(0);
            // 标题总列数
            int colNum = row.getPhysicalNumberOfCells();
            String[] title = new String[colNum];
            if (colNum != saleOrderTitle.length) {
                blret.addReason("上传文件的列的个数错误");
                return blret;
            }
            for (int i = 0; i < colNum; i++) {
                title[i] = row.getCell(i).getStringCellValue();
                if (StringUtils.isNotBlank(title[i])) {
                    title[i] = title[i].trim();
                }
                if (!title[i].equals((saleOrderTitle[i]))) {
                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + saleOrderTitle[i]);
                    return blret;
                }
            }
            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
                int realrow = irow + 1;
                Object value = null;
                row = sheet.getRow(irow);
                SaleOrderInfo saleOrderInfo = new SaleOrderInfo();
                List<SaleOrderDetailInfoBO> detailInfoList = new ArrayList<>();
                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,零售单位名称不能为空.<br/>";
                    continue;
                }else {
                    Enterprise enterprise = enterpriseService.selectEnterpriseByName(value.toString().trim());
                    if (enterprise == null){
                        continue;
                    }else {
                        saleOrderInfo.setCreatedby(enterprise.getEnterprisenumber());
                        saleOrderInfo.setShop(enterprise.getEnterprisename());
                        saleOrderInfo.setCompanynumber(enterprise.getEnterprisenumber());
                    }
                }
                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,身份证不能为空.<br/>";
                    continue;
                }else {
                    saleOrderInfo.setIdcardnum(value.toString().trim());
                }
                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,购买时间不能为空.<br/>";
                    continue;
                }else {
                    String now = sdf.format(new Date());
                    String purseTime = value.toString().trim()+ now.substring(10);
                    saleOrderInfo.setCreatedat(sdf.parse(purseTime));
                }
                List<SaleProductInfo> saleProductInfoList = new ArrayList<>();
                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
                if (null == value || StringUtils.isBlank(value.toString())) {
                    retmsg = retmsg + "导入失败,第" + realrow + "行,购买数量不能为空.<br/>";
                    continue;
                }else {
                    saleOrderInfo.setBoxnum(new BigDecimal(Integer.valueOf(value.toString().trim())));
                    saleProductInfoList = saleProductService.selectRandom(Integer.valueOf(value.toString().trim()));
                    for (SaleProductInfo saleProductInfo : saleProductInfoList){
                        SaleOrderDetailInfoBO detailInfo = new SaleOrderDetailInfoBO();
                        detailInfo.setItemcode(saleProductInfo.getItemcode());
                        detailInfo.setItemname(saleProductInfo.getItemname());
                        detailInfo.setDirectioncode(saleProductInfo.getDirectioncode());
                        detailInfo.setCreatedat(saleOrderInfo.getCreatedat());
                        detailInfo.setCreatedby(saleOrderInfo.getCompanynumber());
                        detailInfo.setPrice(new BigDecimal("0"));
                        detailInfo.setSpecification(saleProductInfo.getSpecification());
                        detailInfo.setReturnflag((byte)0);
                        detailInfoList.add(detailInfo);
                    }
                }
                customerService.createOrUpdateCard(saleOrderInfo.getIdcardnum(),detailInfoList.size(),saleOrderInfo.getCreatedat());
                CustomerInfo customerInfo = customerService.getCustomerByIdCardNum(saleOrderInfo.getIdcardnum());
                UserInfo userInfo = userService.selectByUser(saleOrderInfo.getCompanynumber());
                SaleOrderInfo saleOrderInfo1 = saleOrderService.createOrder(userInfo,detailInfoList,"1",detailInfoList.size(),saleOrderInfo.getCreatedat(),customerInfo.getId(),"0","0","0", "");
                for (SaleProductInfo saleProductInfo : saleProductInfoList){
                    saleProductInfo.setIsuse((byte)1);
                    saleProductService.updateById(saleProductInfo);
                    //插入流向轨迹
                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(saleProductInfo.getDirectioncode(),saleOrderInfo.getCreatedat(),saleOrderInfo.getCreatedat(),
                            userInfo.getCompany(),customerInfo.getId(),ProductLocusInfo.SALES_STATUS,null);
                    productLocusService.insertProductLocus(productLocusInfo);
                }
                size ++;
            }
            if (StringUtils.isNotBlank(retmsg)) {
                retmsg = retmsg + "导入成功" + size + "个," + "导入失败" + (sheet.getLastRowNum() - size) + "个。";
                blret.addReason(retmsg);
                return blret;
            }
        } catch (IOException e) {
            logger.error(e.getLocalizedMessage());
            blret.addReason("导入错误");
            return blret;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        blret.setValue(true);
        return blret;
    }
}