package cn.stylefeng.guns.modular.om.productionOrdeInfo.controller; import cn.afterturn.easypoi.entity.vo.MapExcelConstants; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.view.PoiBaseView; import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo; import cn.stylefeng.guns.modular.om.productionOrdeInfo.entity.ProductionOrdeInfo; import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.params.ProductionOrdeInfoParam; import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.result.ProductionOrdeInfoResult; import cn.stylefeng.guns.modular.om.productionOrdeInfo.service.ProductionOrdeInfoService; import cn.stylefeng.guns.sys.modular.system.entity.Dict; import cn.stylefeng.guns.sys.modular.system.service.DictService; import cn.stylefeng.roses.core.base.controller.BaseController; import cn.stylefeng.roses.core.util.ToolUtil; import cn.stylefeng.roses.kernel.model.response.ResponseData; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.api.R; import io.swagger.models.auth.In; import lombok.SneakyThrows; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** * 生产工单控制器 * * @author cl * @Date 2022-10-25 14:04:47 */ @Controller @RequestMapping("/productionOrdeInfo") public class ProductionOrdeInfoController extends BaseController { private String PREFIX = "modular/om/productionOrdeInfo"; @Autowired private ProductionOrdeInfoService productionOrdeInfoService; @Autowired private DictService dictService; /** * 跳转到主页面 * * @author cl * @Date 2022-10-25 */ @RequestMapping("") public String index() { return PREFIX + "/productionOrdeInfo.html"; } /** * 新增页面 * * @author cl * @Date 2022-10-25 */ @RequestMapping("/add") public String add() { return PREFIX + "/productionOrdeInfo_add.html"; } /** * 编辑页面 * * @author cl * @Date 2022-10-25 */ @RequestMapping("/edit") public String edit() { return PREFIX + "/productionOrdeInfo_edit.html"; } @RequestMapping("/materialList") public String materialList() { return PREFIX + "/materialList.html"; } @RequestMapping("/materialLists") public String materialLists() { return PREFIX + "/materialLists.html"; } @RequestMapping("/customInfo") public String customInfo() { return PREFIX + "/customInfo.html"; } /** * 新增接口 * * @author cl * @Date 2022-10-25 */ @RequestMapping("/addItem") @ResponseBody public ResponseData addItem(ProductionOrdeInfoParam productionOrdeInfoParam) { this.productionOrdeInfoService.add(productionOrdeInfoParam); return ResponseData.success(); } /** * 编辑接口 * * @author cl * @Date 2022-10-25 */ @RequestMapping("/editItem") @ResponseBody public ResponseData editItem(ProductionOrdeInfoParam productionOrdeInfoParam) { if(productionOrdeInfoParam.getFlag()!=null){ productionOrdeInfoParam.setActualStartTime(new Date()); } this.productionOrdeInfoService.update(productionOrdeInfoParam); this.productionOrdeInfoService.saveOrderBatchInfo(productionOrdeInfoParam); return ResponseData.success(); } /** * 编辑接口 * * @author cl * @Date 2022-10-25 */ @RequestMapping("/editItemAll") @ResponseBody public ResponseData editItemAll(@RequestBody List list) { for(int i=0;i().eq("order_status", productionOrdeInfoParam.getOrderStatus())); return ResponseData.success(orderStatus); } /** * 大屏列表接口 * @param productionOrdeInfoParam * @return */ @ResponseBody @CrossOrigin @RequestMapping("/largeScreenList") public List largeScreenList(ProductionOrdeInfoParam productionOrdeInfoParam) { ArrayList arrayList = new ArrayList(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // productionOrdeInfoParam.setOrderStatus("3"); LayuiPageInfo pageBySpec = this.productionOrdeInfoService.findPageBySpec(productionOrdeInfoParam); List result = pageBySpec.getData(); for (ProductionOrdeInfoResult productionOrdeInfoResult : result) { ArrayList resultList = new ArrayList(); resultList.add(productionOrdeInfoResult.getWorkOrderNo()); resultList.add(productionOrdeInfoResult.getMaterialCode()); resultList.add(productionOrdeInfoResult.getProductionLine()); resultList.add(productionOrdeInfoResult.getPlanQty()); resultList.add(productionOrdeInfoResult.getActualQty()); resultList.add(format.format(productionOrdeInfoResult.getCreateTime())); arrayList.add(resultList); } return arrayList; } @ResponseBody @CrossOrigin @RequestMapping("/largeScreenList1") public List largeScreenList1(ProductionOrdeInfoParam productionOrdeInfoParam) { ArrayList arrayList = new ArrayList(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); List list = this.productionOrdeInfoService.getListMonth(); for (ProductionOrdeInfoResult productionOrdeInfoResult : list) { ArrayList resultList = new ArrayList(); resultList.add(productionOrdeInfoResult.getWorkOrderNo()); resultList.add(productionOrdeInfoResult.getMaterialCode()); resultList.add(productionOrdeInfoResult.getPlanQty()); resultList.add(productionOrdeInfoResult.getActualQty()); resultList.add(format.format(productionOrdeInfoResult.getCreateTime())); arrayList.add(resultList); } return arrayList; } /** * 大屏产线接口 * @return */ @ResponseBody @CrossOrigin @RequestMapping("/lineFinishQty") public ResponseData lineFinishQty() { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); List resultList = new ArrayList(); List list = this.productionOrdeInfoService.lineFinishQty(); for (ProductionOrdeInfoResult productionOrdeInfo : list) { Map map = new HashMap(); map.put("name",format.format(productionOrdeInfo.getActualStartTime())); map.put("value",productionOrdeInfo.getActualQty()); resultList.add(map); } return ResponseData.success(resultList); } /** * 大屏车间工单信息接口 * @return */ @ResponseBody @CrossOrigin @RequestMapping("/workshopOrderDetail") public ResponseData workshopOrderDetail(ProductionOrdeInfoParam productionOrdeInfoParam) { // NumberFormat numberFormat = NumberFormat.getInstance(); // numberFormat.setMaximumFractionDigits(2); // ProductionOrdeInfo one = productionOrdeInfoService.getOne(new QueryWrapper() // .select("SUM\n" + // "\t( plan_qty ) AS planQty,\n" + // "\tSUM ( actual_qty ) AS actualQty,\n" + // "\tSUM ( scrap_qty ) AS scrapQty ") // ); // //计划 // Integer plqnQty = one.getPlanQty(); // //完成 // Integer actualQty = one.getActualQty(); // //报废 // Integer scrapQty = one.getScrapQty(); // //合格数量 // Integer paseQty = actualQty-scrapQty; // // Map map = new HashMap(); // map.put("produceQty",plqnQty); // map.put("finishQty",actualQty); // map.put("paseQty",paseQty); // map.put("noPaseQty",scrapQty); // map.put("CompletionRate",numberFormat.format((float) actualQty / (float) plqnQty * 100)); // map.put("PassRate",numberFormat.format((float) paseQty / (float) actualQty * 100)); // map.put("surplusQty",plqnQty-actualQty); // return ResponseData.success(map); ProductionOrdeInfoParam param = new ProductionOrdeInfoParam(); param.setOrderStatus("3"); ProductionOrdeInfoResult one = new ProductionOrdeInfoResult(); NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setMaximumFractionDigits(2); List listMonth = productionOrdeInfoService.getListMonth(); List listBySpec = productionOrdeInfoService.findListBySpec(param); if(listBySpec.size() == 0){ ToolUtil.copyProperties(listMonth.get(0), one); }else { ToolUtil.copyProperties(listBySpec.get(0), one); } if(one.getActualQty() == null){ one.setActualQty(0); } if(one.getScrapQty() == null){ one.setScrapQty(0); } //计划 Integer plqnQty = one.getPlanQty(); //完成 Integer actualQty = one.getActualQty(); //报废 Integer scrapQty = one.getScrapQty(); //合格数量 Integer paseQty = actualQty-scrapQty; Map map = new HashMap(); map.put("produceQty",one.getPlanQty()); map.put("finishQty",one.getActualQty()); map.put("paseQty",paseQty); map.put("noPaseQty",scrapQty); map.put("CompletionRate",numberFormat.format((float) actualQty / (float) plqnQty * 100)); String format = numberFormat.format((float) paseQty / (float) actualQty * 100); if(format.equals("�")){ map.put("PassRate","0"); }else { map.put("PassRate",format); } map.put("surplusQty",plqnQty-actualQty); return ResponseData.success(map); } /** * 大屏车间工单信息接口 * @return */ @ResponseBody @CrossOrigin @RequestMapping("/reportLineList") public ResponseData reportLineList(ProductionOrdeInfoParam productionOrdeInfoParam) { Map map = new HashMap(); return ResponseData.success(map); } @ResponseBody @CrossOrigin @RequestMapping("/lineChart") public ResponseData lineChart(ProductionOrdeInfoParam productionOrdeInfoParam) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); List list = new ArrayList(); List planQtyList = new ArrayList(); List actualQtyList = new ArrayList(); Map map = new HashMap(); List ColumnarDateList = productionOrdeInfoService.getColumnarDate(); for (ProductionOrdeInfoResult result : ColumnarDateList) { String s = format.format(result.getActualStartTime()); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.select("SUM(plan_qty) as planQty,SUM(actual_qty) as actualQty"); queryWrapper.apply("CONVERT ( VARCHAR ( 100 ), actual_start_time, 23 ) = {0}",s); ProductionOrdeInfo one = productionOrdeInfoService.getOne(queryWrapper); if(one!=null){ if(one.getPlanQty()!=null){ planQtyList.add(one.getPlanQty()); }else { planQtyList.add(0); } if(one.getActualQty()!=null){ actualQtyList.add(one.getActualQty()); }else { actualQtyList.add(0); } }else { planQtyList.add(0); actualQtyList.add(0); } list.add(s); } map.put("category",list); map.put("lineData",planQtyList); map.put("barData",actualQtyList); return ResponseData.success(map); } /** * 下载excel导入模板 * * @author liwenya * @Date 2021年7月9日 17点01分 */ @RequestMapping("/downloadExcelTemplate") public void downloadExcelTemplate(ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) { //初始化表头 List entity = new ArrayList<>(); entity.add(new ExcelExportEntity("生产工单号", "workOrderNo")); entity.add(new ExcelExportEntity("物料编号", "materialCode")); entity.add(new ExcelExportEntity("物料描述", "materialName")); entity.add(new ExcelExportEntity("软件版本编码", "softwareVersionCode")); entity.add(new ExcelExportEntity("生产基地编码", "productCompanyCode")); entity.add(new ExcelExportEntity("计划数量", "planQty")); entity.add(new ExcelExportEntity("计划开始时间", "planStartTime")); entity.add(new ExcelExportEntity("计划结束时间", "planEndTime")); ExportParams params = new ExportParams("生产工单模板", "生产工单", ExcelType.XSSF); modelMap.put(MapExcelConstants.MAP_LIST, new ArrayList<>()); modelMap.put(MapExcelConstants.ENTITY_LIST, entity); modelMap.put(MapExcelConstants.PARAMS, params); modelMap.put(MapExcelConstants.FILE_NAME, "生产工单"); PoiBaseView.render(modelMap, request, response, MapExcelConstants.EASYPOI_MAP_EXCEL_VIEW); } /** * 导入Excel * * @author cl * @Date 2022-10-25 */ @SneakyThrows @RequestMapping("/uploadExcel") @ResponseBody public ResponseData exportIn(@RequestPart("file") MultipartFile file, HttpServletRequest request){ List list = new ArrayList<>(); //定义工作簿 XSSFWorkbook sheets = null; try{ sheets = new XSSFWorkbook(file.getInputStream()); //获取sheet XSSFSheet sheet = sheets.getSheet(sheets.getSheetName(0)); int rows = sheet.getPhysicalNumberOfRows(); for(int i = 2; i < rows; i++){ //获取列数 XSSFRow row = sheet.getRow(i); ProductionOrdeInfo orderInfo = new ProductionOrdeInfo(); orderInfo.setWorkOrderNo(getCellValue(row.getCell(0)));//工单编码 orderInfo.setMaterialCode(getCellValue(row.getCell(1)));//物料编号 orderInfo.setMaterialName(getCellValue(row.getCell(2)));//物料描述 orderInfo.setSoftwareVersionCode(getCellValue(row.getCell(3)));//软件版本编码 orderInfo.setProductCompanyCode(getCellValue(row.getCell(4)));//生产基地编码 Cell planQty = row.getCell(5);//计划数量 if(!Objects.equals(planQty, null) && !Objects.equals(planQty.toString(),"")){ double d = planQty.getNumericCellValue(); orderInfo.setPlanQty((int) d); } Cell planStartTime = row.getCell(6);//计划开始时间 if(HSSFDateUtil.isCellDateFormatted(planStartTime)){ Date d = planStartTime.getDateCellValue(); orderInfo.setPlanStartTime(d); } Cell planEndTime = row.getCell(7);//计划结束时间 if(HSSFDateUtil.isCellDateFormatted(planEndTime)){ Date d = planEndTime.getDateCellValue(); orderInfo.setPlanEndTime(d); } list.add(orderInfo); } for(ProductionOrdeInfo obj : list){ productionOrdeInfoService.save(obj); } return ResponseData.success("上传成功"); } catch (IOException e) { e.printStackTrace(); return ResponseData.error("上传失败"); } } /** * 获得Hsscell内容 * * @param cell * @return */ public String getCellValue(XSSFCell cell) { String value = ""; if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_FORMULA: break; case HSSFCell.CELL_TYPE_NUMERIC: DecimalFormat df = new DecimalFormat("0"); value = df.format(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue().trim(); break; default: value = ""; break; } } return value.trim(); } }