package com.zy.api.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.R; import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.api.controller.params.ReceviceTaskParams; import com.zy.api.service.HmesApiService; import com.zy.api.service.WcsApiService; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.OpenOrderPakoutParam; import com.zy.asrs.enums.LocStsType; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.LocDetlServiceImpl; import com.zy.asrs.service.impl.OrderDetlPakoutServiceImpl; import com.zy.asrs.service.impl.OrderPakoutServiceImpl; import com.zy.common.model.DetlDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; @Service public class HmesApiServiceImpl implements HmesApiService { @Autowired private BasDeviceService basDeviceService; @Autowired private LocAroundBindService locAroundBindService; @Autowired private LocMastService locMastService; @Autowired private WcsApiService wcsApiService; @Autowired private OrderService orderService; @Autowired private DocTypeService docTypeService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private MatService matService; @Autowired private OrderDetlService orderDetlService; @Autowired private OrderPakoutServiceImpl orderPakoutService; @Autowired private OrderDetlPakoutServiceImpl orderDetlPakoutService; @Autowired private LocDetlServiceImpl locDetlService; /** * 接收MES穿线任务 * @author Ryan * @date 2026/1/10 10:54 * @param param * @return com.core.common.R */ @Override @Transactional(rollbackFor = Exception.class) public R pubWorkTask(OpenOrderPakoutParam param) { OrderPakout order = orderPakoutService.selectByNo(param.getOrderNo()); // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据 if (!Cools.isEmpty(order)) { if (order.getSettle() > 1L) { throw new CoolException(param.getOrderNo() + "正在出库,无法修改单据"); } orderPakoutService.remove(order.getId()); } DocType docType = docTypeService.selectOrAdd(param.getBillType(), Boolean.FALSE); Date now = new Date(); // 单据主档 order = new OrderPakout( String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] param.getOrderNo(), // 订单编号 DateUtils.convert(now), // 单据日期 docType.getDocId(), // 单据类型 null, // 项目编号 null, // null, // 调拨项目编号 null, // 初始票据号 null, // 票据号 null, // 客户编号 null, // 客户 null, // 联系方式 null, // 操作人员 null, // 合计金额 null, // 优惠率 null, // 优惠金额 null, // 销售或采购费用合计 null, // 实付金额 null, // 付款类型 null, // 业务员 null, // 结算天数 null, // 邮费支付类型 null, // 邮费 null, // 付款时间 null, // 发货时间 null, // 物流名称 null, // 物流单号 1L, // 订单状态 1, // 状态 9995L, // 添加人员 now, // 添加时间 9995L, // 修改人员 now, // 修改时间 null // 备注 ); if (!orderPakoutService.insert(order)) { throw new CoolException("生成单据主档失败,请联系管理员"); } // 单据明细档 List list = new ArrayList<>(); List orderDetails = param.getMatList(); for (DetlDto detail : orderDetails) { DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getDevNo(),detail.getStandby2(),detail.getStandby3(),detail.getLineNumber(), detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme()); if (DetlDto.hasLineNumber(list, dto)) { DetlDto detlDto = DetlDto.findLineNumber(list, dto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getDevNo(),dto.getStandby2(),dto.getStandby3(),dto.getLineNumber(), dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3()); assert detlDto != null; detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme()); } else { list.add(dto); } } //下发的订单明细,查看库存是否有足够的库存,排除机台的库位 for (DetlDto detail : list) { List matnr = locDetlService.selectList(new EntityWrapper().eq("matnr", detail.getMatnr())); Double count=0.0; for (LocDetl detl : matnr) { LocMast locMast = locMastService.selectOne(new EntityWrapper().eq("loc_no", detl.getLocNo()).eq("loc_sts","F")); if (locMast != null) { LocAroundBind bLocNo = locAroundBindService.selectOne(new EntityWrapper().eq("b_loc_no", locMast.getLocNo())); if (Cools.isEmpty(bLocNo)) { count=detl.getAnfme()+count; } } } if (count() .eq("status", 1) .eq("dev_no", params.getDevNo())); if (Objects.isNull(basDevice)) { throw new CoolException("机台信息不存在或已禁用!!"); } List binds = locAroundBindService.selectList(new EntityWrapper() .eq("dev_no", basDevice.getType()) .eq("freeze", frozen==1? 0:1)); if (Objects.isNull(binds) || binds.isEmpty()) { throw new CoolException("机台不需要"+s+"!!"); } binds.forEach(loc -> { loc.setFreeze(frozen); if (!locAroundBindService.updateById(loc)) { throw new CoolException("库位"+s+"失败,请检查后再操作!!"); } }); return R.ok(s+"成功 !!"); } }