1、案例:
public void doBlanking(List<String> ids) {
// 获取订单下未发布的工单
String woHql = "SELECT a FROM UmppWorkOrder a "
+ "WHERE a.state = 0 AND a.isDelete = 0 AND a.qty != 0 AND a.order.id in :ids "
+ "order by a.order.id";
List<UmppWorkOrder> woList = this.dao.createQuery(woHql)
.setParameterList("ids", ids).list();
// 要冲减的物料编码
List<String> mrlCodeList = new ArrayList<String>();
for (UmppWorkOrder umppWorkOrder : woList) {
mrlCodeList.add(umppWorkOrder.getProduCode());
}
// 开始冲减
for (UmppWorkOrder wo : woList) {
// 计划数量
BigDecimal qty = wo.getQty();
List<UmppExtendRecord> uers = mrlCode_uers_map.get(wo
.getProduCode());
if (uers != null) {
for (int i = uers.size() - 1; i >= 0; i--) {
UmppExtendRecord er = uers.get(i);
if (qty.intValue() == 0) {
break;
}
if (!extendRecordList.contains(er)) {
extendRecordList.add(er);
}
// UmmdDeliveryTaskDetail taskDetail = new
// UmmdDeliveryTaskDetail();
// 余数大于扣减数
if (er.getRemainQty().compareTo(qty) >= 0) {
er.setRemainQty(er.getRemainQty().subtract(qty));
// 保存匹配表
UmppExtendTrx trx = new UmppExtendTrx();
trx.setRecordGid(er.getId());
trx.setQty(qty);
trx.setRelOrderCode(wo.getOrderCode());
trx.setRelWorkOrderCode(wo.getCode());
trx.setSource(ThtConstants.SOURCE_TYPE_YULIAO);
trx.setWorkCenterGid(wo.getWorkCenterId());
trx.setOperateDate(new Date());
trx.setOperatePerson(userName);
trxList.add(trx);
qty = new BigDecimal(0);
if (er.getRemainQty().intValue() == 0) {
uers.remove(i);
}
break;
} else {
qty = qty.subtract(er.getRemainQty());
// 保存
UmppExtendTrx trx = new UmppExtendTrx();
trx.setRecordGid(er.getId());
trx.setQty(er.getRemainQty());
trx.setRelOrderCode(wo.getOrderCode());
trx.setRelWorkOrderCode(wo.getCode());
trx.setSource(ThtConstants.SOURCE_TYPE_YULIAO);
trx.setWorkCenterGid(wo.getWorkCenterId());
trx.setOperateDate(new Date());
trx.setOperatePerson(userName);
trxList.add(trx);
er.setRemainQty(er.getRemainQty().subtract(
er.getRemainQty()));
uers.remove(i);
}
}
}
if (wo.getQty().compareTo(qty) > 0) {
wo.setQty(qty);
// 计划生产数量冲减到0则工单状态变为完工
if (qty.intValue() == 0) {
wo.setProState(UmppConstants.PRO_STATE_FINISHED);
wo.setState(UmppConstants.WO_STATE_PUBLISH);
}
workOrderList.add(wo);
}
}
}
2、解析:
1)
List<UmppWorkOrder> woList = this.dao.createQuery(woHql)
.setParameterList("ids", ids).list();
List<String> mrlCodeList = new ArrayList<String>();
for (UmppWorkOrder umppWorkOrder1 : woList) {
mrlCodeList.add(umppWorkOrder.getProduCode());
}
增强for循环,umppWorkOrder1变量类型和woList数组存放类型一样;
2)
变量mrlCodeList接收的变量类型和umppWorkOrder.getProduCode()一样;