package com.zy.asrs.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.core.common.Cools;
|
import com.zy.asrs.entity.OrderDetlPakout;
|
import com.zy.asrs.mapper.OrderDetlPakoutMapper;
|
import com.zy.asrs.service.OrderDetlPakoutService;
|
import org.springframework.stereotype.Service;
|
|
import java.util.List;
|
|
@Service("orderDetlPakoutService")
|
public class OrderDetlPakoutServiceImpl extends ServiceImpl<OrderDetlPakoutMapper, OrderDetlPakout> implements OrderDetlPakoutService {
|
|
@Override
|
public List<OrderDetlPakout> selectByOrderId(Long orderId) {
|
return this.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_id", orderId));
|
}
|
|
@Override
|
public Page<OrderDetlPakout> getPakoutPage(Page<OrderDetlPakout> page) {
|
page.setRecords(baseMapper.getPakoutPage(page.getCondition()));
|
page.setTotal(baseMapper.getPakoutPageCount(page.getCondition()));
|
return page;
|
}
|
|
@Override
|
public OrderDetlPakout selectItem(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
|
// 延迟出库后,man_order_detl_pakout 会按托盘拆明细。
|
// 旧的 orderId + 物料维度可能命中多条记录,不能再用 mapper 返回单对象的 selectOne 语义。
|
// 这里统一改为列表查询并按 id 取第一条,避免 TooManyResultsException;需要精确回写时请优先使用 pallet_id。
|
return selectFirst(buildItemWrapper(orderId, null, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3));
|
}
|
|
@Override
|
public OrderDetlPakout selectItem(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
|
// 同上,orderNo + 物料维度在新模型中不保证唯一,只作为旧数据的兜底匹配。
|
return selectFirst(buildItemWrapper(null, orderNo, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3));
|
}
|
|
@Override
|
public OrderDetlPakout selectItemByOrderNoAndPallet(String orderNo, String palletId) {
|
if (Cools.isEmpty(orderNo) || Cools.isEmpty(palletId)) {
|
return null;
|
}
|
// orderNo + palletId 是延迟出库订单明细的精确匹配键。
|
// 仍然使用 selectList 取第一条,防止历史脏数据里同一托盘重复时 selectOne 直接中断定时线程。
|
EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
|
wrapper.eq("order_no", orderNo)
|
.eq("pallet_id", palletId)
|
.orderBy("id", true);
|
return selectFirst(wrapper);
|
}
|
|
@Override
|
public OrderDetlPakout findByLook(List<OrderDetlPakout> orderDetls, Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
|
for (OrderDetlPakout orderDetl : orderDetls) {
|
if (orderDetl.getOrderId().equals(orderId) && orderDetl.getMatnr().equals(matnr) && orderDetl.getBrand().equals(brand)
|
&& orderDetl.getStandby1().equals(standby1) && orderDetl.getStandby2().equals(standby2) && orderDetl.getStandby3().equals(standby3)
|
&& orderDetl.getBoxType1().equals(boxType1) && orderDetl.getBoxType2().equals(boxType2) && orderDetl.getBoxType3().equals(boxType3)
|
) {
|
if (Cools.eq(batch, orderDetl.getBatch())) {
|
return orderDetl;
|
}
|
}
|
}
|
return null;
|
}
|
|
@Override
|
public boolean increase(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty) {
|
return this.baseMapper.increase(orderId, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty) > 0;
|
}
|
|
@Override
|
public boolean decrease(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty) {
|
int decrease = this.baseMapper.decrease(orderNo, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty);
|
if (decrease == 0) {
|
return this.baseMapper.decrease(orderNo, matnr, "",brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty) > 0;
|
} else {
|
return true;
|
}
|
}
|
|
@Override
|
public boolean modifyStatus(Long orderId, Integer status) {
|
return this.baseMapper.modifyStatus(orderId, status) > 0;
|
}
|
|
@Override
|
public boolean addToLogTable(OrderDetlPakout orderDetl) {
|
return this.baseMapper.addToLogTable(orderDetl) > 0;
|
}
|
|
@Override
|
public boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty) {
|
return this.baseMapper.increaseQtyByOrderNo(orderNo, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty) > 0;
|
}
|
|
@Override
|
public boolean increaseQtyByOrderNoAndPallet(String orderNo, String palletId, Double qty) {
|
OrderDetlPakout orderDetl = selectItemByOrderNoAndPallet(orderNo, palletId);
|
if (orderDetl == null) {
|
return false;
|
}
|
// qty 是完成数量,由任务完成回写递增;workQty 是任务生成数量,定时生成任务时已维护。
|
Double oldQty = orderDetl.getQty() == null ? 0.0D : orderDetl.getQty();
|
orderDetl.setQty(oldQty + (qty == null ? 0.0D : qty));
|
return this.updateById(orderDetl);
|
}
|
|
/**
|
* 入出库任务生成时,更新单据表中作业数量
|
* @param orderId
|
* @param matnr
|
* @param batch
|
* @param workQty
|
* @return
|
*/
|
@Override
|
public boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double workQty) {
|
return this.baseMapper.increaseWorkQty(orderId, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, workQty) > 0;
|
}
|
|
private EntityWrapper<OrderDetlPakout> buildItemWrapper(Long orderId, String orderNo, String matnr, String batch, String brand,
|
String standby1, String standby2, String standby3,
|
String boxType1, String boxType2, String boxType3) {
|
EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
|
wrapper.eq("matnr", matnr)
|
.eq("batch", batch)
|
.eq("brand", brand)
|
.eq("standby1", standby1)
|
.eq("standby2", standby2)
|
.eq("standby3", standby3)
|
.eq("box_type1", boxType1)
|
.eq("box_type2", boxType2)
|
.eq("box_type3", boxType3)
|
.orderBy("id", true);
|
if (!Cools.isEmpty(orderId)) {
|
wrapper.eq("order_id", orderId);
|
}
|
if (!Cools.isEmpty(orderNo)) {
|
wrapper.eq("order_no", orderNo);
|
}
|
return wrapper;
|
}
|
|
private OrderDetlPakout selectFirst(EntityWrapper<OrderDetlPakout> wrapper) {
|
List<OrderDetlPakout> rows = this.selectList(wrapper);
|
return Cools.isEmpty(rows) ? null : rows.get(0);
|
}
|
}
|