add:换托组盘,中鼎回调需求单

This commit is contained in:
zhaoyf
2026-08-15 09:42:33 +08:00
parent 1560faa7a9
commit 74eaa903a6
18 changed files with 175 additions and 105 deletions

View File

@@ -5,15 +5,16 @@ import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.ext_manage.api.MesApi;
import org.nl.wms.ext_manage.purchase.service.InboundZDwmsService;
import org.nl.wms.ext_manage.purchase.service.dto.ZDwmsCallbackDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;import org.nl.common.base.ResponseData;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/wms")
@@ -22,15 +23,15 @@ public class ZDwmsCallbackController {
private final InboundZDwmsService inboundZDwmsService;
@PostMapping("/zdwmsCallback")
@Log("中鼎立库回调")
@PostMapping("/SyncRequisitionFeedback/Feedback")
@Log("中鼎立库出库完成回调")
@SaIgnore
public ResponseEntity<Object> zdwmsCallback(@RequestBody ZDwmsCallbackDto dto) {
log.info("中鼎立库回调, billId: {}, status: {}", dto.getBill_id(), dto.getStatus());
public ResponseEntity<Object> zdwmsCallback(@RequestBody List<MesApi.PmDemandCall> dto) {
log.info("中鼎立库回调: {}", dto);
inboundZDwmsService.handleZDwmsCallback(dto);
JSONObject result = new JSONObject();
result.put("status", 200);
result.put("message", "回调处理成功");
return ResponseData.build(result, HttpStatus.OK);
result.put("ResultCode", 0);
result.put("Message", "回调处理成功");
return ResponseEntity.ok(result);
}
}

View File

@@ -1,11 +1,11 @@
package org.nl.wms.ext_manage.purchase.service;
import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst;
import org.nl.wms.ext_manage.purchase.service.dto.ZDwmsCallbackDto;
import org.nl.wms.ext_manage.api.MesApi;
import java.util.List;
public interface InboundZDwmsService {
void forwardToZDwms(Purchasemst mst);
void handleZDwmsCallback(ZDwmsCallbackDto dto);
void handleZDwmsCallback(List<MesApi.PmDemandCall> dto);
}

View File

@@ -1,92 +1,38 @@
package org.nl.wms.ext_manage.purchase.service.impl;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.pm_manage.purchase.service.enums.PurchaseBillStatus;
import org.nl.wms.ext_manage.api.MesApi;
import org.nl.wms.ext_manage.purchase.service.InboundZDwmsService;
import org.nl.wms.pm_manage.purchase.service.dao.Purchasedtl;
import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst;
import org.nl.wms.pm_manage.purchase.service.dao.mapper.PurchasedtlMapper;
import org.nl.wms.pm_manage.purchase.service.dao.mapper.PurchasemstMapper;
import org.nl.wms.ext_manage.purchase.service.dto.ZDwmsCallbackDto;
import org.nl.wms.pm_manage.demand.service.IPmDemandService;
import org.nl.wms.pm_manage.demand.service.dao.PmDemand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
@Slf4j
@Service
public class InboundZDwmsServiceImpl implements InboundZDwmsService {
@Value("${inbound.zdwms-url:http://192.168.100.200:8080/api/wms/purchaseInbound}")
private String zdwmsUrl;
@Autowired
private IPmDemandService pmDemandService;
@Autowired
private PurchasemstMapper purchasemstMapper;
private MesApi mesApi;
@Autowired
private PurchasedtlMapper purchasedtlMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public void forwardToZDwms(Purchasemst mst) {
log.info("转发采购入库单到中鼎立库, billId: {}", mst.getBill_id());
JSONObject param = new JSONObject();
param.put("bill_id", mst.getBill_id());
param.put("order_no", mst.getOrder_no());
param.put("order_type", mst.getOrder_type());
param.put("supplier_code", mst.getSupplier_code());
param.put("supplier_name", mst.getSupplier_name());
List<Purchasedtl> dtlList = purchasedtlMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<Purchasedtl>()
.eq("bill_id", mst.getBill_id())
);
param.put("detailList", dtlList);
try {
String resultMsg = HttpRequest.post(zdwmsUrl)
.body(param.toJSONString())
.execute().body();
JSONObject result = JSONObject.parseObject(resultMsg);
Integer status = result.getInteger("status");
if (status != null && status == 200) {
updateBillStatus(mst.getBill_id(), PurchaseBillStatus.EXECUTING);
log.info("转发中鼎立库成功, billId: {}", mst.getBill_id());
} else {
log.error("转发中鼎立库失败, billId: {}, response: {}", mst.getBill_id(), resultMsg);
throw new RuntimeException("转发中鼎立库失败: " + result.getString("message"));
}
} catch (Exception e) {
log.error("转发中鼎立库异常, billId: {}", mst.getBill_id(), e);
throw new RuntimeException("转发中鼎立库异常: " + e.getMessage());
public void handleZDwmsCallback(List<MesApi.PmDemandCall> dtos) {
for (MesApi.PmDemandCall dto : dtos) {
PmDemand pmDemand = pmDemandService.getById(dto.getReqId());
pmDemand.setAssign_qty(pmDemand.getAssign_qty().add(new BigDecimal(dto.getQty())));
pmDemand.setLk_container(dto.getContainerCode());
pmDemandService.updateById(pmDemand);
}
mesApi.pmDemandCallback(dtos);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void handleZDwmsCallback(ZDwmsCallbackDto dto) {
log.info("接收中鼎立库回调, billId: {}, status: {}", dto.getBill_id(), dto.getStatus());
if ("completed".equals(dto.getStatus()) || "2".equals(dto.getStatus())) {
updateBillStatus(dto.getBill_id(), PurchaseBillStatus.COMPLETED);
log.info("中鼎立库执行完成, billId: {}", dto.getBill_id());
} else {
log.warn("中鼎立库回调状态未识别, billId: {}, status: {}", dto.getBill_id(), dto.getStatus());
}
}
private void updateBillStatus(String billId, PurchaseBillStatus status) {
LambdaUpdateWrapper<Purchasemst> wrapper = new LambdaUpdateWrapper<Purchasemst>()
.eq(Purchasemst::getBill_id, billId)
.set(Purchasemst::getBill_status, status.getCode());
purchasemstMapper.update(null, wrapper);
}
}

View File

@@ -2,6 +2,8 @@ package org.nl.wms.pda_manage.ios_manage.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.pda_manage.ios_manage.service.dto.OutBoundDis;
import org.nl.wms.pda_manage.outBound.dto.ChangeGroupDto;
import org.nl.wms.pda_manage.outBound.dto.ContainerItemDto;
import org.nl.wms.pda_manage.outBound.dto.LineSideDto;
import org.nl.wms.pda_manage.util.PdaResponse;
@@ -116,4 +118,7 @@ public interface PdaIosOutService {
void outDisFinish(OutBoundDis outBoundDis);
void changeGroup(ChangeGroupDto changeGroupDto);
List<ContainerItemDto> getContainerItemByCode(String code);
}

View File

@@ -31,8 +31,12 @@ import org.nl.wms.ext_manage.api.request.ReceiveOutRequest;
import org.nl.wms.ext_manage.mes.service.dto.WorkOrderBomItem;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService;
import org.nl.wms.pda_manage.ios_manage.service.dto.OutBoundDis;
import org.nl.wms.pda_manage.outBound.dto.ChangeGroupDto;
import org.nl.wms.pda_manage.outBound.dto.ContainerItemDto;
import org.nl.wms.pda_manage.outBound.dto.LineSideDto;
import org.nl.wms.pda_manage.util.PdaResponse;
import org.nl.wms.pm_manage.demand.service.IPmDemandService;
import org.nl.wms.pm_manage.demand.service.dao.PmDemand;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskEnum;
import org.nl.wms.sch_manage.service.ISchBasePointService;
@@ -162,6 +166,9 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Autowired
private PdaPointTask pdaPointTask;
@Autowired
private IPmDemandService pmDemandService;
@Override
@Mock
@@ -731,4 +738,52 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
iOutBillService.disFinish(Arrays.asList(ioStorInvDis));
//平库出库的话需要调拨到目标参考
}
@Override
public void changeGroup(ChangeGroupDto changeGroupDto) {
if (StringUtils.isEmpty(changeGroupDto.getVehicle_code()) || changeGroupDto.getItems().isEmpty()){
throw new BadRequestException("请求数据为空");
}
List<ChangeGroupDto.ChangeGroupItem> items = changeGroupDto.getItems();
List<GroupPlate> groupPlates = new ArrayList<>();
for (ChangeGroupDto.ChangeGroupItem item : items) {
GroupPlate groupPlate = GroupPlate.builder()
.material_code(item.getMaterial_code())
.load_port(item.getLoad_port())
.storagevehicle_code(changeGroupDto.getVehicle_code())
.group_id(IdUtil.getStringId())
.qty(item.getQty())
.qty_unit_id("1")
.qty_unit_name("PCS")
.status(GROUP_PLATE_STATUS.code("组盘"))
.pcsn("1")
.create_name(SecurityUtils.getCurrentNickName())
.create_time(DateUtil.now())
.create_id(SecurityUtils.getCurrentUserId())
.build();
groupPlates.add(groupPlate);
}
iMdPbGroupplateService.saveBatch(groupPlates);
}
@Override
public List<ContainerItemDto> getContainerItemByCode(String code) {
if (StringUtils.isEmpty(code)){
throw new BadRequestException("请求条码内容为空");
}
List<PmDemand> demandList = pmDemandService.list(new LambdaQueryWrapper<PmDemand>()
.ne(PmDemand::getIs_deleted, 1)
.eq(PmDemand::getLk_container, code));
List<ContainerItemDto> dtos = new ArrayList<>();
for (PmDemand pmDemand : demandList) {
ContainerItemDto containerItemDto = new ContainerItemDto();
containerItemDto.setMaterial_name(pmDemand.getSku_name());
containerItemDto.setMaterial_code(pmDemand.getSku_code());
containerItemDto.setLoad_port(pmDemand.getTarget_area());
containerItemDto.setQty(pmDemand.getQty());
dtos.add(containerItemDto);
}
return dtos;
}
}

View File

@@ -11,6 +11,8 @@ import org.nl.common.utils.MapOf;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService;
import org.nl.wms.pda_manage.ios_manage.service.dto.OutBoundDis;
import org.nl.wms.pda_manage.outBound.dto.ChangeGroupDto;
import org.nl.wms.pda_manage.outBound.dto.ContainerItemDto;
import org.nl.wms.pda_manage.outBound.dto.LineSideDto;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.springframework.beans.factory.annotation.Autowired;
@@ -126,7 +128,19 @@ public class PdaIosOutController {
return ResponseData.build(pdaIosOutService.getVehicleMaterial(whereJson), HttpStatus.OK);
}
@PostMapping("/changeGroup")
@Log("换托组盘")
public ResponseEntity changeGroup(ChangeGroupDto changeGroupDto){
pdaIosOutService.changeGroup(changeGroupDto);
return ResponseData.build(HttpStatus.OK);
}
@GetMapping("/getContainerItem")
@Log("根据容器编号获取立库托盘物料信息")
public ResponseEntity getContainerItemByCode(String code){
List<ContainerItemDto> list = pdaIosOutService.getContainerItemByCode(code);
return ResponseData.build(list, HttpStatus.OK);
}

View File

@@ -0,0 +1,19 @@
package org.nl.wms.pda_manage.outBound.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ChangeGroupDto {
private String vehicle_code;
private List<ChangeGroupItem> items;
@Data
public static class ChangeGroupItem{
private String material_code;
private String load_port;
private BigDecimal qty;
}
}

View File

@@ -0,0 +1,14 @@
package org.nl.wms.pda_manage.outBound.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ContainerItemDto {
private String material_name;
private String material_code;
private String load_port;
private BigDecimal qty;
}

View File

@@ -67,6 +67,8 @@ public class PmDemand extends Model<PmDemand> {
@TableField("inventory_dis")
private String inventory_dis;
private String lk_container;
@Override
protected Serializable pkVal() {
return this.id;

View File

@@ -439,6 +439,7 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
detailRow.put("source_bill_table", "pm_demand");
detailRow.put("remark", "关联工单:" + demand.getWorkOrder());
detailRow.put("load_port", demand.getTargetArea());
detailRow.put("vehicle_type", demand.getCarrierType());
tableData.add(detailRow);
}
billParam.put("tableData", tableData);

View File

@@ -3,6 +3,7 @@ package org.nl.wms.system_manage.controller.appversion;
import cn.dev33.satoken.annotation.SaIgnore;
import org.nl.common.base.ResponseData;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.system_manage.service.appversion.IAppVersionService;
import org.nl.wms.system_manage.service.appversion.dao.AppVersion;
import org.springframework.beans.factory.annotation.Autowired;
@@ -39,6 +40,7 @@ public class AppVersionController {
}
@PostMapping("/publish")
@Log("发布新版本APP")
public ResponseEntity<Object> publish(@RequestParam("app_name") String appName,
@RequestParam("version_name") String versionName,
@RequestParam("file") MultipartFile file) {

View File

@@ -117,4 +117,8 @@ public class IOStorInvDtl implements Serializable {
*/
private String callback_strategy ;
/**
* 出库载具类型
*/
private String vehicle_type ;
}

View File

@@ -20,6 +20,7 @@
plan_qty,
remark,
assign_qty,
vehicle_type,
unassign_qty
) VALUES
<foreach collection="list" item="item" separator=",">
@@ -41,6 +42,7 @@
#{item.plan_qty},
#{item.remark},
#{item.assign_qty},
#{item.vehicle_type},
#{item.unassign_qty}
)
</foreach>

View File

@@ -39,4 +39,5 @@ public class IOStorInvDtlDto extends IOStorInvDtl {
* 载具编号
*/
private String storagevehicle_code;
private String vehicle_type;
}

View File

@@ -1,7 +1,6 @@
package org.nl.wms.warehouse_manage.inAndOut.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
@@ -16,39 +15,31 @@ import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.basedata_manage.service.dto.*;
import org.nl.wms.basedata_manage.service.dto.MdPbStoragevehicleextDto;
import org.nl.wms.basedata_manage.service.dto.StrategyMater;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.core.tasks.StOutTask;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.core.tasks.StOutTask;
import org.nl.wms.warehouse_manage.stockReturn.strategy.CallbackStrategyPublish;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inventory.IStInventoryService;
import org.nl.wms.warehouse_manage.inventory.core.enums.InventoryChangeType;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.AddInvParam;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.OutDisParam;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.OutDisReverseParam;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.OutFinishParam;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInv;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDtl;
@@ -57,10 +48,16 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMappe
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDtlDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.OutBillCancelReq;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.OutBillDivReq;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.OutBillManualDivReq;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.OutBillOneCancelReq;
import org.nl.wms.warehouse_manage.inventory.IStInventoryService;
import org.nl.wms.warehouse_manage.inventory.core.enums.InventoryChangeType;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.OutDisParam;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.OutDisReverseParam;
import org.nl.wms.warehouse_manage.inventory.core.param.impl.OutFinishParam;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.stockReturn.strategy.CallbackStrategyPublish;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -71,6 +68,8 @@ import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
;
/**
* @author dsh
* 2025/5/29
@@ -303,6 +302,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
detail.setRemark(row.getString("remark"));
detail.setAssign_qty(BigDecimal.ZERO);
detail.setUnassign_qty(planQty);
detail.setVehicle_type(row.getString("vehicle_type"));
batchSave.add(detail);
totalQty = totalQty.add(planQty);
}

View File

@@ -87,8 +87,9 @@ import CRUD, { crud, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
const baseURLStr = window.g.prod.VUE_APP_BASE_API
const defaultForm = { app_name: '', version_name: '' }
const baseURL = process.env.NODE_ENV === 'production' ? baseURLStr : '/'
export default {
name: 'AppVersion',
@@ -116,9 +117,8 @@ export default {
}
},
computed: {
...mapGetters(['baseApi']),
publishUrl() {
return this.baseApi + '/api/appVersion/publish'
return baseURL + '/api/appVersion/publish'
}
},
methods: {
@@ -173,7 +173,7 @@ export default {
return value.toFixed(index === 0 ? 0 : 2) + ' ' + units[index]
},
downloadUrl(id) {
return this.baseApi + '/api/appVersion/download/' + id
return baseURL + '/api/appVersion/download/' + id
}
}
}

View File

@@ -135,6 +135,7 @@
<el-table-column prop="qty_unit_name" label="单位" align="center" />
<el-table-column prop="source_bill_code" label="源单号" align="center" width="130px" />
<el-table-column prop="source_load_port" label="指定上料口" align="center" width="130px" />
<el-table-column prop="vehicle_type" label="载具名称" align="center" width="130px" />
<el-table-column show-overflow-tooltip prop="remark" label="明细备注" align="center" />
</el-table>
</el-card>

View File

@@ -440,19 +440,22 @@ export default {
const skuName = dtl.material_name || ''
const qty = dtl.plan_qty || ''
const assQty = dtl.assign_qty || ''
const qrText = orderNo + '#' + itemNo + '#' + skuCode + '#' + skuName + '##' + qty + '#'
const vehicle_type = dtl.vehicle_type || ''
const source_load_port = dtl.source_load_port || ''
const qrText = orderNo + '#' + itemNo + '#' + skuCode + '#' + skuName + '##' + qty + '#' + source_load_port + '#'
const imgSrc = await QRCode.toDataURL(qrText, {
width: 300
})
html += '<div class="label">'
html += '<h3>上海诺力</h3>'
html += '<table>'
html += '<tr><td class="lbl">出库单号</td><td class="val">' + orderNo + '</td><td class="qr" rowspan="6"><img src="' + imgSrc + '" width="150" height="150" /></td></tr>'
html += '<tr><td class="lbl">出库单号</td><td class="val">' + orderNo + '</td><td class="qr" rowspan="7"><img src="' + imgSrc + '" width="150" height="150" /></td></tr>'
html += '<tr><td class="lbl">行号</td><td class="val">' + itemNo + '</td></tr>'
html += '<tr><td class="lbl">物料编码</td><td class="val">' + skuCode + '</td></tr>'
html += '<tr><td class="lbl">物料名称</td><td class="val">' + skuName + '</td></tr>'
html += '<tr><td class="lbl">出库数量</td><td class="val">' + assQty + '</td></tr>'
html += '<tr><td class="lbl">用料位置</td><td class="val">' + house_code + '</td></tr>'
html += '<tr><td class="lbl">载具名称</td><td class="val">' + vehicle_type + '</td></tr>'
html += '</table></div>'
}
html += '</body></html>'