rev:手持单据出库;rev:SpelUtil针对车间的特殊处理

This commit is contained in:
zhangzq
2024-11-24 19:27:33 +08:00
parent 47a3436e7d
commit d81d30bd72
12 changed files with 215 additions and 10 deletions

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -106,6 +106,10 @@ public class PdaFormOutDtl {
* 批次号
*/
private String pcsn;
/**
* 车间字段
*/
private String product_area;
/**
* 载具
*/

View File

@@ -52,13 +52,17 @@ public class PdaFormOutMst implements Serializable {
* 单据类型
*/
private String form_type;
/**
* 出库仓库
*/
private String stor_code;
/**
* 业务单据状态
*/
private String status;
/**
* 业务单据状态
* 业务单据备注
*/
private String remark;

View File

@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -121,6 +121,10 @@ public class PmFormDataDto implements Serializable {
* 批次号
*/
private String pcsn;
/**
* 批次号
*/
private String product_area;
/**
* 载具
*/

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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="账号">