rev:手持单据出库;rev:SpelUtil针对车间的特殊处理
This commit is contained in:
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.ss.formula.functions.T;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.springframework.expression.Expression;
|
||||
@@ -78,6 +79,10 @@ public class SpelUtil {
|
||||
// System.out.println(value);
|
||||
}
|
||||
//如果表达式为null,空则返回''
|
||||
private static Map<String,String> Product_Area_Mapping = MapOf.of(
|
||||
"","A1"
|
||||
,"","A2"
|
||||
,"","A3");
|
||||
public static Map<String,String> parse(JSONObject sourceData,Map<String,String> fieldSkip){
|
||||
StandardEvaluationContext context = new StandardEvaluationContext();
|
||||
context.setVariable("M",sourceData);
|
||||
@@ -88,6 +93,13 @@ public class SpelUtil {
|
||||
try {
|
||||
Expression expression = SpelUtil.SPEL_PARSER.parseExpression(skip);
|
||||
String value = expression.getValue(context, String.class);
|
||||
if (field.contains("product_area")){
|
||||
String product_area = Product_Area_Mapping.get(value);
|
||||
if (StringUtils.isEmpty(product_area)){
|
||||
throw new BadRequestException("当前业务数据product_area"+value+" 对应的车间数据");
|
||||
}
|
||||
value = product_area;
|
||||
}
|
||||
result.put(field,value);
|
||||
}catch (SpelEvaluationException ex){
|
||||
ex.printStackTrace();
|
||||
|
||||
@@ -8,11 +8,14 @@ import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.entity.PageQuery;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.RedisUtils;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService;
|
||||
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
|
||||
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
|
||||
import org.nl.wms.pda_manage.iostorage.sevice.PdaIOService;
|
||||
import org.nl.wms.pda_manage.palletio.service.dto.LabelValueVo;
|
||||
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
|
||||
import org.nl.wms.pm_manage.form_data.service.dto.FormDataQuery;
|
||||
@@ -40,9 +43,7 @@ import java.util.Map;
|
||||
public class PdaOutController {
|
||||
|
||||
@Autowired
|
||||
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||
@Autowired
|
||||
private IActRuExecutionService iActRuExecutionService;
|
||||
private PdaIOService pdaIOService;
|
||||
@Autowired
|
||||
private IBmFormStrucService iBmFormStrucService;
|
||||
@Autowired
|
||||
@@ -54,7 +55,7 @@ public class PdaOutController {
|
||||
public ResponseEntity<List<Map>> orderType() {
|
||||
List<Map> result = new ArrayList<>();
|
||||
List<BmFormStruc> list = iBmFormStrucService.list(new QueryWrapper<BmFormStruc>()
|
||||
.likeRight("form_desc","出库")
|
||||
.like("form_desc","出库")
|
||||
.select("form_type","form_name"));
|
||||
for (BmFormStruc formStruc : list) {
|
||||
result.add(MapOf.of("text",formStruc.getForm_name(),"value",formStruc.getForm_type()));
|
||||
@@ -66,6 +67,11 @@ public class PdaOutController {
|
||||
@Log("查询单据数据")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo<PmFormDataDto>> orderList(FormDataQuery query, PageQuery page) {
|
||||
page.setPage(page.getPage()-1);
|
||||
if (page.getSize()>20){
|
||||
page.setSize(20);
|
||||
}
|
||||
page.setSort("id,desc");
|
||||
query.setStatus(new String[]{StatusEnum.FORM_STATUS.code("生成"),StatusEnum.FORM_STATUS.code("执行中")});
|
||||
return new ResponseEntity<>(TableDataInfo.build(iPmFormDataService.queryTree(query,page)), HttpStatus.OK);
|
||||
}
|
||||
@@ -73,6 +79,9 @@ public class PdaOutController {
|
||||
@Log("出库确认")
|
||||
@SaIgnore
|
||||
public ResponseEntity<TableDataInfo> confirm(@RequestBody PdaFormOutMst pdaFormOutMst) {
|
||||
RedissonUtils.lock(() -> {
|
||||
pdaIOService.PpdaOrderOutStorage(pdaFormOutMst);
|
||||
}, pdaFormOutMst.getCode(), null);
|
||||
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +106,10 @@ public class PdaFormOutDtl {
|
||||
* 批次号
|
||||
*/
|
||||
private String pcsn;
|
||||
/**
|
||||
* 车间字段
|
||||
*/
|
||||
private String product_area;
|
||||
/**
|
||||
* 载具
|
||||
*/
|
||||
|
||||
@@ -52,13 +52,17 @@ public class PdaFormOutMst implements Serializable {
|
||||
* 单据类型
|
||||
*/
|
||||
private String form_type;
|
||||
/**
|
||||
* 出库仓库
|
||||
*/
|
||||
private String stor_code;
|
||||
|
||||
/**
|
||||
* 业务单据状态
|
||||
*/
|
||||
private String status;
|
||||
/**
|
||||
* 业务单据状态
|
||||
* 业务单据备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
package org.nl.wms.pda_manage.iostorage.sevice;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.exception.BadRequestException;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.*;
|
||||
import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
|
||||
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
|
||||
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutDtl;
|
||||
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
|
||||
import org.nl.wms.stor_manage.io.service.iostor.IStIvtIostorinvService;
|
||||
import org.nl.wms.stor_manage.io.service.iostor.dao.StIvtIostorinv;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.IStIvtIostorinvdtlService;
|
||||
import org.nl.wms.stor_manage.io.service.iostor_dtl.dao.StIvtIostorinvdtl;
|
||||
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class PdaIOService {
|
||||
|
||||
@Autowired
|
||||
IBmFormStrucService iBmFormStrucService;
|
||||
@Autowired
|
||||
IStIvtIostorinvService iStIvtIostorinvService;
|
||||
@Autowired
|
||||
IStIvtIostorinvdtlService iStIvtIostorinvdtlService;
|
||||
|
||||
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst){
|
||||
PdaIOService ioService = SpringContextHolder.getBean(PdaIOService.class);
|
||||
//创建单据分配货位
|
||||
StIvtIostorinv ivtIostorinv = ioService.createPadIvtAndoutDispense(pdaFormOutMst);
|
||||
//生成流程
|
||||
this.pdaTaskOpen(ivtIostorinv);
|
||||
}
|
||||
@Transactional
|
||||
public StIvtIostorinv createPadIvtAndoutDispense(PdaFormOutMst pdaFormOutMst){
|
||||
// || StringUtils.isEmpty(pdaFormOutMst.getStor_code())
|
||||
if (pdaFormOutMst == null || !pdaFormOutMst.getHasChildren()){
|
||||
throw new BadRequestException("出库申请失败:请求参数异常");
|
||||
}
|
||||
List<PdaFormOutDtl> dtls = pdaFormOutMst.getChildren();
|
||||
if (CollectionUtils.isEmpty(dtls)){
|
||||
throw new BadRequestException("出库申请失败:出库明细不能为空");
|
||||
}
|
||||
BmFormStruc formType = iBmFormStrucService.getFormType(pdaFormOutMst.getForm_type());
|
||||
String billType = StatusEnum.IOBILL_TYPE_OUT.code(formType.getForm_desc());
|
||||
|
||||
StIvtIostorinv mst = new StIvtIostorinv();
|
||||
mst.setId(IdUtil.getStringId());
|
||||
mst.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
mst.setCreate_time(DateUtil.now());
|
||||
mst.setCode(CodeUtil.getNewCode("IO_CODE"));
|
||||
mst.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
mst.setSource_form_id(pdaFormOutMst.getId());
|
||||
mst.setSource_form_type(pdaFormOutMst.getForm_type());
|
||||
mst.setProduct_area(mst.getForm_data().getString("product_area"));
|
||||
mst.setBill_type(billType);
|
||||
mst.setIn_storage(false);
|
||||
mst.setForm_data(new JSONObject(MapOf.of("shipper",null,"product_area",null)));
|
||||
List<StIvtIostorinvdtl> list = new ArrayList<>();
|
||||
for (PdaFormOutDtl dtl : dtls) {
|
||||
dtl.setNow_assign_qty(dtl.getQty());
|
||||
BigDecimal assignQty = dtl.getNow_assign_qty();
|
||||
if (assignQty==null || assignQty.intValue()==0){
|
||||
throw new BadRequestException("出库申请失败:当前"+dtl.getMaterial_name()+"明细申请数量为0");
|
||||
}
|
||||
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
|
||||
ivtDtl.setSource_form_id(dtl.getId());
|
||||
ivtDtl.setSource_form_type(dtl.getForm_type());
|
||||
ivtDtl.setMaterial_id(dtl.getMaterial_id());
|
||||
BigDecimal nowAssignQty = assignQty;
|
||||
String productArea = dtl.getForm_data().getString("product_area");
|
||||
if (StringUtils.isEmpty(productArea) || !productArea.equals("A1") || !productArea.equals("A2") ||!productArea.equals("A3")){
|
||||
throw new BadRequestException("出库申请失败:明细数据车间字段未指定或不正确");
|
||||
}
|
||||
HashMap map = MapOf.of("end_struct_code", "", "start_struct_code", "", "order", "", "product_area", "");
|
||||
ivtDtl.setForm_data(new JSONObject(map));
|
||||
ivtDtl.setQty(nowAssignQty);
|
||||
ivtDtl.setPcsn(dtl.getPcsn());
|
||||
ivtDtl.setStor_code("FStockId");//pdaFormOutMst.getStor_code()
|
||||
ivtDtl.setId(IdUtil.getStringId());
|
||||
ivtDtl.setInv_id(mst.getId());
|
||||
ivtDtl.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
||||
list.add(ivtDtl);
|
||||
}
|
||||
iStIvtIostorinvdtlService.saveBatch(list);
|
||||
iStIvtIostorinvService.save(mst);
|
||||
for (StIvtIostorinvdtl stIvtIostorinvdtl : list) {
|
||||
iStIvtIostorinvService.outDispense((JSONObject) JSON.toJSON(stIvtIostorinvdtl));
|
||||
}
|
||||
return mst;
|
||||
}
|
||||
private void pdaTaskOpen(StIvtIostorinv mst){
|
||||
iStIvtIostorinvService.taskOpen((JSONObject) JSONObject.toJSON(mst));
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,10 @@ public interface PmFormDataMapper extends BaseMapper<PmFormData> {
|
||||
List<PmFormData> query(@Param("query") FormDataQuery query);
|
||||
|
||||
List<PmFormDataDto> queryTree(@Param("query")FormDataQuery query);
|
||||
|
||||
List<PmFormDataDto> queryTree2(@Param("query")FormDataQuery query);
|
||||
|
||||
List<PmFormDataDto> selectChilds(List<String> parents);
|
||||
@Update("${sql}")
|
||||
void dynamicSql(@Param("sql")String sql);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
<result property="form_data" column="form_data" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
|
||||
<result property="unit_id" column="unit_id"/>
|
||||
<!-- <result property="HasChildren" column="HasChildren"/>-->
|
||||
<collection property="children" ofType="org.nl.wms.pm_manage.form_data.service.dto.PmFormDataDto" column="id" select="selectChild"></collection>
|
||||
</resultMap>
|
||||
|
||||
<select id="query" resultMap="BaseResultMap">
|
||||
@@ -103,6 +102,39 @@
|
||||
</where>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
<select id="queryTree2" resultMap="dataDetail">
|
||||
SELECT
|
||||
pm_form_data.*,
|
||||
md_me_materialbase.material_code,
|
||||
md_me_materialbase.material_name,
|
||||
md_me_materialbase.material_spec,
|
||||
md_me_materialbase.single_weight
|
||||
FROM
|
||||
pm_form_data
|
||||
left join md_me_materialbase on pm_form_data.material_id = md_me_materialbase.material_id
|
||||
<where>
|
||||
<if test="query.form_type != null and query.form_type != ''">
|
||||
and form_type = #{query.form_type}
|
||||
</if>
|
||||
<if test="query.status != null and query.status != ''">
|
||||
and pm_form_data.status IN
|
||||
<foreach collection="query.status" item="status" separator="," open="(" close=")">
|
||||
#{status}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="query.parent_id != null and query.parent_id != ''">
|
||||
and parent_id = #{query.parent_id}
|
||||
</if>
|
||||
<if test="query.form_query != null and query.form_query.size() > 0">
|
||||
<foreach collection="query.form_query" item="value" index="key" >
|
||||
<if test="value != null and value != ''">
|
||||
and JSON_CONTAINS(form_data, '{"${key}":"${value}"}')
|
||||
</if>
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
<select id="selectChild" resultMap="dataDetail">
|
||||
select
|
||||
pm_form_data.*,
|
||||
@@ -113,5 +145,18 @@
|
||||
from pm_form_data left join md_me_materialbase on pm_form_data.material_id = md_me_materialbase.material_id
|
||||
where parent_id = #{id}
|
||||
</select>
|
||||
<select id="selectChilds" resultMap="dataDetail">
|
||||
select
|
||||
pm_form_data.*,
|
||||
md_me_materialbase.material_code,
|
||||
md_me_materialbase.material_name,
|
||||
md_me_materialbase.material_spec,
|
||||
md_me_materialbase.single_weight
|
||||
from pm_form_data left join md_me_materialbase on pm_form_data.material_id = md_me_materialbase.material_id
|
||||
where parent_id in
|
||||
<foreach collection="parents" open="(" close=")" item="parent_id" separator=",">
|
||||
#{parent_id}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -121,6 +121,10 @@ public class PmFormDataDto implements Serializable {
|
||||
* 批次号
|
||||
*/
|
||||
private String pcsn;
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String product_area;
|
||||
/**
|
||||
* 载具
|
||||
*/
|
||||
|
||||
@@ -168,7 +168,20 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
||||
public com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> queryTree(FormDataQuery query, PageQuery pageQuery) {
|
||||
Page page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize());
|
||||
page.setOrderBy("id DESC");
|
||||
List<PmFormDataDto> pmFormDataDtos = this.baseMapper.queryTree(query);
|
||||
List<PmFormDataDto> pmFormDataDtos = this.baseMapper.queryTree2(query);
|
||||
if (!CollectionUtils.isEmpty(pmFormDataDtos)){
|
||||
List<String> parents = pmFormDataDtos.stream().map(PmFormDataDto::getId).collect(Collectors.toList());
|
||||
List<PmFormDataDto> childs = this.baseMapper.selectChilds(parents);
|
||||
Map<String, List<PmFormDataDto>> childMap = childs.stream().collect(Collectors.groupingBy(PmFormDataDto::getParent_id));
|
||||
for (PmFormDataDto dataDto : pmFormDataDtos) {
|
||||
List<PmFormDataDto> children = childMap.get(dataDto.getId());
|
||||
for (PmFormDataDto child : children) {
|
||||
String productArea = child.getForm_data().getString("product_area");
|
||||
child.setProduct_area(productArea);
|
||||
}
|
||||
dataDto.setChildren(children);
|
||||
}
|
||||
}
|
||||
com.baomidou.mybatisplus.extension.plugins.pagination.Page<PmFormDataDto> dtoPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page.getPages(), page.getPageSize(), page.getTotal());
|
||||
dtoPage.setRecords(pmFormDataDtos);
|
||||
return dtoPage;
|
||||
|
||||
@@ -2,7 +2,7 @@ package org.nl.wms.stor_manage.io.service.iostor_dtl.dao;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
|
||||
@@ -71,7 +71,9 @@
|
||||
WHERE
|
||||
md_pb_vehicleMater.is_delete = false
|
||||
AND material_id = #{material_id}
|
||||
AND pcsn = #{pcsn}
|
||||
<if test="pcsn != null and pcsn != ''">
|
||||
AND pcsn = #{pcsn}
|
||||
</if>
|
||||
AND st_ivt_structattr.stor_code = #{stor_code}
|
||||
<if test="vehicles != null and vehicles.size() > 0">
|
||||
AND st_ivt_structattr.vehicle_code in
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="login" :style="'background-image:url('+ Background +');'">
|
||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form">
|
||||
<h3 class="title">
|
||||
仓库综合管理平台
|
||||
恒森WMS系统
|
||||
</h3>
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
|
||||
|
||||
Reference in New Issue
Block a user