package com.jcdm.main.bs.orderScheduling.controller;
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
import com.jcdm.common.annotation.Log;
|
import com.jcdm.common.core.controller.BaseController;
|
import com.jcdm.common.core.domain.AjaxResult;
|
import com.jcdm.common.core.domain.R;
|
import com.jcdm.common.core.domain.entity.SysDictData;
|
import com.jcdm.common.core.page.TableDataInfo;
|
import com.jcdm.common.enums.BusinessType;
|
import com.jcdm.common.utils.SecurityUtils;
|
import com.jcdm.common.utils.StringUtils;
|
import com.jcdm.common.utils.poi.ExcelUtil;
|
import com.jcdm.main.bs.orderScheduling.common.Constants;
|
import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
|
import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService;
|
import com.jcdm.main.bs.orderScheduling.vo.FollowReportVO;
|
import com.jcdm.main.bs.orderScheduling.vo.LineChartVO;
|
import com.jcdm.main.bs.orderScheduling.vo.SumDataVO;
|
import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
|
import com.jcdm.main.da.paramCollection.mapper.DaParamCollectionMapper;
|
import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
|
import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
|
import com.jcdm.main.da.tileMatchCollection.domain.DaTileMatchCollection;
|
import com.jcdm.main.da.tileMatchCollection.service.IDaTileMatchCollectionService;
|
import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo;
|
import com.jcdm.main.om.productionOrde.service.impl.OmProductionOrdeInfoServiceImpl;
|
import com.jcdm.main.plcserver.conf.OPCElement;
|
import com.jcdm.main.plcserver.sub.OPCUaSubscription;
|
import com.jcdm.system.service.ISysDictDataService;
|
import com.kangaroohy.milo.model.ReadWriteEntity;
|
import com.kangaroohy.milo.service.MiloService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 订单排产Controller
|
*
|
* @author jiang
|
* @date 2024-01-13
|
*/
|
@RestController
|
@RequestMapping("/bs/orderScheduling")
|
public class BsOrderSchedulingController extends BaseController
|
{
|
@Autowired
|
private IBsOrderSchedulingService bsOrderSchedulingService;
|
|
|
@Resource
|
private ISysDictDataService iSysDictDataService;
|
|
@Resource
|
private OmProductionOrdeInfoServiceImpl productionOrdeInfoService;
|
@Resource
|
private DaParamCollectionMapper daParamCollectionService;
|
@Resource
|
private IDaTileMatchCollectionService daTileMatchCollectionService;
|
|
@Autowired
|
MiloService miloService;
|
|
@Value("${websocketUrl}")
|
private String websocketUrl;
|
|
@GetMapping("/forceUpload")
|
public void forceUpload() throws Exception {
|
ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP121_ZZ_CODE_CHECK, 1);
|
miloService.writeToOpcByte(entity);
|
}
|
|
@GetMapping("/websocketUrl")
|
public String websocketName() {
|
return websocketUrl;
|
}
|
|
|
/**
|
* 查询订单排产列表
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:list')")
|
@GetMapping("/list")
|
public TableDataInfo list(BsOrderScheduling bsOrderScheduling)
|
{
|
startPage();
|
List<BsOrderScheduling> list = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
|
return getDataTable(list);
|
}
|
|
/**
|
* 查询追溯列表
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:list')")
|
@GetMapping("/getFollowReportList")
|
public R getFollowReportList(BsOrderScheduling bsOrderScheduling)
|
{
|
FollowReportVO followReportList = bsOrderSchedulingService.getFollowReportList(bsOrderScheduling);
|
return R.ok(followReportList);
|
}
|
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:export')")
|
@Log(title = "追溯报表导出", businessType = BusinessType.EXPORT)
|
@PostMapping("/exportFollow")
|
public void exportFollow(HttpServletResponse response, BsOrderScheduling bsOrderScheduling)
|
{
|
FollowReportVO followReportList = bsOrderSchedulingService.getFollowReportList(bsOrderScheduling);
|
List<SysDictData> allDict = iSysDictDataService.selectDictDataList(null);
|
if (CollUtil.isNotEmpty(followReportList.getMainList())){
|
List<SysDictData> dict1 = allDict.stream().filter(x -> "material_type".equals(x.getDictType())).collect(Collectors.toList());
|
List<SysDictData> dict2 = allDict.stream().filter(x -> "order_scheduling_produce_status".equals(x.getDictType())).collect(Collectors.toList());
|
for (BsOrderScheduling orderScheduling : followReportList.getMainList()) {
|
if (CollUtil.isNotEmpty(dict1)){
|
List<SysDictData> collect = dict1.stream().filter(x -> x.getDictValue().equals(orderScheduling.getProductType())).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(collect)){
|
SysDictData sysDictData1 = collect.get(0);
|
orderScheduling.setProductTypeString(sysDictData1.getDictLabel());
|
}
|
}
|
if (CollUtil.isNotEmpty(dict2)){
|
List<SysDictData> collect = dict2.stream().filter(x -> x.getDictValue().equals(orderScheduling.getProductionStatus())).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(collect)){
|
SysDictData sysDictData1 = collect.get(0);
|
orderScheduling.setProductionStatusString(sysDictData1.getDictLabel());
|
}
|
}
|
}
|
}
|
String fileName = "追溯报表";
|
try {
|
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
|
WriteSheet mainSheet = EasyExcel.writerSheet(0, "订单排产")
|
.head(BsOrderScheduling.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.build();
|
WriteSheet sheet1 = EasyExcel.writerSheet(1, "拧紧数据")
|
.head(DaParamCollection.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.build();
|
WriteSheet sheet2 = EasyExcel.writerSheet(2, "相机检测")
|
.head(DaParamCollection.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.build();
|
WriteSheet sheet3 = EasyExcel.writerSheet(3, "外漏检测")
|
.head(DaParamCollection.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.build();
|
WriteSheet sheet4 = EasyExcel.writerSheet(4, "机油加注")
|
.head(DaParamCollection.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.build();
|
WriteSheet sheet5 = EasyExcel.writerSheet(5, "工位结果")
|
.head(DaPassingStationCollection.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
.build();
|
excelWriter.write(followReportList.getMainList(),mainSheet);
|
excelWriter.write(followReportList.getList1(),sheet1);
|
excelWriter.write(followReportList.getList2(),sheet2);
|
excelWriter.write(followReportList.getList3(),sheet3);
|
excelWriter.write(followReportList.getList4(),sheet4);
|
excelWriter.write(followReportList.getList5(),sheet5);
|
response.setContentType("application/vnd.ms-excel;charset=utf-8");
|
response.setCharacterEncoding("UTF-8");
|
response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
|
excelWriter.finish();
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
/**
|
* 查询下线数量
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:list')")
|
@GetMapping("/getOffLineNum")
|
public TableDataInfo getOffLineNum(BsOrderScheduling bsOrderScheduling)
|
{
|
|
List<LineChartVO> vo = bsOrderSchedulingService.getOffLineNum();
|
return getDataTable(vo);
|
}
|
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:list')")
|
@GetMapping("/list2")
|
public TableDataInfo list2(BsOrderScheduling bsOrderScheduling)
|
{
|
// startPage();
|
List<BsOrderScheduling> list = new ArrayList<>();
|
if (StringUtils.isNotEmpty(bsOrderScheduling.getOrderNo())){
|
list = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
|
}
|
return getDataTable(list);
|
}
|
|
@GetMapping("/list3")
|
public TableDataInfo list3(BsOrderScheduling bsOrderScheduling)
|
{
|
startPage();
|
List<BsOrderScheduling> list = new ArrayList<>();
|
if (StringUtils.isNotEmpty(bsOrderScheduling.getOrderNo())){
|
list = bsOrderSchedulingService.selectBsOrderSchedulingPage(bsOrderScheduling);
|
}
|
List<BsOrderScheduling> collect = list.stream().filter(x -> Constants.UN_QUALIFIED.equals(x.getQualityStatus())).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(collect)){
|
String.valueOf(collect.size());
|
}
|
return getDataTable(list);
|
}
|
|
/**
|
* 导出订单排产列表
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:export')")
|
@Log(title = "订单排产", businessType = BusinessType.EXPORT)
|
@PostMapping("/export")
|
public void export(HttpServletResponse response, BsOrderScheduling bsOrderScheduling)
|
{
|
List<BsOrderScheduling> list = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
|
ExcelUtil<BsOrderScheduling> util = new ExcelUtil<BsOrderScheduling>(BsOrderScheduling.class);
|
util.exportExcel(response, list, "订单排产数据");
|
}
|
|
/**
|
* 获取订单排产详细信息
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:query')")
|
@GetMapping(value = "/{id}")
|
public AjaxResult getInfo(@PathVariable("id") Long id)
|
{
|
return success(bsOrderSchedulingService.selectBsOrderSchedulingById(id));
|
}
|
|
/**
|
* 新增订单排产
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:add')")
|
@Log(title = "订单排产", businessType = BusinessType.INSERT)
|
@PostMapping
|
public AjaxResult add(@RequestBody BsOrderScheduling bsOrderScheduling)
|
{
|
return toAjax(bsOrderSchedulingService.insertBsOrderScheduling(bsOrderScheduling));
|
}
|
|
/**
|
* 修改订单排产
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:edit')")
|
@Log(title = "订单排产", businessType = BusinessType.UPDATE)
|
@PutMapping
|
public AjaxResult edit(@RequestBody BsOrderScheduling bsOrderScheduling)
|
{
|
return toAjax(bsOrderSchedulingService.updateBsOrderScheduling(bsOrderScheduling));
|
}
|
|
/**
|
* 删除订单排产
|
*/
|
@PreAuthorize("@ss.hasPermi('bs:orderScheduling:remove')")
|
@Log(title = "订单排产", businessType = BusinessType.DELETE)
|
@DeleteMapping("/{ids}")
|
public AjaxResult remove(@PathVariable Long[] ids)
|
{
|
return toAjax(bsOrderSchedulingService.deleteBsOrderSchedulingByIds(ids));
|
}
|
@GetMapping("/getSumData")
|
public R getSumData(BsOrderScheduling bsOrderScheduling){
|
List<BsOrderScheduling> list = new ArrayList<>();
|
int onlineNum = 0;
|
int finishNum = 0;
|
if (StringUtils.isNotEmpty(bsOrderScheduling.getOrderNo())){
|
|
list = bsOrderSchedulingService.selectBsOrderSchedulingPage(bsOrderScheduling);
|
List<BsOrderScheduling> onlineNumList = list.stream().filter(x -> Constants.ORDER_STATUS_ING.equals(x.getProductionStatus())).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(onlineNumList)){
|
onlineNum = onlineNumList.size();
|
}
|
List<BsOrderScheduling> finishNumList = list.stream().filter(x -> Constants.FINISH_PRODUCTION.equals(x.getProductionStatus())).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(finishNumList)){
|
finishNum = finishNumList.size();
|
}
|
}
|
List<BsOrderScheduling> collect = list.stream().filter(x -> Constants.UN_QUALIFIED.equals(x.getQualityStatus())).collect(Collectors.toList());
|
String unqualified = "0";
|
if (CollUtil.isNotEmpty(collect)){
|
unqualified = String.valueOf(collect.size());
|
}
|
SumDataVO vo = new SumDataVO();
|
vo.setFinishNum(finishNum);
|
vo.setOnlineNum(onlineNum);
|
vo.setUnqualified(unqualified);
|
return R.ok(vo);
|
}
|
|
/**
|
* 校验发动机号是否和机型匹配、是否重复扫描、是否超出计划数量
|
* @param engineNo 箱体码
|
* @param model 机型
|
* @return boolean
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@GetMapping("/engineNoIsInModel")
|
public R engineNoIsInModel(String engineNo,String model,String orderNo) throws Exception {
|
|
if (StringUtils.isEmpty(engineNo)){
|
return R.ok(500,"箱体码为空或已存在,请重试");
|
}
|
|
BsOrderScheduling bsOrderScheduling = new BsOrderScheduling();
|
bsOrderScheduling.setOrderNo(orderNo);
|
//bsOrderScheduling.setProductionStatus("1");
|
List<BsOrderScheduling> allList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
|
List<BsOrderScheduling> dlist = allList.stream().filter(x->x.getProductionStatus().equals(Constants.WAIT_PRODUCTION)).collect(Collectors.toList());
|
List<BsOrderScheduling> collect = allList.stream().filter(x -> x.getProductionStatus().equals(Constants.ORDER_STATUS_ING)
|
||x.getProductionStatus().equals(Constants.FINISH_PRODUCTION)).collect(Collectors.toList());
|
|
BsOrderScheduling OrderScheduling=dlist.get(0);
|
|
DaParamCollection daParamCollection = new DaParamCollection();
|
daParamCollection.setParamValue(engineNo);
|
daParamCollection.setSfcCode("OP010");
|
List<DaParamCollection> list = daParamCollectionService.selectDaParamCollectionList(daParamCollection);
|
if (CollUtil.isNotEmpty(list)){
|
return R.ok(500,"已存在此箱体码,请勿重复扫描");
|
}
|
|
OmProductionOrdeInfo info = new OmProductionOrdeInfo();
|
info.setWorkOrderNo(orderNo);
|
List<OmProductionOrdeInfo> omProductionOrdeInfos = productionOrdeInfoService.selectOmProductionOrdeInfoList(info);
|
if (CollUtil.isNotEmpty(omProductionOrdeInfos)){
|
OmProductionOrdeInfo omProductionOrdeInfo = omProductionOrdeInfos.get(0);
|
Long planQty = omProductionOrdeInfo.getPlanQty();
|
if (planQty<collect.size()){
|
return R.ok(500,"超出计划数量,请检查后重试");
|
}
|
}
|
//插入数据
|
DaParamCollection saveData = new DaParamCollection();
|
saveData.setSfcCode(OrderScheduling.getEngineNo());
|
saveData.setParamValue(engineNo);
|
saveData.setLocationCode("OP010");
|
saveData.setParamCode("XTM");
|
saveData.setParamName("箱体");
|
daParamCollectionService.insertDaParamCollection(saveData);
|
|
DaTileMatchCollection MatchCollection = new DaTileMatchCollection();
|
MatchCollection.setSfcCode(OrderScheduling.getEngineNo());
|
MatchCollection.setParamValue(engineNo);
|
MatchCollection.setLocationCode("OP010");
|
MatchCollection.setParamCode("XTM");
|
MatchCollection.setParamName("箱体");
|
daTileMatchCollectionService.insertDaTileMatchCollection(MatchCollection);
|
|
//更新上线数量
|
int onlineNum = 0;
|
List<BsOrderScheduling> onlineNumList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling)
|
.stream().filter(x -> Constants.ORDER_STATUS_ING.equals(x.getProductionStatus())||x.getProductionStatus().equals(Constants.FINISH_PRODUCTION)).collect(Collectors.toList());
|
if (CollUtil.isNotEmpty(onlineNumList)){
|
onlineNum = onlineNumList.size();
|
}
|
OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
|
omProductionOrdeInfo.setWorkOrderNo(orderNo);
|
List<OmProductionOrdeInfo> omList = productionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo);
|
if (CollUtil.isNotEmpty(omList)){
|
OmProductionOrdeInfo omInfo = omList.get(0);
|
String s = String.valueOf(onlineNum);
|
long l = Long.parseLong(s);
|
omInfo.setActualOnlineQty(l);
|
productionOrdeInfoService.updateOmProductionOrdeInfo(omInfo);
|
}
|
|
//OPC操作
|
ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.HOP010.Code", OrderScheduling.getEngineNo());
|
OPCUaSubscription.miloService.writeToOpcUa(entity);//写SN
|
ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.HOP010.SNDoor", 1);
|
OPCUaSubscription.miloService.writeToOpcByte(entity2);//写完成
|
|
OrderScheduling.setProductionStatus("2");
|
bsOrderSchedulingService.updateBsOrderScheduling(OrderScheduling);
|
return R.ok();
|
}
|
}
|