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.cm.passingStationCollection.entity.PassingStationCollection; import cn.stylefeng.guns.modular.cm.passingStationCollection.model.result.PassingStationCollectionResult; import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService; 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; @Autowired private PassingStationCollectionService passingStationCollectionService; /** * 跳转到主页面 * * @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 = passingStationCollectionService.list(new QueryWrapper() .orderByDesc("create_time") ); for (int i = 0; i < 20; i++) { ArrayList resultList = new ArrayList(); // resultList.add(list.get(i).getWorkOrderNo()); // resultList.add(list.get(i).getSfcCode()); resultList.add(list.get(i).getLocationCode()); // resultList.add(list.get(i).getInboundTime()); // resultList.add(list.get(i).getOutboundTime()); resultList.add(list.get(i).getBeatTime()); // resultList.add((list.get(i).getOutRsSign().equals("1"))?"OK":"NG"); 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); } @ResponseBody @CrossOrigin @RequestMapping("/bottomLeftChart") public ResponseData bottomLeftChart() { Map map = new HashMap(); List category = new ArrayList(); List lineData = new ArrayList(); List barData = new ArrayList(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); List list = this.productionOrdeInfoService.bottomLeftChart(); for (ProductionOrdeInfoResult result : list) { category.add(format.format(result.getCreateTime())); lineData.add(result.getPlanQty()); barData.add(result.getActualQty()); } map.put("category",category); map.put("lineData",lineData); map.put("barData",barData); return ResponseData.success(map); } @ResponseBody @CrossOrigin @RequestMapping("/centerRight2") public ResponseData centerRight2() { List listResult = new ArrayList(); SimpleDateFormat format = new SimpleDateFormat("yyyy"); String year = format.format(new Date())+"-"; List list = this.productionOrdeInfoService.centerRight2(); for (ProductionOrdeInfoResult result : list) { Map map = new HashMap(); map.put("name",year+result.getMonth()); map.put("value",Integer.valueOf(result.getNum())); listResult.add(map); } return ResponseData.success(listResult); } @ResponseBody @CrossOrigin @RequestMapping("/center1") public ResponseData center1() { Map map = new HashMap(); List list = new ArrayList(); ProductionOrdeInfoResult result = productionOrdeInfoService.getLastOrder(); Integer planQty = result.getPlanQty(); Integer actualQty = result.getActualQty(); double percent = (double) actualQty / planQty * 100; // 将百分比表示为小数 int roundedPercent = (int) Math.round(percent); // 四舍五入到整数 list.add(roundedPercent); list.add(roundedPercent); map.put("planQty",planQty); map.put("actualQty",actualQty); map.put("workOrderNo",result.getWorkOrderNo()); map.put("waterLevel",list); return ResponseData.success(map); } public static void main(String[] args) { int dividend = 8; // 被除数 int divisor = 9; // 除数 double percent = (double) dividend / divisor * 100; // 将百分比表示为小数 int roundedPercent = (int) Math.round(percent); // 四舍五入到整数 System.out.println("百分比:" + roundedPercent + "%"); } /** * 大屏车间工单信息接口 * @return */ @ResponseBody @CrossOrigin @RequestMapping("/workshopOrderDetail") public ResponseData workshopOrderDetail(ProductionOrdeInfoParam productionOrdeInfoParam) { Map map = new HashMap(); NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setMaximumFractionDigits(2); List list = productionOrdeInfoService.list(new QueryWrapper().eq("order_status","3")); if(list.size()>0) { ProductionOrdeInfo ordeInfo = list.get(0); //计划 Integer plqnQty = ordeInfo.getPlanQty(); //完成 Integer actualQty = ordeInfo.getActualQty(); //报废 Integer scrapQty = ordeInfo.getScrapQty(); //合格数量 Integer paseQty = actualQty - scrapQty; 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)); String format = numberFormat.format((float) paseQty / (float) actualQty * 100); if (format.equals("�")) { map.put("PassRate", "0"); } else { map.put("PassRate", format); } map.put("surplusQty", ordeInfo.getWorkOrderNo()); } 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); } @ResponseBody @CrossOrigin @RequestMapping("/findOrdrList") public ResponseData findOrdrList(ProductionOrdeInfoParam productionOrdeInfoParam) { ProductionOrdeInfoParam param = new ProductionOrdeInfoParam(); param.setProductionLine("");//产线 param.setOrderStatus("3");//工单状态 List list = productionOrdeInfoService.findListBySpec(param); return ResponseData.success(list); } /** * 下载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(); } }