package com.thhy.materials.modules.biz.materials.service.impl; import cn.hutool.core.io.IoUtil; import cn.hutool.poi.excel.ExcelWriter; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.thhy.general.common.BasicResult; import com.thhy.general.config.SysUserInfo; import com.thhy.general.utils.UserInfoUtils; import com.thhy.materials.modules.biz.concret.entity.SysSteel; import com.thhy.materials.modules.biz.concret.entity.SysSteelRecord; import com.thhy.materials.modules.biz.concret.entity.dto.SteelStatisticsDto; import com.thhy.materials.modules.biz.concret.mapper.SysSteelMapper; import com.thhy.materials.modules.biz.concret.mapper.SysSteelRecordMapper; import com.thhy.materials.modules.biz.materials.entity.SysAssistCorrection; import com.thhy.materials.modules.biz.materials.entity.SysAssistGood; import com.thhy.materials.modules.biz.materials.entity.SysAssistRecord; import com.thhy.materials.modules.biz.materials.entity.dto.*; import com.thhy.materials.modules.biz.materials.mapper.SysAssistGoodMapper; import com.thhy.materials.modules.biz.materials.mapper.SysAssistRecordMapper; import com.thhy.materials.modules.biz.materials.service.SysAssistGoodService; import com.thhy.materials.modules.biz.materials.service.SysAssistRecordService; import com.thhy.materials.modules.biz.utils.ExcelUtil; import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Array; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; import java.util.Map; @Service public class SysAssistRecordServiceImpl implements SysAssistRecordService { @Resource private SysAssistRecordMapper assistRecordMapper; @Resource private SysSteelRecordMapper recordMapper; @Resource private SysAssistGoodMapper goodMapper; @Override @Transactional public BasicResult assistRecordInsert(HashMap values) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); //辅材id String assistId = values.get("assistId").toString(); Integer stockType = Integer.valueOf(values.get("stockType").toString()); Integer changeStock = Integer.valueOf(values.get("changeStock").toString()); Integer stock = assistRecordMapper.assistStock(assistId); if(stockType==1){ Integer nums = (changeStock + stock); assistRecordMapper.assistStockUp(assistId,nums); }else { if (changeStock>stock){ return BasicResult.faild("11111","出库量大于库存","出库量大于库存"); }else { Integer nums = (stock - changeStock); assistRecordMapper.assistStockUp(assistId,nums); } } values.put("id",""); values.put("createUser",sysUserInfo.getUserId()); values.put("companyId",sysUserInfo.getCompanyId()); assistRecordMapper.assistRecordInsert(values); return BasicResult.success("添加成功"); } @Override public BasicResult assistRecordList(Map values) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); Integer pageSize = Integer.valueOf(values.get("pageSize").toString()); Integer pageNum = Integer.valueOf(values.get("pageNum").toString()); PageHelper.startPage(pageNum,pageSize); List sysAssistRecords = assistRecordMapper.assistRecordList(values); PageInfo sysAssistRecordPageInfo = new PageInfo<>(sysAssistRecords); return BasicResult.success(sysAssistRecordPageInfo); } @Override public BasicResult assistRecordOutList(Map values) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); Integer pageSize = Integer.valueOf(values.get("pageSize").toString()); Integer pageNum = Integer.valueOf(values.get("pageNum").toString()); PageHelper.startPage(pageNum,pageSize); List sysAssistRecords = assistRecordMapper.assistRecordOutList(values); PageInfo sysAssistRecordPageInfo = new PageInfo<>(sysAssistRecords); return BasicResult.success(sysAssistRecordPageInfo); } @Override @Transactional public BasicResult assistCheck(Map values) { //校正后库存 Integer correctionAfter = Integer.valueOf(values.get("correctionAfter").toString()); //辅材id String assistId = values.get("assistId").toString(); assistRecordMapper.assistStockUp(assistId,correctionAfter); SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); values.put("createUser",sysUserInfo.getUserId()); values.put("id",""); assistRecordMapper.assistCheckInsert(values); return BasicResult.success("校正成功"); } @Override public BasicResult assistCorrectionList(Map values) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); Integer pageSize = Integer.valueOf(values.get("pageSize").toString()); Integer pageNum = Integer.valueOf(values.get("pageNum").toString()); PageHelper.startPage(pageNum,pageSize); List sysAssistCorrections = assistRecordMapper.assistCorrectionList(values); PageInfo sysAssistCorrectionPageInfo = new PageInfo<>(sysAssistCorrections); return BasicResult.success(sysAssistCorrectionPageInfo); } @Override public void assistExport(Map values, HttpServletResponse response) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); List sysAssistRecords = assistRecordMapper.assistRecordList(values); // if (sysAssistRecords.size()<=0){ // response.setStatus(400); // return; // } List assistRecordDtos = new ArrayList<>(); for (SysAssistRecord assistRecordDto:sysAssistRecords){ AssistRecordDto ar = new AssistRecordDto(); ar.setAssistName(assistRecordDto.getAssistName()); ar.setAssistModel(assistRecordDto.getAssistModel()); ar.setSupplierName(assistRecordDto.getSupplierName()); ar.setChangeStock(assistRecordDto.getChangeStock()); ar.setSinglePrice(assistRecordDto.getSinglePrice()); ar.setAmount(assistRecordDto.getAmount()); ar.setRealName(assistRecordDto.getRealName()); ar.setCreateTime(assistRecordDto.getCreateTime()); ar.setRemark(assistRecordDto.getRemark()); assistRecordDtos.add(ar); } ExcelWriter excel = new ExcelWriter();//定义excel excel.addHeaderAlias("assistName", "物品名称"); excel.addHeaderAlias("assistModel", "规格型号"); excel.addHeaderAlias("supplierName", "供应商"); excel.addHeaderAlias("changeStock", "入库数量"); excel.addHeaderAlias("singlePrice", "单价"); excel.addHeaderAlias("amount", "金额"); excel.addHeaderAlias("realName","收料人"); excel.addHeaderAlias("createTime", "入库时间"); excel.addHeaderAlias("remark", "备注"); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=test.xls"); OutputStream out = null; try { out = response.getOutputStream(); excel.write(assistRecordDtos); excel.flush(out, true); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭writer,释放内存 excel.close(); } IoUtil.close(out); } @Override public void recordExportTemplate(HttpServletResponse response) { SysUserInfo sysUserInfo1 = UserInfoUtils.getInstance().getUserInfo(); String companyId1 = sysUserInfo1.getCompanyId(); List supplierList = recordMapper.supplierPull(companyId1); String[] gys = supplierList.toArray(new String[supplierList.size()]); XSSFWorkbook book = new XSSFWorkbook(); XSSFSheet sheet = book.createSheet(); XSSFRow row = sheet.createRow(0); row.createCell(0).setCellValue("物品名称-规格型号"); row.createCell(1).setCellValue("供应商"); row.createCell(2).setCellValue("入库数量"); row.createCell(3).setCellValue("单价"); row.createCell(4).setCellValue("金额"); row.createCell(5).setCellValue("备注"); //row.createCell(6).setCellValue("计量单位"); // row.createCell(6).setCellValue("入库人"); // // //供应商 CellRangeAddressList regions = new CellRangeAddressList(1, 500, 1, 1); DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper(); DataValidationConstraint createExplicitListConstraint = dataValidationHelper.createExplicitListConstraint(gys); DataValidation createValidation = dataValidationHelper.createValidation(createExplicitListConstraint, regions); sheet.addValidationData(createValidation); // Map values = new HashMap<>(); SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); List assistGoods = goodMapper.assistList(values); List lx = new ArrayList<>(); assistGoods.forEach(sysSteel -> { lx.add(sysSteel.getAssistName()+"-"+sysSteel.getAssistModel()); }); String[] gjlx = lx.toArray(new String[lx.size()]); // //物品名称-规格型号 CellRangeAddressList regions1 = new CellRangeAddressList(1, 500, 0, 0); DataValidationHelper dataValidationHelper1 = sheet.getDataValidationHelper(); DataValidationConstraint createExplicitListConstraint1 = dataValidationHelper1.createExplicitListConstraint(gjlx); DataValidation createValidation1 = dataValidationHelper.createValidation(createExplicitListConstraint1, regions1); sheet.addValidationData(createValidation1); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=test.xls"); OutputStream out = null; try { out = response.getOutputStream(); book.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(out); } } @Override public void assistOutExport(Map values, HttpServletResponse response) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); List sysAssistRecords = assistRecordMapper.assistRecordOutList(values); List assistRecordOutExcelDtos = new ArrayList<>(); for (SysAssistRecord assistRecord:sysAssistRecords){ AssistRecordOutExcelDto arod = new AssistRecordOutExcelDto(); arod.setAssistName(assistRecord.getAssistName()); arod.setAssistModel(assistRecord.getAssistModel()); arod.setChangeStock(assistRecord.getChangeStock()); arod.setSinglePrice(assistRecord.getSinglePrice()); arod.setAmount(assistRecord.getAmount()); arod.setRealName(assistRecord.getRealName()); arod.setDepartName(assistRecord.getDepartName()); arod.setCreateTime(assistRecord.getCreateTime()); arod.setRemark(assistRecord.getRemark()); assistRecordOutExcelDtos.add(arod); } ExcelWriter excel = new ExcelWriter();//定义excel excel.addHeaderAlias("assistName", "物品名称"); excel.addHeaderAlias("assistModel", "规格型号"); excel.addHeaderAlias("changeStock", "出库数量"); excel.addHeaderAlias("singlePrice", "单价"); excel.addHeaderAlias("amount", "金额"); excel.addHeaderAlias("realName","发料人"); excel.addHeaderAlias("departName", "领料部门"); excel.addHeaderAlias("createTime", "出库时间"); excel.addHeaderAlias("remark", "备注"); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=test.xls"); OutputStream out = null; try { out = response.getOutputStream(); excel.write(assistRecordOutExcelDtos); excel.flush(out, true); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭writer,释放内存 excel.close(); } IoUtil.close(out); } @Override @Transactional public BasicResult assistRecordDel(Map values) { String id = values.get("id").toString(); Integer stockType = Integer.valueOf(values.get("stockType").toString()); SysAssistRecord assistRecord= assistRecordMapper.assistIdSelect(id); //辅材id String assistId = assistRecord.getAssistId(); Integer stock = assistRecordMapper.assistStock(assistId); if(stockType==1){ Integer nums = (stock - assistRecord.getChangeStock()); assistRecordMapper.assistStockUp(assistId,nums); }else { Integer nums = (stock + assistRecord.getChangeStock()); assistRecordMapper.assistStockUp(assistId,nums); } assistRecordMapper.assistRecordDel(id); return BasicResult.success("删除成功"); } @Override public BasicResult assistRecordInfo(String id) { SysAssistRecord assistRecord = assistRecordMapper.assistRecordInfo(id); return BasicResult.success(assistRecord); } @Override public BasicResult variateExcel(MultipartFile file, HttpServletRequest request) { List> lists = null;//去工具类处理,返回excel中的数据 try { lists = ExcelUtil.getUserListByExcel(file.getInputStream(), file.getOriginalFilename()); } catch (Exception e) { e.printStackTrace(); } lists.remove(0); if (lists.size()>0){ for (List list :lists){ HashMap values = new HashMap<>(); String lx = list.get(0).toString(); String[] split = lx.split("-"); String s = split[0]; String s1 = split[1]; String id = goodMapper.assistNameAndType(s,s1); values.put("assistId",id); //供应商 String supplierName = list.get(1).toString(); String supplierId = recordMapper.supplierIdSelect(supplierName); values.put("supplierId",supplierId); values.put("stockType",1); //入库数量 Integer changeStock = Integer.valueOf(list.get(2).toString()); values.put("changeStock",changeStock); //单价 String dj = list.get(3).toString(); BigDecimal singlePrice = new BigDecimal(dj); values.put("singlePrice",singlePrice); //金额 String je = list.get(4).toString(); BigDecimal amount = new BigDecimal(je); values.put("amount",amount); //备注 String remark = list.get(5).toString(); values.put("remark",remark); //入库人 SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String userId = sysUserInfo.getUserId(); String companyId = sysUserInfo.getCompanyId(); values.put("createUser",userId); values.put("companyId",companyId); //现有库存 Integer stock = assistRecordMapper.assistStock(id); int num = (stock + changeStock);//添加后库存 assistRecordMapper.assistStockUp(id,num); values.put("id",""); System.out.println(values); assistRecordMapper.assistRecordInsert(values); } return BasicResult.success("导入成功"); }else { return BasicResult.faild("11111","error","空文件"); } } @Override public BasicResult assistStatistics(Map values) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); String dateType = values.get("dateType").toString(); String strTime = values.get("strTime").toString(); String endTime = values.get("endTime").toString(); List assistGoodPullDtos = assistRecordMapper.assistRecordPullS(values); if(dateType.equals("1")){ //日 List betweenDate = getBetweenDate(strTime, endTime); if(assistGoodPullDtos.size()>0){ for (AssistGoodPullDto a :assistGoodPullDtos){ values.put("assistId",a.getAssistId()); List assistStatisticsDtos = assistRecordMapper.assistStatisticsDay(values); a.setAssistStatisticsDtos(assistStatisticsDtos); a.setBetweenDate(betweenDate); } } return BasicResult.success(assistGoodPullDtos); }else if (dateType.equals("2")){//月 if(assistGoodPullDtos.size()>0){ List monthBetweenDate = getMonthBetweenDate(strTime, endTime); for (AssistGoodPullDto a :assistGoodPullDtos){ values.put("assistId",a.getAssistId()); List assistStatisticsDtos = assistRecordMapper.assistStatisticsMonth(values); a.setAssistStatisticsDtos(assistStatisticsDtos); a.setBetweenDate(monthBetweenDate); } } return BasicResult.success(assistGoodPullDtos); } return BasicResult.faild("11111","类型错误",""); } @Override public BasicResult assistStatisticsExcel(Map values,HttpServletResponse response) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); values.put("companyId",companyId); String dateType = values.get("dateType").toString(); List assistStatisticsExcels = new ArrayList<>(); if(dateType.equals("1")){ //日 List assistStatisticsDtos = assistRecordMapper.assistStatisticsDay(values); for (AssistStatisticsDto as :assistStatisticsDtos){ AssistStatisticsExcel ase = new AssistStatisticsExcel(); ase.setAssistName(as.getAssistName()); ase.setAssistModel(as.getAssistModel()); ase.setGetDate(as.getGetDate()); ase.setChangeStock(as.getChangeStock()); assistStatisticsExcels.add(ase); } }else if (dateType.equals("2")){//月 List assistStatisticsDtos = assistRecordMapper.assistStatisticsMonth(values); for (AssistStatisticsDto as :assistStatisticsDtos){ AssistStatisticsExcel ase = new AssistStatisticsExcel(); ase.setAssistName(as.getAssistName()); ase.setAssistModel(as.getAssistModel()); ase.setGetDate(as.getGetDate()); ase.setChangeStock(as.getChangeStock()); assistStatisticsExcels.add(ase); } } ExcelWriter excel = new ExcelWriter();//定义excel excel.addHeaderAlias("assistName", "物品名称"); excel.addHeaderAlias("assistModel", "规格型号"); excel.addHeaderAlias("getDate", "日期"); excel.addHeaderAlias("changeStock", "出库数量"); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=test.xls"); OutputStream out = null; try { out = response.getOutputStream(); excel.write(assistStatisticsExcels); excel.flush(out, true); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭writer,释放内存 excel.close(); } IoUtil.close(out); return BasicResult.success(); } @Override public BasicResult assistRecordPull() { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String companyId = sysUserInfo.getCompanyId(); List assistGoodPullDtos = assistRecordMapper.assistRecordPull(companyId); return BasicResult.success(assistGoodPullDtos); } public static List getBetweenDate(String startTime, String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 声明保存日期集合 List list = new ArrayList(); try { // 转化成日期类型 Date startDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); //用Calendar 进行日期比较判断 Calendar calendar = Calendar.getInstance(); while (startDate.getTime()<=endDate.getTime()){ // 把日期添加到集合 list.add(sdf.format(startDate)); // 设置日期 calendar.setTime(startDate); //把日期增加一天 calendar.add(Calendar.DATE, 1); // 获取增加后的日期 startDate=calendar.getTime(); } } catch (ParseException e) { e.printStackTrace(); } return list; } /** * 获取两个日期之间的所有月份 (年月) * * @param startTime * @param endTime * @return:list */ public static List getMonthBetweenDate(String startTime, String endTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); // 声明保存日期集合 List list = new ArrayList<>(); try { // 转化成日期类型 Date startDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); //用Calendar 进行日期比较判断 Calendar calendar = Calendar.getInstance(); while (startDate.getTime() <= endDate.getTime()) { // 把日期添加到集合 list.add(sdf.format(startDate)); // 设置日期 calendar.setTime(startDate); //把月数增加 1 calendar.add(Calendar.MONTH, 1); // 获取增加后的日期 startDate = calendar.getTime(); } } catch (Exception e) { e.printStackTrace(); } return list; } }