车间生产:
各工序增加物料到货情况和申请物料情况信息的显示
仓储:
成品出库记录完善,合并的物料可以查看明细
退库记录查看详情完善
退库审核完善
系统:
登录时增加nickname的保存,后续在保存createby时需要修改成保存nickname
master
xs 8 months ago
parent 5e64b1ff12
commit af1cdacce6

@ -68,6 +68,11 @@ public class LoginUser implements Serializable
*/
private Integer processFloor;
/**
*
*/
private String nickname;
public String getToken()
{
return token;
@ -173,4 +178,12 @@ public class LoginUser implements Serializable
public void setProcessFloor(Integer processFloor) {
this.processFloor = processFloor;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}

@ -310,4 +310,11 @@ public class MesConstants {
*/
public static final String MES_PURCHASE_APPALY_SYNC_YES="1";//已同步
public static final String MES_PURCHASE_APPALY_SYNC_NO="0";//未同步
/**生产告警信息类型*/
public static final String MES_ALARM_INFO_TYPE_STOCK_NOTENOUGH = "1";//库存报警
/**生产告警信息处理状态*/
public static final String MES_ALARM_INFO_HANDLE_STATUS_NO= "0";//未处理
public static final String MES_ALARM_INFO_HANDLE_STATUS_YES= "1";//已处理
}

@ -57,4 +57,9 @@ public class SecurityConstants
*
*/
public static final String DETAILS_PROCESS_FLOOR = "process_floor";
/**
*
*/
public static final String DETAILS_NICKNAME = "nickname";
}

@ -21,7 +21,7 @@ public class WmsConstants {
public static final String WMS_OPERATION_TYPE_MANUAL = "1";//人工
public static final String WMS_OPERATION_TYPE_FORCED = "2";//强制
public static final String MWS_OPERATION_TYPE_DISPATCHD = "3";//调度
public static final String MWS_OPERATION_TYPE_SPLIT = "4";//合并拆分
/*原材料入库记录入库类型*/
public static final String RAW_INSTOCK_INSTOCK_TYPE_PURCHASE = "1";//采购入库

@ -117,4 +117,14 @@ public class SecurityContextHolder
set(SecurityConstants.DETAILS_PROCESS_FLOOR, processFloor);
}
public static String getNickName()
{
return get(SecurityConstants.DETAILS_NICKNAME);
}
public static void setNickName(String nickname)
{
set(SecurityConstants.DETAILS_NICKNAME, nickname);
}
}

@ -143,4 +143,17 @@ public class JwtUtils
{
return getValue(claims, SecurityConstants.DETAILS_PROCESS_FLOOR);
}
/**
*
*
* @param claims
* @return
*/
public static String getNickName(Claims claims)
{
return getValue(claims, SecurityConstants.DETAILS_NICKNAME);
}
}

@ -33,6 +33,7 @@ public class HeaderInterceptor implements AsyncHandlerInterceptor
SecurityContextHolder.setUserKey(ServletUtils.getHeader(request, SecurityConstants.USER_KEY));
SecurityContextHolder.setProcessId(ServletUtils.getHeader(request, SecurityConstants.DETAILS_PROCESS_ID));
SecurityContextHolder.setProcessFloor(ServletUtils.getHeader(request, SecurityConstants.DETAILS_PROCESS_FLOOR));
SecurityContextHolder.setProcessFloor(ServletUtils.getHeader(request, SecurityConstants.DETAILS_NICKNAME));
String token = SecurityUtils.getToken();
if (StringUtils.isNotEmpty(token))

@ -50,6 +50,7 @@ public class TokenService
String token = IdUtils.fastUUID();
Long userId = loginUser.getSysUser().getUserId();
String userName = loginUser.getSysUser().getUserName();
String nickName = loginUser.getSysUser().getNickName();
loginUser.setToken(token);
loginUser.setUserid(userId);
loginUser.setUsername(userName);
@ -63,7 +64,7 @@ public class TokenService
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
claimsMap.put(SecurityConstants.DETAILS_PROCESS_ID, loginUser.getProcessId());
claimsMap.put(SecurityConstants.DETAILS_PROCESS_FLOOR, loginUser.getProcessFloor());
claimsMap.put(SecurityConstants.DETAILS_NICKNAME, nickName);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));

@ -56,6 +56,14 @@ public class SecurityUtils
return SecurityContextHolder.getProcessFloor();
}
/**
*
*/
public static String getNickname()
{
return SecurityContextHolder.getNickName();
}
/**
*
*/

@ -165,8 +165,8 @@ public class DmsBaseDeviceLedgerServiceImpl implements IDmsBaseDeviceLedgerServi
printContentJson.put("printContent", printInfoJsonArr.toString());
try {
// String hostIp = IpUtils.getIpAddr();
String hostIp="10.10.3.119";
String hostIp = IpUtils.getIpAddr();
// String hostIp="10.10.3.119";
String printKey = "print_" + hostIp;
redisTemplate.opsForList().rightPush(printKey, printContentJson.toString());
redisTemplate.expire(printKey,1, TimeUnit.DAYS);

@ -3,6 +3,8 @@ package com.hw.mes.controller;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.hw.mes.domain.MesStockAlarmDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -102,4 +104,17 @@ public class MesAlarmInfoController extends BaseController
{
return toAjax(mesAlarmInfoService.deleteMesAlarmInfoByAlarmInfoIds(alarmInfoIds));
}
/**
*
*/
@RequiresPermissions("mes:alarmInfo:list")
@GetMapping("/listStockAlarmDetail")
public TableDataInfo listStockAlarmDetail(MesStockAlarmDetail mesStockAlarmDetail)
{
startPage();
List<MesStockAlarmDetail> list = mesAlarmInfoService.selectMesStockAlarmDetailList(mesStockAlarmDetail);
return getDataTable(list);
}
}

@ -8,10 +8,7 @@ import com.hw.common.log.annotation.Log;
import com.hw.common.log.enums.BusinessType;
import com.hw.common.security.annotation.RequiresPermissions;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.api.domain.MesBaseStationInfo;
import com.hw.mes.api.domain.MesSaleOrderRelate;
import com.hw.mes.api.domain.*;
import com.hw.mes.domain.MesMaterialBom;
import com.hw.mes.domain.MesProductPlan;
import com.hw.mes.domain.MesProductPlanDetail;
@ -56,6 +53,9 @@ public class MesApiController extends BaseController {
@Autowired
private IMesSaleOrderService mesSaleOrderService;
@Autowired
private IMesPurchaseOrderService mesPurchaseOrderService;
/**
*
@ -400,4 +400,17 @@ public class MesApiController extends BaseController {
List<MesSaleOrderRelate> list = mesSaleOrderService.selectMesSaleOrderRelateJoinProductList(mesSaleOrderRelate);
return getDataTable(list);
}
/**
*
* @param mesPurchaseOrder
* @return
*/
@GetMapping("/selectBindPurchaseOrders")
public TableDataInfo selectBindPurchaseOrders(MesPurchaseOrder mesPurchaseOrder) {
startPage();
List<MesPurchaseOrder> list = mesPurchaseOrderService.selectBindPurchaseOrders(mesPurchaseOrder);
return getDataTable(list);
}
}

@ -173,4 +173,15 @@ public class MesBaseMaterialInfoController extends BaseController
return success(list);
}
/**
*
*
* @return
*/
@PostMapping(("/stockAlarm"))
public AjaxResult stockAlarm() {
return toAjax(mesBaseMaterialInfoService.stockAlarm());
}
}

@ -30,12 +30,12 @@ public class MesAlarmInfo extends BaseEntity
private String handleStatus;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date createDate;
/** 最后更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "最后更新时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date updateDate;

@ -0,0 +1,61 @@
package com.hw.mes.mapper;
import java.util.List;
import com.hw.mes.domain.MesStockAlarmDetail;
/**
* Mapper
*
* @author xins
* @date 2024-11-21
*/
public interface MesStockAlarmDetailMapper
{
/**
*
*
* @param stockAlarmDetailId
* @return
*/
public MesStockAlarmDetail selectMesStockAlarmDetailByStockAlarmDetailId(Long stockAlarmDetailId);
/**
*
*
* @param mesStockAlarmDetail
* @return
*/
public List<MesStockAlarmDetail> selectMesStockAlarmDetailList(MesStockAlarmDetail mesStockAlarmDetail);
/**
*
*
* @param mesStockAlarmDetail
* @return
*/
public int insertMesStockAlarmDetail(MesStockAlarmDetail mesStockAlarmDetail);
/**
*
*
* @param mesStockAlarmDetail
* @return
*/
public int updateMesStockAlarmDetail(MesStockAlarmDetail mesStockAlarmDetail);
/**
*
*
* @param stockAlarmDetailId
* @return
*/
public int deleteMesStockAlarmDetailByStockAlarmDetailId(Long stockAlarmDetailId);
/**
*
*
* @param stockAlarmDetailIds
* @return
*/
public int deleteMesStockAlarmDetailByStockAlarmDetailIds(Long[] stockAlarmDetailIds);
}

@ -2,6 +2,7 @@ package com.hw.mes.service;
import java.util.List;
import com.hw.mes.domain.MesAlarmInfo;
import com.hw.mes.domain.MesStockAlarmDetail;
/**
* Service
@ -58,4 +59,12 @@ public interface IMesAlarmInfoService
* @return
*/
public int deleteMesAlarmInfoByAlarmInfoId(Long alarmInfoId);
/**
*
*
* @param mesStockAlarmDetail
* @return
*/
public List<MesStockAlarmDetail> selectMesStockAlarmDetailList(MesStockAlarmDetail mesStockAlarmDetail);
}

@ -2,6 +2,7 @@ package com.hw.mes.service;
import java.util.List;
import com.hw.mes.api.domain.MesBaseMaterialInfo;
import org.springframework.transaction.annotation.Transactional;
/**
* Service
@ -87,4 +88,9 @@ public interface IMesBaseMaterialInfoService
* @return
*/
public MesBaseMaterialInfo selectMesBaseMaterialInfoByErpId(Long erpId);
/**
*
*/
public int stockAlarm();
}

@ -166,4 +166,12 @@ public interface IMesPurchaseOrderService
* @return
*/
public MesPurchaseOrder selectMesPurchaseOrderJoinMaterialByPurchaseOrderId(Long purchaseOrderId);
/**
* join material
*
* @param mesPurchaseOrder
* @return
*/
public List<MesPurchaseOrder> selectBindPurchaseOrders(MesPurchaseOrder mesPurchaseOrder);
}

@ -1,6 +1,8 @@
package com.hw.mes.service.impl;
import java.util.List;
import com.hw.mes.mapper.MesStockAlarmDetailMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@ -23,6 +25,9 @@ public class MesAlarmInfoServiceImpl implements IMesAlarmInfoService
@Autowired
private MesAlarmInfoMapper mesAlarmInfoMapper;
@Autowired
private MesStockAlarmDetailMapper mesStockAlarmDetailMapper;
/**
*
*
@ -128,4 +133,18 @@ public class MesAlarmInfoServiceImpl implements IMesAlarmInfoService
}
}
}
/**
*
*
* @param mesStockAlarmDetail
* @return
*/
@Override
public List<MesStockAlarmDetail> selectMesStockAlarmDetailList(MesStockAlarmDetail mesStockAlarmDetail)
{
return mesStockAlarmDetailMapper.selectMesStockAlarmDetailList(mesStockAlarmDetail);
}
}

@ -1,10 +1,15 @@
package com.hw.mes.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.alibaba.fastjson2.JSONObject;
import com.github.pagehelper.PageHelper;
import com.hw.common.core.constant.MesConstants;
import com.hw.common.core.constant.SecurityConstants;
import com.hw.common.core.constant.SystemConstants;
import com.hw.common.core.exception.ServiceException;
import com.hw.common.core.utils.DateUtils;
import com.hw.common.core.utils.StringUtils;
@ -13,8 +18,14 @@ import com.hw.common.core.utils.uuid.Seq;
import com.hw.common.core.web.page.PageDomain;
import com.hw.common.core.web.page.TableSupport;
import com.hw.common.security.utils.SecurityUtils;
import com.hw.mes.api.RemoteMesService;
import com.hw.mes.domain.MesAlarmInfo;
import com.hw.mes.domain.MesStockAlarmDetail;
import com.hw.mes.mapper.MesAlarmInfoMapper;
import com.hw.mes.mapper.MesBaseBarcodeInfoMapper;
import com.hw.mes.mapper.MesOrderBindMapper;
import com.hw.system.api.RemoteSysCommonService;
import com.hw.system.api.domain.common.SysPointRouter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hw.mes.mapper.MesBaseMaterialInfoMapper;
@ -22,6 +33,8 @@ import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.service.IMesBaseMaterialInfoService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* Service
*
@ -39,6 +52,12 @@ public class MesBaseMaterialInfoServiceImpl implements IMesBaseMaterialInfoServi
@Autowired
private MesOrderBindMapper mesOrderBindMapper;
@Autowired
private MesAlarmInfoMapper mesAlarmInfoMapper;
@Resource
private RemoteSysCommonService remoteSysCommonService;
/**
*
*
@ -180,36 +199,89 @@ public class MesBaseMaterialInfoServiceImpl implements IMesBaseMaterialInfoServi
}
/**
*
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void stockAlarm(){
public int stockAlarm() {
String nickName = "auto";
Date currentDate = new Date();
MesAlarmInfo mesAlarmInfo = new MesAlarmInfo();
mesAlarmInfo.setAlarmInfoType(MesConstants.MES_BARCODE_TYPE_RAW);
mesAlarmInfo.setHandleStatus(MesConstants.MES_ALARM_INFO_HANDLE_STATUS_NO);
mesAlarmInfo.setCreateDate(currentDate);
mesAlarmInfo.setCreateBy(nickName);
mesAlarmInfoMapper.insertMesAlarmInfo(mesAlarmInfo);
//return list
stockAlarm(1);
Long alarmInfoId = mesAlarmInfo.getAlarmInfoId();
List<MesStockAlarmDetail> allStockAlarmDetailList = new ArrayList<>();
stockAlarm(allStockAlarmDetailList, alarmInfoId, 1, nickName, currentDate);
if (allStockAlarmDetailList.size() <= 0) {
throw new ServiceException("无报警信息");
} else {
List<SysPointRouter> sysPointRouterList = new ArrayList<>();
SysPointRouter sysPointRouter = getSysPointRouter(alarmInfoId, nickName, currentDate);
sysPointRouterList.add(sysPointRouter);
remoteSysCommonService.insertSysPointRouterPort(sysPointRouterList, SecurityConstants.INNER);
}
return 1;
}
public void stockAlarm(Integer startRow){
private static SysPointRouter getSysPointRouter(Long alarmInfoId, String nickName, Date currentDate) {
SysPointRouter sysPointRouter = new SysPointRouter();
sysPointRouter.setModuleCode("MES");
sysPointRouter.setPointType(SystemConstants.SYS_ROUTER_POINT_TYPE_ALARM);
sysPointRouter.setRouterAddress("/mes/info/alarmInfo");
JSONObject routerAddressDetailJson = new JSONObject();
routerAddressDetailJson.put("alarmInfoId", alarmInfoId);
sysPointRouter.setRouterAddressDetail(routerAddressDetailJson.toString());
sysPointRouter.setRemark("库存不足报警");
sysPointRouter.setCreateBy(nickName);
sysPointRouter.setCreateTime(currentDate);
return sysPointRouter;
}
public void stockAlarm(List<MesStockAlarmDetail> stockAlarmDetailList, Long alarmInfoId, Integer startRow, String nickName, Date currentDate) {
List<MesStockAlarmDetail> allStockAlarmDetailList = new ArrayList<>();
MesBaseMaterialInfo queryMaterialInfo = new MesBaseMaterialInfo();
Integer pageSize = 100;
Integer pageNum = startRow/pageSize+1;
PageHelper.startPage(1, 100, "");
Integer pageNum = startRow / pageSize + 1;
PageHelper.startPage(pageNum, 100, "");
List<MesBaseMaterialInfo> mesBaseMaterialInfoList = mesBaseMaterialInfoMapper.selectMaterialInfoStockInfos(queryMaterialInfo);
for(MesBaseMaterialInfo mesBaseMaterialInfo:mesBaseMaterialInfoList){
for (MesBaseMaterialInfo mesBaseMaterialInfo : mesBaseMaterialInfoList) {
BigDecimal safeStockAmount = mesBaseMaterialInfo.getSafeStockAmount();
if(safeStockAmount!=null){
BigDecimal stockAmount = mesBaseMaterialInfo.getStockAmount()==null?BigDecimal.ZERO:mesBaseMaterialInfo.getStockAmount();
if (safeStockAmount != null) {
BigDecimal stockAmount = mesBaseMaterialInfo.getStockAmount() == null ? BigDecimal.ZERO : mesBaseMaterialInfo.getStockAmount();
//如果库存数量小于安全库存
if(stockAmount.compareTo(safeStockAmount)<1){
if (stockAmount.compareTo(safeStockAmount) < 1) {
MesStockAlarmDetail mesStockAlarmDetail = new MesStockAlarmDetail();
mesStockAlarmDetail.setAlarmInfoId(alarmInfoId);
mesStockAlarmDetail.setMaterialId(mesBaseMaterialInfo.getMaterialId());
mesStockAlarmDetail.setMaterialCode(mesBaseMaterialInfo.getMaterialCode());
mesStockAlarmDetail.setMaterialName(mesBaseMaterialInfo.getMaterialName());
mesStockAlarmDetail.setMaterialSpec(mesBaseMaterialInfo.getMaterialSpec());
mesStockAlarmDetail.setSafeStockAmount(mesBaseMaterialInfo.getSafeStockAmount());
mesStockAlarmDetail.setStockAmount(mesBaseMaterialInfo.getStockAmount());
mesStockAlarmDetail.setCreateDate(currentDate);
mesStockAlarmDetail.setCreateBy(nickName);
stockAlarmDetailList.add(mesStockAlarmDetail);
allStockAlarmDetailList.add(mesStockAlarmDetail);
}
}
}
if (stockAlarmDetailList != null && !stockAlarmDetailList.isEmpty()) {
mesAlarmInfoMapper.batchMesStockAlarmDetail(stockAlarmDetailList);
}
//如果返回的数组的数量等于分页数量,则继续获取下一页数据
if (mesBaseMaterialInfoList.size() == pageSize) {
//通过递归同步所有供应商,测试先不用
stockAlarm(startRow + mesBaseMaterialInfoList.size());
stockAlarm(allStockAlarmDetailList, alarmInfoId, startRow + mesBaseMaterialInfoList.size(), nickName, currentDate);
}
}
}

@ -597,4 +597,18 @@ public class MesPurchaseOrderServiceImpl implements IMesPurchaseOrderService {
public MesPurchaseOrder selectMesPurchaseOrderJoinMaterialByPurchaseOrderId(Long purchaseOrderId) {
return mesPurchaseOrderMapper.selectMesPurchaseOrderJoinMaterialByPurchaseOrderId(purchaseOrderId);
}
/**
* join material
*
* @param mesPurchaseOrder
* @return
*/
@Override
public List<MesPurchaseOrder> selectBindPurchaseOrders(MesPurchaseOrder mesPurchaseOrder) {
mesPurchaseOrder.setBindFlag("1");
return mesPurchaseOrderMapper.selectMesPurchaseOrderJoinList(mesPurchaseOrder);
}
}

@ -287,6 +287,8 @@ public class MesSaleOrderServiceImpl implements IMesSaleOrderService {
public int updateMesSaleOrderMaterials(List<MesSaleOrderMaterial> mesSaleOrderMaterialList) {
List<MesSaleOrderMaterial> toInsertedMesSaleOrderMaterialList = new ArrayList<>();
// List<MesSaleOrderMaterial> toUpdatedMesSaleOrderMateriaList = new ArrayList<>();
Date currentDate = new Date();
String nickName = SecurityUtils.getLoginUser().getNickname();
for (MesSaleOrderMaterial mesSaleOrderMaterial : mesSaleOrderMaterialList) {
if (mesSaleOrderMaterial.getUsedAmount() != null && mesSaleOrderMaterial.getUsedAmount().compareTo(BigDecimal.ZERO) > 0) {
BigDecimal realOutstockAmount = mesSaleOrderMaterial.getRealOutstockAmount();
@ -304,10 +306,13 @@ public class MesSaleOrderServiceImpl implements IMesSaleOrderService {
if (mesSaleOrderMaterial.getSaleOrderMaterialId() != null) {
// toUpdatedMesSaleOrderMateriaList.add(mesSaleOrderMaterial);
mesSaleOrderMaterial.setUpdateBy(nickName);
mesSaleOrderMaterial.setUpdateTime(currentDate);
mesSaleOrderMaterialMapper.updateMesSaleOrderMaterial(mesSaleOrderMaterial);
} else {
mesSaleOrderMaterial.setCreateTime(currentDate);
mesSaleOrderMaterial.setCreateBy(nickName);
toInsertedMesSaleOrderMaterialList.add(mesSaleOrderMaterial);
}
}

@ -45,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createDate != null "> and create_date = #{createDate}</if>
<if test="updateDate != null "> and update_date = #{updateDate}</if>
</where>
order by alarm_info_id desc
</select>
<select id="selectMesAlarmInfoByAlarmInfoId" parameterType="Long" resultMap="MesAlarmInfoMesStockAlarmDetailResult">

@ -45,10 +45,6 @@
<result property="warehouseId" column="warehouse_id"/>
<result property="purchasePriceUnitId" column="purchase_price_unit_id"/>
<result property="stockAmount" column="stock_amount"/>
<result property="realOutstockAmount" column="real_outstock_amount"/>
<result property="totalUsedAmount" column="total_used_amount"/>
<result property="ussedAmount" column="used_amount"/>
<result property="saleOrderMaterialId" column="sale_order_material_id"/>
</resultMap>
<sql id="selectMesBaseMaterialInfoVo">
@ -390,7 +386,7 @@
mbmi.material_name,
mbmi.material_spec,
mbmi.safe_stock_amount,
(select sum(total_amount) from wms_stock_total wst where wst.material_id=mbmi.material_id) as stock_amount
(select ifnull(sum(total_amount),0) from wms_stock_total wst where wst.material_id=mbmi.material_id) as stock_amount
from mes_base_material_info mbmi
<where>
<if test="erpId != null ">and erp_id = #{erpId}</if>

@ -439,6 +439,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="srcBillNo != null and srcBillNo != ''"> and mpo.src_bill_no like concat('%', #{srcBillNo}, '%')</if>
<if test="tondBase != null and tondBase != ''"> and mpo.tond_base like concat('%', #{tondBase}, '%')</if>
<if test="bindFlag != null and bindFlag != ''"> and exists (select 1 from mes_order_bind mob where mob.purchase_order_id=mpo.purchase_order_id and mob.sale_order_id=#{saleOrderId})</if>
</where>
order by mpo.erp_modify_date desc
</select>

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hw.mes.mapper.MesStockAlarmDetailMapper">
<resultMap type="MesStockAlarmDetail" id="MesStockAlarmDetailResult">
<result property="stockAlarmDetailId" column="stock_alarm_detail_id" />
<result property="alarmInfoId" column="alarm_info_id" />
<result property="materialId" column="material_id" />
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
<result property="materialSpec" column="material_spec" />
<result property="safeStockAmount" column="safe_stock_amount" />
<result property="stockAmount" column="stock_amount" />
<result property="createBy" column="create_by" />
<result property="createDate" column="create_date" />
<result property="updateBy" column="update_by" />
<result property="updateDate" column="update_date" />
</resultMap>
<sql id="selectMesStockAlarmDetailVo">
select stock_alarm_detail_id, alarm_info_id, material_id, material_code, material_name, material_spec, safe_stock_amount, stock_amount, create_by, create_date, update_by, update_date from mes_stock_alarm_detail
</sql>
<select id="selectMesStockAlarmDetailList" parameterType="MesStockAlarmDetail" resultMap="MesStockAlarmDetailResult">
<include refid="selectMesStockAlarmDetailVo"/>
<where>
<if test="alarmInfoId != null "> and alarm_info_id = #{alarmInfoId}</if>
<if test="materialId != null "> and material_id = #{materialId}</if>
<if test="materialCode != null and materialCode != ''"> and material_code = #{materialCode}</if>
<if test="materialName != null and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
<if test="materialSpec != null and materialSpec != ''"> and material_spec = #{materialSpec}</if>
<if test="safeStockAmount != null "> and safe_stock_amount = #{safeStockAmount}</if>
<if test="stockAmount != null "> and stock_amount = #{stockAmount}</if>
<if test="createDate != null "> and create_date = #{createDate}</if>
<if test="updateDate != null "> and update_date = #{updateDate}</if>
</where>
</select>
<select id="selectMesStockAlarmDetailByStockAlarmDetailId" parameterType="Long" resultMap="MesStockAlarmDetailResult">
<include refid="selectMesStockAlarmDetailVo"/>
where stock_alarm_detail_id = #{stockAlarmDetailId}
</select>
<insert id="insertMesStockAlarmDetail" parameterType="MesStockAlarmDetail" useGeneratedKeys="true" keyProperty="stockAlarmDetailId">
insert into mes_stock_alarm_detail
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="alarmInfoId != null">alarm_info_id,</if>
<if test="materialId != null">material_id,</if>
<if test="materialCode != null">material_code,</if>
<if test="materialName != null">material_name,</if>
<if test="materialSpec != null">material_spec,</if>
<if test="safeStockAmount != null">safe_stock_amount,</if>
<if test="stockAmount != null">stock_amount,</if>
<if test="createBy != null">create_by,</if>
<if test="createDate != null">create_date,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateDate != null">update_date,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="alarmInfoId != null">#{alarmInfoId},</if>
<if test="materialId != null">#{materialId},</if>
<if test="materialCode != null">#{materialCode},</if>
<if test="materialName != null">#{materialName},</if>
<if test="materialSpec != null">#{materialSpec},</if>
<if test="safeStockAmount != null">#{safeStockAmount},</if>
<if test="stockAmount != null">#{stockAmount},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createDate != null">#{createDate},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateDate != null">#{updateDate},</if>
</trim>
</insert>
<update id="updateMesStockAlarmDetail" parameterType="MesStockAlarmDetail">
update mes_stock_alarm_detail
<trim prefix="SET" suffixOverrides=",">
<if test="alarmInfoId != null">alarm_info_id = #{alarmInfoId},</if>
<if test="materialId != null">material_id = #{materialId},</if>
<if test="materialCode != null">material_code = #{materialCode},</if>
<if test="materialName != null">material_name = #{materialName},</if>
<if test="materialSpec != null">material_spec = #{materialSpec},</if>
<if test="safeStockAmount != null">safe_stock_amount = #{safeStockAmount},</if>
<if test="stockAmount != null">stock_amount = #{stockAmount},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createDate != null">create_date = #{createDate},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateDate != null">update_date = #{updateDate},</if>
</trim>
where stock_alarm_detail_id = #{stockAlarmDetailId}
</update>
<delete id="deleteMesStockAlarmDetailByStockAlarmDetailId" parameterType="Long">
delete from mes_stock_alarm_detail where stock_alarm_detail_id = #{stockAlarmDetailId}
</delete>
<delete id="deleteMesStockAlarmDetailByStockAlarmDetailIds" parameterType="String">
delete from mes_stock_alarm_detail where stock_alarm_detail_id in
<foreach item="stockAlarmDetailId" collection="array" open="(" separator="," close=")">
#{stockAlarmDetailId}
</foreach>
</delete>
</mapper>

@ -3,6 +3,7 @@ package com.hw.system.common.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.hw.common.security.annotation.InnerAuth;
import com.hw.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -104,9 +105,12 @@ public class SysPointRouterController extends BaseController {
* @param sysPointRouterList
* @return
*/
@InnerAuth
@Log(title = "提示路由信息", businessType = BusinessType.INSERT)
@PostMapping("/insertPointRouterInfo")
public AjaxResult insertPointRouterInfo(@RequestBody List<SysPointRouter> sysPointRouterList) {
return toAjax(sysPointRouterService.insertSysPointRouterList(sysPointRouterList));
}
}

@ -300,4 +300,14 @@ public class WmsApiController extends BaseController {
return success(wmsTransferService.checkSemiOutstock(wmsTransfer));
}
/**
*
*/
@GetMapping("/getRawOutstocks")
public TableDataInfo getRawOutstocks(WmsRawOutstock wmsRawOutstock) {
startPage();
List<WmsRawOutstock> list = wmsRawOutstockService.selectWmsRawOutstockJoinMaterialList(wmsRawOutstock);
return getDataTable(list);
}
}

@ -450,7 +450,7 @@ public class WmsMobileController extends BaseController {
@GetMapping(value = "/getMoveList")
public TableDataInfo getMoveList(WmsMove wmsMove) {
startPage();
wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL);
// wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL);
wmsMove.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH);
List<WmsMove> wmsMoves = wmsMoveService.selectWmsMoveJoinList(wmsMove);
return getDataTable(wmsMoves);

@ -4,6 +4,7 @@ import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.hw.common.core.constant.WmsConstants;
import com.hw.common.security.annotation.InnerAuth;
import com.hw.wms.api.domain.vo.WmsProductStockVo;
import com.hw.wms.domain.vo.WmsProductOutstockAuditVo;
@ -48,6 +49,8 @@ public class WmsProductOutstockController extends BaseController
public TableDataInfo list(WmsProductOutstock wmsProductOutstock)
{
startPage();
wmsProductOutstock.setOperationTypeStr(WmsConstants.WMS_OPERATION_TYPE_AUTO+","+WmsConstants.WMS_OPERATION_TYPE_MANUAL+","
+WmsConstants.WMS_OPERATION_TYPE_FORCED+","+WmsConstants.MWS_OPERATION_TYPE_DISPATCHD);
List<WmsProductOutstock> list = wmsProductOutstockService.selectWmsProductOutstockJoinList(wmsProductOutstock);
return getDataTable(list);
}

@ -76,7 +76,7 @@ public class WmsRawReturnController extends BaseController
@GetMapping(value = "/{rawReturnId}")
public AjaxResult getInfo(@PathVariable("rawReturnId") Long rawReturnId)
{
return success(wmsRawReturnService.selectWmsRawReturnByRawReturnId(rawReturnId));
return success(wmsRawReturnService.selectWmsRawReturnJoinMaterialByRawReturnId(rawReturnId));
}
@ -101,8 +101,8 @@ public class WmsRawReturnController extends BaseController
public TableDataInfo auditList(WmsRawReturn wmsRawReturn)
{
startPage();
// List<WmsRawReturn> list = wmsRawReturnService.selectWmsRawReturnJoinList(wmsRawReturn); //旧版不group by
List<WmsRawReturn> list = wmsRawReturnService.selectWmsAuditList(wmsRawReturn);
List<WmsRawReturn> list = wmsRawReturnService.selectWmsRawReturnJoinList(wmsRawReturn); //旧版不group by
// List<WmsRawReturn> list = wmsRawReturnService.selectWmsAuditList(wmsRawReturn);
return getDataTable(list);
}

@ -163,6 +163,9 @@ public class WmsProductOutstock extends BaseEntity {
private String executeIncompleteFlag;//执行未完成标识
private String operationTypeStr;
private String materialClassfication;
/**
*
@ -489,6 +492,22 @@ public class WmsProductOutstock extends BaseEntity {
this.executeIncompleteFlag = executeIncompleteFlag;
}
public String getOperationTypeStr() {
return operationTypeStr;
}
public void setOperationTypeStr(String operationTypeStr) {
this.operationTypeStr = operationTypeStr;
}
public String getMaterialClassfication() {
return materialClassfication;
}
public void setMaterialClassfication(String materialClassfication) {
this.materialClassfication = materialClassfication;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

@ -101,6 +101,9 @@ public class WmsRawOutstock extends BaseEntity {
@Excel(name = "已出库数量")
private BigDecimal realOutstockAmount;
/**已分摊使用的数量*/
private BigDecimal usedAmount;
/** 出库目的地 */
@Excel(name = "出库目的地")
private String endStationCode;
@ -205,6 +208,8 @@ public class WmsRawOutstock extends BaseEntity {
private String materialName;
private String materialSpec;
private BigDecimal planAmount;
/**
@ -384,6 +389,14 @@ public class WmsRawOutstock extends BaseEntity {
this.realOutstockAmount = realOutstockAmount;
}
public BigDecimal getUsedAmount() {
return usedAmount;
}
public void setUsedAmount(BigDecimal usedAmount) {
this.usedAmount = usedAmount;
}
public String getEndStationCode() {
return endStationCode;
}
@ -552,6 +565,14 @@ public class WmsRawOutstock extends BaseEntity {
this.materialName = materialName;
}
public String getMaterialSpec() {
return materialSpec;
}
public void setMaterialSpec(String materialSpec) {
this.materialSpec = materialSpec;
}
public BigDecimal getPlanAmount() {
return planAmount;
}

@ -93,7 +93,7 @@ public class WmsRawReturn extends BaseEntity
private String applyBy;
/** 申请时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date applyDate;
@ -102,7 +102,7 @@ public class WmsRawReturn extends BaseEntity
private String auditBy;
/** 审核时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date auditDate;

@ -62,6 +62,8 @@ public class WmsRawReturnDetail extends BaseEntity
@Excel(name = "同步ERP状态(0:失败,1成功)")
private String erpStatus;
private BigDecimal erpAmount;
/** 退库人 */
@Excel(name = "退库人")
private String returnPerson;
@ -101,6 +103,8 @@ public class WmsRawReturnDetail extends BaseEntity
private String materialName;
private String materialSpec;
private String applyBy;
private String taskType;
@ -198,6 +202,15 @@ public class WmsRawReturnDetail extends BaseEntity
{
return executeStatus;
}
public BigDecimal getErpAmount() {
return erpAmount;
}
public void setErpAmount(BigDecimal erpAmount) {
this.erpAmount = erpAmount;
}
public void setErpStatus(String erpStatus)
{
this.erpStatus = erpStatus;
@ -296,6 +309,14 @@ public class WmsRawReturnDetail extends BaseEntity
this.materialName = materialName;
}
public String getMaterialSpec() {
return materialSpec;
}
public void setMaterialSpec(String materialSpec) {
this.materialSpec = materialSpec;
}
public String getApplyBy() {
return applyBy;
}

@ -1,6 +1,7 @@
package com.hw.wms.mapper;
import java.util.List;
import com.hw.wms.domain.WmsRawReturnDetail;
/**
@ -9,8 +10,7 @@ import com.hw.wms.domain.WmsRawReturnDetail;
* @author xins
* @date 2023-12-22
*/
public interface WmsRawReturnDetailMapper
{
public interface WmsRawReturnDetailMapper {
/**
* 退
*
@ -60,8 +60,6 @@ public interface WmsRawReturnDetailMapper
public int deleteWmsRawReturnDetailByRawReturnDetailIds(Long[] rawReturnDetailIds);
/**
* 退(使)
*
@ -71,4 +69,11 @@ public interface WmsRawReturnDetailMapper
public List<WmsRawReturnDetail> selectAuditPassRawReturnDetails(WmsRawReturnDetail wmsRawReturnDetail);
/**
* 退,join material
*
* @param wmsRawReturnDetail 退
* @return 退
*/
public List<WmsRawReturnDetail> selectWmsRawReturnDetailJoinMaterialList(WmsRawReturnDetail wmsRawReturnDetail);
}

@ -127,4 +127,13 @@ public interface WmsRawReturnMapper
* @return 退VO
*/
List<WmsRawReturn> selectGetRawReturnByTaskCode(WmsRawReturn queryRawReturn);
/**
* 退,join material
*
* @param rawReturnId 退
* @return 退
*/
public WmsRawReturn selectWmsRawReturnJoinMaterialByRawReturnId(Long rawReturnId);
}

@ -162,5 +162,12 @@ public interface IWmsRawOutstockService
* @return
*/
public int returnOutstock(WmsReturnOutstockVo wmsReturnOutstockVo);
/**
* join materialwarehouse
* @param wmsRawOutstock
* @return
*/
public List<WmsRawOutstock> selectWmsRawOutstockJoinMaterialList(WmsRawOutstock wmsRawOutstock);
}

@ -136,4 +136,12 @@ public interface IWmsRawReturnService
* @return 退
*/
List<WmsRawReturn> selectWmsAuditList(WmsRawReturn wmsRawReturn);
/**
* 退join material
*
* @param rawReturnId 退
* @return 退
*/
public WmsRawReturn selectWmsRawReturnJoinMaterialByRawReturnId(Long rawReturnId);
}

@ -186,7 +186,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
selectWmsBaseWarehouseByWarehouseId(oriLocation.getWarehouseId());
String warehouseType = baseWareHouse.getWarehouseType();
Date currentDate = new Date();
String userName = SecurityUtils.getUsername();
String userName = SecurityUtils.getLoginUser().getNickname();
String warehouseInstockType = baseWareHouse.getWarehouseInstockType();
String moveWay = "", operationType = "";
BigDecimal planAmount = null;
@ -487,7 +487,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
R<MesBaseBarcodeInfo> baseBarcodeInfoR = remoteMesService.getBarcode(materialBarcode, SecurityConstants.INNER);
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR.getData();
if (baseBarcodeInfo == null) {
throw new ServiceException("物料码有误");
throw new ServiceException("物料码有误");
}
String batchFlag = baseBarcodeInfo.getBatchFlag();
@ -502,7 +502,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
throw new ServiceException("库位编码有误");
}
String userName = SecurityUtils.getUsername();
String userName = SecurityUtils.getLoginUser().getNickname();
Date currentDate = new Date();
@ -515,6 +515,10 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
throw new ServiceException("没有此移库信息");
}
if(!wmsMove.getOperationType().equals(WmsConstants.WMS_OPERATION_TYPE_MANUAL)){
throw new ServiceException("只能针对仓库类型为普通仓库的进行移库");
}
String executeStatus = wmsMove.getExecuteStatus();
if (executeStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH)) {
@ -777,10 +781,9 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
throw new ServiceException("库位编码有误");
}
String userName = SecurityUtils.getUsername();
String userName = SecurityUtils.getLoginUser().getNickname();
Date currentDate = new Date();
WmsMove wmsMove = wmsMoveMapper.selectWmsMoveByTaskCode(taskCode);
if (wmsMove == null) {
throw new ServiceException("没有此移库信息");
@ -790,6 +793,10 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
throw new ServiceException("没有此移库信息");
}
if(!wmsMove.getOperationType().equals(WmsConstants.WMS_OPERATION_TYPE_MANUAL)){
throw new ServiceException("只能针对仓库类型为普通仓库的进行移库");
}
String executeStatus = wmsMove.getExecuteStatus();
if (executeStatus.equals(WmsConstants.WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH)) {
throw new ServiceException("此条码已移库入库完成,不能再入库");

@ -1435,4 +1435,15 @@ public class WmsRawOutstockServiceImpl implements IWmsRawOutstockService {
return wmsRawOutstockMapper.insertWmsRawOutstock(wmsRawOutstock);
}
/**
* join materialwarehouse
* @param wmsRawOutstock
* @return
*/
@Override
public List<WmsRawOutstock> selectWmsRawOutstockJoinMaterialList(WmsRawOutstock wmsRawOutstock){
return wmsRawOutstockMapper.selectWmsRawOutstockJoinMaterialList(wmsRawOutstock);
}
}

@ -254,10 +254,11 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService {
throw new ServiceException("请输入审核意见");
}
WmsRawReturn wmsRawReturn = wmsRawReturnMapper.selectOnlyWmsRawReturnByRawReturnId(wmsRawReturnAuditVo.getRawReturnId());
WmsRawReturn wmsRawReturn = new WmsRawReturn();
wmsRawReturn.setRawReturnId(wmsRawReturnAuditVo.getRawReturnId());
wmsRawReturn.setAuditStatus(auditStatus);
wmsRawReturn.setAuditReason(auditReason);
wmsRawReturn.setAuditBy(SecurityUtils.getUsername());
wmsRawReturn.setAuditBy(SecurityUtils.getLoginUser().getNickname());
wmsRawReturn.setAuditDate(new Date());
return wmsRawReturnMapper.updateWmsRawReturn(wmsRawReturn);
}
@ -683,4 +684,20 @@ public class WmsRawReturnServiceImpl implements IWmsRawReturnService {
return wmsRawReturnAuditReturnVo;
}
/**
* 退join material
*
* @param rawReturnId 退
* @return 退
*/
@Override
public WmsRawReturn selectWmsRawReturnJoinMaterialByRawReturnId(Long rawReturnId) {
WmsRawReturn wmsRawReturn = wmsRawReturnMapper.selectOnlyWmsRawReturnByRawReturnId(rawReturnId);
WmsRawReturnDetail queryRawReturnDetail = new WmsRawReturnDetail();
queryRawReturnDetail.setRawReturnId(rawReturnId);
List<WmsRawReturnDetail> wmsRawReturnDetailList = wmsRawReturnDetailMapper.selectWmsRawReturnDetailJoinMaterialList(queryRawReturnDetail);
wmsRawReturn.setWmsRawReturnDetailList(wmsRawReturnDetailList);
return wmsRawReturn;
}
}

@ -226,6 +226,10 @@ public class WmsTransferServiceImpl implements IWmsTransferService {
throw new ServiceException("库位不存在");
}
if(!oriLocation.getLocationStatus().equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)){
throw new ServiceException("库位状态为" + WmsConstants.LOCATION_STATUS_PROMPT_MAP.get(oriLocation.getLocationStatus())+",不能出库");
}
WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(oriLocation.getWarehouseId());
if(!baseWarehouse.getWarehouseInstockType().equals(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_SEMI)){
throw new ServiceException("请从半成品库出库");
@ -313,6 +317,10 @@ public class WmsTransferServiceImpl implements IWmsTransferService {
throw new ServiceException("库位不存在");
}
if(!targetLocation.getLocationStatus().equals(WmsConstants.WMS_BASE_LOCATION_STATUS_NORMAL)){
throw new ServiceException("库位状态为" + WmsConstants.LOCATION_STATUS_PROMPT_MAP.get(targetLocation.getLocationStatus())+",不能入库");
}
WmsBaseWarehouse baseWarehouse = wmsBaseWarehouseMapper.selectWmsBaseWarehouseByWarehouseId(targetLocation.getWarehouseId());
if(!baseWarehouse.getWarehouseInstockType().equals(WmsConstants.WMS_WAREHOUSE_INSTOCK_TYPE_PRODUCT)){
throw new ServiceException("请入成品库");

@ -45,6 +45,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="specificationParameter" column="specification_parameter" />
<result property="unitCode" column="unit_code" />
<result property="price" column="price" />
<result property="materialClassfication" column="material_classfication" />
</resultMap>
<resultMap id="WmsProductOutstockWmsProductOutstockDetailResult" type="WmsProductOutstock" extends="WmsProductOutstockResult">
@ -254,7 +256,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectWmsProductOutstockJoinList" parameterType="WmsProductOutstock" resultMap="WmsProductOutstockResult">
select wpo.product_outstock_id, wpo.task_code, wpo.warehouse_id, wpo.location_code, wpo.product_type,wpo.operation_type, wpo.outstock_type,
wpo.plan_code, wpo.plan_detail_code,wpo.saleorder_code, wpo.product_id,wpo.apply_qty,wpo.outstock_qty,wpo.apply_reason, wpo.audit_status,wpo.execute_status,wpo.apply_by, wpo.apply_date,wpo.audit_by, wpo.audit_date,wpo.erp_status,wpo.erp_amount,wpo.begin_time,wpo.end_time,
wbw.warehouse_name,mbmi.material_code,mbmi.material_name,mbmi.material_spec
wbw.warehouse_name,mbmi.material_code,mbmi.material_name,mbmi.material_spec,mbmi.material_classfication
from wms_product_outstock wpo left join wms_base_warehouse wbw on wpo.warehouse_id =wbw.warehouse_id
left join mes_base_material_info mbmi on wpo.product_id = mbmi.material_id
<where>
@ -282,6 +284,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialName != null and materialName != ''"> and mbmi.material_name like concat('%', #{materialName}, '%')</if>
<if test="materialSpec != null and materialSpec != ''">and replace(mbmi.material_spec,' ','') like concat('%', #{materialSpec},
'%')</if>
<if test="operationTypeStr != null and operationTypeStr != ''"> and wpo.operation_type in (${operationTypeStr})</if>
</where>
order by wpo.apply_date desc
</select>

@ -42,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="warehouseName" column="warehouse_name" />
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
<result property="materialSpec" column="material_spec" />
<result property="planAmount" column="plan_amount" />
<result property="instockBatch" column="instock_batch" />
<result property="rawOutstockDetailId" column="raw_outstock_detail_id" />
@ -300,7 +301,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select wro.raw_outstock_id as raw_outstock_detail_id, wro.task_code,wro.location_code,wro.material_batch as instock_batch,wro.outstock_amount as plan_amount,wro.real_outstock_amount as outstock_amount,
wro.apply_by,wro.apply_date,wro.apply_reason,wro.audit_by,wro.audit_date,wro.audit_reason,wro.plan_code,wro.plan_detail_code,wro.audit_status,wro.task_type,
wro.execute_status,wro.erp_status,wro.erp_amount,
mbmi.material_code,mbmi.material_name,
mbmi.material_code,mbmi.material_name,mbmi.material_spec,
mbr.warehouse_name
from wms_raw_outstock wro left join mes_base_material_info mbmi on wro.material_id = mbmi.material_id
left join wms_base_warehouse mbr on wro.warehouse_id = mbr.warehouse_id
@ -310,6 +311,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="applyBy != null and applyBy != ''"> and wro.apply_by like concat('%', #{applyBy}, '%')</if>
<if test="executeStatusStr != null and executeStatusStr != ''"> and execute_status in (${executeStatusStr})</if>
<if test="operationType != null and operationType != ''"> and operation_type = #{operationType}</if>
<if test="planDetailCode != null and planDetailCode != ''"> and plan_detail_code = #{planDetailCode}</if>
</where>
order by wro.raw_outstock_id desc
</select>

@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="returnAmount" column="return_amount" />
<result property="executeStatus" column="execute_status" />
<result property="erpStatus" column="erp_status" />
<result property="erpAmount" column="erp_amount" />
<result property="returnPerson" column="return_person" />
<result property="returnTime" column="return_time" />
<result property="returnWay" column="return_way" />
@ -26,6 +27,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" />
<result property="updateDate" column="update_date" />
<result property="stackAmount" column="stack_amount" />
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
<result property="materialSpec" column="material_spec" />
</resultMap>
<sql id="selectWmsRawReturnDetailVo">
@ -165,4 +169,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectWmsRawReturnDetailJoinMaterialVo">
select wrrd.raw_return_detail_id, wrrd.raw_return_id, wrrd.location_code,
wrrd.material_barcode, wrrd.material_id, wrrd.instock_batch,
wrrd.plan_amount, wrrd.return_amount,
wrrd.execute_status, wrrd.erp_status,wrrd.erp_amount, wrrd.return_person, wrrd.return_time,
wrrd.return_way, wrrd.machine_name, wrrd.quality_status,
wrrd.create_by, wrrd.create_date,mbmi.material_code,mbmi.material_name,mbmi.material_spec from wms_raw_return_detail wrrd
left join mes_base_material_info mbmi on wrrd.material_id= mbmi.material_id
</sql>
<select id="selectWmsRawReturnDetailJoinMaterialList" parameterType="WmsRawReturnDetail" resultMap="WmsRawReturnDetailResult">
<include refid="selectWmsRawReturnDetailJoinMaterialVo"/>
<where>
<if test="rawReturnId != null "> and wrrd.raw_return_id = #{rawReturnId}</if>
<if test="locationCode != null and locationCode != ''"> and location_code = #{locationCode}</if>
<if test="materialBarcode != null and materialBarcode != ''"> and material_barcode = #{materialBarcode}</if>
<if test="materialId != null "> and material_id = #{materialId}</if>
<if test="instockBatch != null and instockBatch != ''"> and instock_batch = #{instockBatch}</if>
<if test="materialProductionDate != null "> and material_production_Date = #{materialProductionDate}</if>
<if test="planAmount != null "> and plan_amount = #{planAmount}</if>
<if test="returnAmount != null "> and return_amount = #{returnAmount}</if>
<if test="executeStatus != null and executeStatus != ''"> and execute_status = #{executeStatus}</if>
<if test="erpStatus != null and erpStatus != ''"> and erp_status = #{erpStatus}</if>
<if test="returnPerson != null and returnPerson != ''"> and return_person = #{returnPerson}</if>
<if test="returnTime != null "> and return_time = #{returnTime}</if>
<if test="returnWay != null and returnWay != ''"> and return_way = #{returnWay}</if>
<if test="machineName != null and machineName != ''"> and machine_name like concat('%', #{machineName}, '%')</if>
<if test="qualityStatus != null and qualityStatus != ''"> and quality_status = #{qualityStatus}</if>
<if test="createDate != null "> and create_date = #{createDate}</if>
<if test="updateDate != null "> and update_date = #{updateDate}</if>
<if test="stackAmount != null "> and stack_amount = #{stackAmount}</if>
</where>
</select>
</mapper>

@ -67,6 +67,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="sub_update_by" />
<result property="updateDate" column="sub_update_date" />
<result property="stackAmount" column="sub_stack_amount" />
<result property="materialCode" column="sub_material_code" />
<result property="materialName" column="sub_material_name" />
<result property="materialSpec" column="sub_material_spec" />
</resultMap>
<sql id="selectWmsRawReturnVo">
@ -246,8 +249,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
wrr.material_id,wrr.plan_amount,wrr.return_amount,wrr.product_id,wrr.material_barcode,
wrr.operation_type, wrr.task_type, wrr.apply_reason, wrr.audit_reason, wrr.audit_status,
wrr.execute_status, wrr.apply_by, wrr.apply_date, wrr.audit_by, wrr.audit_date,wrr.begin_time, wrr.end_time,
wbw.warehouse_name
wbw.warehouse_name,mbmi.material_code,mbmi.material_name,mbmi.material_spec
from wms_raw_return wrr left join wms_base_warehouse wbw on wrr.warehouse_id = wbw.warehouse_id
left join mes_base_material_info mbmi on wrr.material_id=mbmi.material_id
<where>
<if test="taskCode != null and taskCode != ''"> and wrr.task_code like concat('%', #{taskCode}, '%')</if>
@ -265,6 +269,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="applyBy != null and applyBy != ''"> and wrr.apply_by like concat('%', #{applyBy}, '%')</if>
<if test="auditStatus != null and auditStatus != ''"> and wrr.audit_status = #{auditStatus}</if>
</where>
order by wrr.apply_date desc
</select>
@ -273,8 +278,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
wrr.material_id,wrr.plan_amount,wrr.return_amount,wrr.product_id,wrr.material_barcode,wrr.batch_code,
wrr.operation_type, wrr.task_type, wrr.apply_reason, wrr.audit_reason, wrr.audit_status,
wrr.execute_status, wrr.apply_by, wrr.apply_date, wrr.audit_by, wrr.audit_date,wrr.begin_time, wrr.end_time,
wbw.warehouse_name
wbw.warehouse_name,mbmi.material_code,mbmi.material_name,mbmi.material_spec
from wms_raw_return wrr left join wms_base_warehouse wbw on wrr.warehouse_id = wbw.warehouse_id
left join mes_base_material_info mbmi on wrr.material_id=mbmi.material_id
where wrr.raw_return_id = #{rawReturnId}
</select>

@ -394,3 +394,23 @@ export function productPlanDetailContinue(data) {
data: data
})
}
// 获取绑定销售订单的采购订单信息
export function selectBindPurchaseOrders(query) {
return request({
url: '/mes/api/selectBindPurchaseOrders',
method: 'get',
params: query
})
}
// 获取申请的物料信息
export function getRawOutstocks(query) {
return request({
url: '/wms/api/getRawOutstocks',
method: 'get',
params: query
})
}

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 查询生产告警信息列表
export function listAlarmInfo(query) {
return request({
url: '/mes/alarmInfo/list',
method: 'get',
params: query
})
}
// 查询生产告警信息详细
export function getAlarmInfo(alarmInfoId) {
return request({
url: '/mes/alarmInfo/' + alarmInfoId,
method: 'get'
})
}
// 新增生产告警信息
export function addAlarmInfo(data) {
return request({
url: '/mes/alarmInfo',
method: 'post',
data: data
})
}
// 修改生产告警信息
export function updateAlarmInfo(data) {
return request({
url: '/mes/alarmInfo',
method: 'put',
data: data
})
}
// 删除生产告警信息
export function delAlarmInfo(alarmInfoId) {
return request({
url: '/mes/alarmInfo/' + alarmInfoId,
method: 'delete'
})
}
// 查询生产告警信息列表
export function listStockAlarmDetail(query) {
return request({
url: '/mes/alarmInfo/listStockAlarmDetail',
method: 'get',
params: query
})
}

@ -226,6 +226,8 @@ export default {
if (this.form.warehouseFloor === 5) {
this.materialVisible = false;
}else{
this.materialVisible = true;
}
}
if (this.defineData.maxPlanAmount) {
@ -285,7 +287,8 @@ export default {
},
handleDeleteMaterial(row) {
let index = this.wmsRawReturnList.indexOf(row);
this.wmsRawReturnList.splice(index,1);
},

@ -141,9 +141,51 @@
</div>
<div class="chartBox chartBox2">
<div class="title">库存统计</div>
<div class="title">物料到货信息</div>
<div class="chart">
<Chart ref="chart2"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="purchaseOrderData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="到货数量"
prop="completeAmount"
width="100"
>
</el-table-column>
<el-table-column
label="订单数量"
prop="orderAmount"
width="100"
>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -300,9 +342,60 @@
</div>
<div class="chartBox chartBox4">
<div class="title">每周产量</div>
<div class="title">申请物料信息</div>
<div class="chart">
<Chart ref="chart4"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="rawOutstockData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="申请数量"
prop="planAmount"
width="100"
>
</el-table-column>
<el-table-column
label="已领数量"
prop="outstockAmount"
width="100"
>
</el-table-column>
<el-table-column
label="状态"
prop="auditStatus"
width="100"
>
<template slot-scope="scope">
<dict-tag :options="dict.type.wms_audit_status" :value="scope.row.auditStatus"/>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -532,8 +625,8 @@ import {
applyRawBack,
assignTask, scanMaterial2Confirm,
getNewestOutstockCabinet, updateBarcodePlan, completeCollectMaterials, completeReturnMaterials, continueRawInstock,
productPlanDetailPause,productPlanDetailContinue
productPlanDetailPause,productPlanDetailContinue,
selectBindPurchaseOrders,getRawOutstocks
} from "@/api/board";
import applyRawOutstock from '@//views/board/common/applyRawOutstock.vue';
import applyRawReturn from '@//views/board/common/applyRawReturn.vue';
@ -571,7 +664,7 @@ export default {
WorkshopNotice,
ViewFile
},
dicts: ['wms_raw_return_task_type', 'mes_safe_flag'],
dicts: ['wms_raw_return_task_type', 'mes_safe_flag','wms_audit_status'],
provide() {
return {
closeDialog: this.closeDialog,
@ -757,6 +850,9 @@ export default {
INTERNAL: "2",//
},
rawOutstockData:[],
purchaseOrderData:[]
}
},
async mounted() {
@ -1013,6 +1109,9 @@ export default {
this.form.cabinetChannel = val.cabinetChannel;
this.form.planDetailStatus = setState(data.data.planDetailStatus)
this.getInfo(val)
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
closePopover() {
document.body.click()
@ -1057,7 +1156,9 @@ export default {
this.form.planDetailStatus = setState(data.planDetailStatus)
}
this.getInfo(val)
this.getInfo(val);
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
stationChange(val) {
this.nowStation = val
@ -1879,6 +1980,30 @@ export default {
},
selectBindPurchaseOrders(){
this.purchaseOrderData = [];
if(this.form.saleOrderId && this.form.saleOrderId!=''){
selectBindPurchaseOrders({saleOrderId:this.form.saleOrderId}).then(response => {
this.purchaseOrderData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
},
selectRawOutstocks(){
this.rawOutstockData = [];
if(this.form.planDetailCode && this.form.planDetailCode!=''){
getRawOutstocks({planDetailCode:this.form.planDetailCode}).then(response => {
this.rawOutstockData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
}
}
}

@ -107,12 +107,12 @@
</div>
<div class="chartBox chartBox2">
<div class="title">物料安装情况(已完成)</div>
<div class="title">物料到货信息</div>
<div class="chart">
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="tableData2"
:data="purchaseOrderData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
@ -134,8 +134,19 @@
>
</el-table-column>
<el-table-column
label="完成数量"
prop="checkAmount"
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="到货数量"
prop="completeAmount"
width="100"
>
</el-table-column>
<el-table-column
label="订单数量"
prop="orderAmount"
width="100"
>
</el-table-column>
@ -281,12 +292,12 @@
</div>
<div class="chartBox chartBox4">
<div class="title">物料安装情况(未完成)</div>
<div class="title">申请物料信息</div>
<div class="chart">
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="tableData3"
:data="rawOutstockData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
@ -308,11 +319,31 @@
>
</el-table-column>
<el-table-column
label="差异值"
prop="needAmount"
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="申请数量"
prop="planAmount"
width="100"
>
</el-table-column>
<el-table-column
label="已领数量"
prop="outstockAmount"
width="100"
>
</el-table-column>
<el-table-column
label="状态"
prop="auditStatus"
width="100"
>
<template slot-scope="scope">
<dict-tag :options="dict.type.wms_audit_status" :value="scope.row.auditStatus"/>
</template>
</el-table-column>
</el-table>
</div>
</div>
@ -470,7 +501,7 @@ import {
firstFloorProduceOutstock,
scanMaterial2Confirm,
selectMaterialInstallationCircumstance,
productPlanDetailPause,productPlanDetailContinue
productPlanDetailPause, productPlanDetailContinue, selectBindPurchaseOrders, getRawOutstocks
} from '@/api/board'
import {getToken} from "@/utils/auth";
import applyRawOutstock from "@/views/board/common/applyRawOutstock.vue";
@ -482,7 +513,7 @@ import {getDispatchSOPAttachList} from "@/api/mes/productplan";
const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100
export default {
name: 'Board1',
dicts: ['mes_plan_detail_status', 'wms_raw_return_task_type', "mes_safe_flag"],
dicts: ['mes_plan_detail_status', 'wms_raw_return_task_type', "mes_safe_flag",'wms_audit_status'],
provide(){
return{
closeDialog : this.closeDialog,
@ -597,6 +628,8 @@ export default {
thisTitle: "查看SOP附件",
//
fileListData: [],
rawOutstockData:[],
purchaseOrderData:[]
}
},
mounted() {
@ -741,6 +774,9 @@ export default {
this.$modal.msgSuccess("开始成功");
e.realBeginTime = getNowDateTime();
e.planDetailStatus = this.PLAN_DETAIL_STATUS.STARTED;
this.planDetailCode = e.planDetailCode;
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
})
})
.catch(() => {
@ -803,6 +839,8 @@ export default {
this.tableData1 = res.rows
this.totalNum3 = Math.ceil(res.total / 5)
this.$refs.table.setCurrentRow(res.rows[0]);
this.planDetailCode = res.rows[0].planDetailCode
})
})
@ -810,9 +848,13 @@ export default {
this.tableData1 = res.rows
this.$refs.table.setCurrentRow(res.rows[0]);
this.totalNum3 = Math.ceil(res.total / 5)
this.planDetailCode = res.rows[0].planDetailCode
}
})
});
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
@ -1164,6 +1206,30 @@ export default {
});
},
selectBindPurchaseOrders(){
this.purchaseOrderData = [];
if(this.saleOrderId && this.saleOrderId!=''){
selectBindPurchaseOrders({saleOrderId:this.saleOrderId}).then(response => {
this.purchaseOrderData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
},
selectRawOutstocks() {
this.rawOutstockData = [];
if (this.planDetailCode && this.planDetailCode!=''){
getRawOutstocks({planDetailCode: this.planDetailCode}).then(response => {
this.rawOutstockData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
}
}
}
</script>

@ -96,9 +96,51 @@
</div>
<div class="chartBox chartBox2">
<div class="title">库存统计</div>
<div class="title">物料到货信息</div>
<div class="chart">
<Chart ref="chart2"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="purchaseOrderData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="到货数量"
prop="completeAmount"
width="100"
>
</el-table-column>
<el-table-column
label="订单数量"
prop="orderAmount"
width="100"
>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -238,9 +280,60 @@
</div>
<div class="chartBox chartBox4">
<div class="title">每周产量</div>
<div class="title">申请物料信息</div>
<div class="chart">
<Chart ref="chart4"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="rawOutstockData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="申请数量"
prop="planAmount"
width="100"
>
</el-table-column>
<el-table-column
label="已领数量"
prop="outstockAmount"
width="100"
>
</el-table-column>
<el-table-column
label="状态"
prop="auditStatus"
width="100"
>
<template slot-scope="scope">
<dict-tag :options="dict.type.wms_audit_status" :value="scope.row.auditStatus"/>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -386,7 +479,7 @@ import {
check4thFloorProduceOutstock,
fourthFloorProduceOutstock,
scanMaterial2Confirm,
productPlanDetailPause,productPlanDetailContinue
productPlanDetailPause, productPlanDetailContinue, selectBindPurchaseOrders, getRawOutstocks
} from "@/api/board";
import {monitorSerialData} from "@/utils/serial";
import applyRawOutstock from '@//views/board/common/applyRawOutstock.vue';
@ -400,7 +493,7 @@ import {getDispatchSOPAttachList} from "@/api/mes/productplan";
const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100
export default {
name: 'Board1',
dicts: ['mes_plan_detail_status', 'wms_raw_return_task_type', 'mes_safe_flag'],
dicts: ['mes_plan_detail_status', 'wms_raw_return_task_type', 'mes_safe_flag','wms_audit_status'],
provide(){
return{
closeDialog : this.closeDialog,
@ -512,6 +605,8 @@ export default {
thisTitle: "查看SOP附件",
//
fileListData: [],
rawOutstockData:[],
purchaseOrderData:[]
}
},
created() {
@ -838,6 +933,9 @@ export default {
e.realBeginTime = getNowDateTime();
e.planDetailStatus = this.PLAN_DETAIL_STATUS.STARTED;
this.planDetailCode = e.planDetailCode;
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
// this.getDetail(queryRow);
// getProductPlans({pageNum: this.nowNum1, pageSize: 5}).then(e => {
// this.tableData = e.rows
@ -905,6 +1003,7 @@ export default {
this.tableData1 = res.rows
this.totalNum3 = Math.ceil(res.total / 5)
this.$refs.table.setCurrentRow(res.rows[0]);
this.planDetailCode = res.rows[0].planDetailCode
})
})
@ -912,9 +1011,13 @@ export default {
this.tableData1 = res.rows
this.$refs.table.setCurrentRow(res.rows[0]);
this.totalNum3 = Math.ceil(res.total / 5)
this.planDetailCode = res.rows[0].planDetailCode
}
})
});
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
//
getMaterials(val) {
@ -1256,6 +1359,30 @@ export default {
});
},
selectBindPurchaseOrders(){
this.purchaseOrderData = [];
if(this.saleOrderId && this.saleOrderId!=''){
selectBindPurchaseOrders({saleOrderId:this.saleOrderId}).then(response => {
this.purchaseOrderData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
},
selectRawOutstocks(){
this.rawOutstockData = [];
if (this.planDetailCode && this.planDetailCode!='') {
getRawOutstocks({planDetailCode: this.planDetailCode}).then(response => {
this.rawOutstockData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
}
}
}
</script>

@ -70,9 +70,51 @@
</div>
<div class="chartBox chartBox2">
<div class="title">库存统计</div>
<div class="title">物料到货信息</div>
<div class="chart">
<Chart ref="chart2"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="purchaseOrderData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="到货数量"
prop="completeAmount"
width="100"
>
</el-table-column>
<el-table-column
label="订单数量"
prop="orderAmount"
width="100"
>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -196,9 +238,60 @@
</div>
<div class="chartBox chartBox4">
<div class="title">每周产量</div>
<div class="title">申请物料信息</div>
<div class="chart">
<Chart ref="chart4"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="rawOutstockData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="申请数量"
prop="planAmount"
width="100"
>
</el-table-column>
<el-table-column
label="已领数量"
prop="outstockAmount"
width="100"
>
</el-table-column>
<el-table-column
label="状态"
prop="auditStatus"
width="100"
>
<template slot-scope="scope">
<dict-tag :options="dict.type.wms_audit_status" :value="scope.row.auditStatus"/>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -267,7 +360,7 @@ import {
directRawOutstock,
directRawReturn,
get4thFloorRegularBarcode,
productPlanDetailPause,productPlanDetailContinue
productPlanDetailPause, productPlanDetailContinue, selectBindPurchaseOrders, getRawOutstocks
} from "@/api/board";
import {monitorSerialData} from "@/utils/serial"
@ -294,6 +387,7 @@ const setState = (e) => {
const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100
export default {
name: 'Board1',
dicts: ['wms_audit_status'],
mixins: [monitorSerialData, noticeData],
components: {
Chart,
@ -371,6 +465,8 @@ export default {
thisTitle: "查看SOP附件",
//
fileListData: [],
rawOutstockData:[],
purchaseOrderData:[]
}
},
async mounted() {
@ -398,7 +494,8 @@ export default {
if (val.data) {
this.form.planDetailStatus = setState(val.data.planDetailStatus)
}
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
})
})
this.$refs.chart2.setData({
@ -604,6 +701,9 @@ export default {
this.form.materialName = e.materialName
this.form.saleOrderId = e.saleOrderId
this.form.planDetailStatus = setState(val.data.planDetailStatus)
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
}
})
@ -965,7 +1065,9 @@ export default {
planId: val.planId + '-' + i
}
}) || []
})
});
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
//
accomplishPlan() {
@ -1279,6 +1381,32 @@ export default {
});
},
selectBindPurchaseOrders(){
this.purchaseOrderData = [];
if(this.form.saleOrderId && this.form.saleOrderId!=''){
selectBindPurchaseOrders({saleOrderId:this.form.saleOrderId}).then(response => {
this.purchaseOrderData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
},
selectRawOutstocks(){
this.rawOutstockData = [];
if(this.form.planDetailCode && this.form.planDetailCode!='') {
getRawOutstocks({planDetailCode: this.form.planDetailCode}).then(response => {
this.rawOutstockData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
}
},
}

@ -24,13 +24,17 @@
</el-form-item>
</el-form>
<div style="text-align: center">
<el-button v-if="form.planDetailStatus === '已开始'" type="primary" :loading="submitLoading" @click="finish()"></el-button>
<el-button v-if="form.planDetailStatus === '' && form.planDetailCode" type="info" :loading="submitLoading"
@click="submitProductPlanDetailPause">暂停
<el-button v-if="form.planDetailStatus === ''" type="primary" :loading="submitLoading"
@click="finish()">完成
</el-button>
<el-button v-if="form.planDetailStatus === '' && form.planDetailCode" type="info" :loading="submitLoading"
<el-button v-if="form.planDetailStatus === '' && form.planDetailCode" type="info"
:loading="submitLoading"
@click="submitProductPlanDetailPause">暂停
</el-button>
<el-button v-if="form.planDetailStatus === '' && form.planDetailCode" type="info"
:loading="submitLoading"
@click="submitProductPlanDetailContinue">继续
</el-button>
@ -53,9 +57,51 @@
</div>
<div class="chartBox chartBox2">
<div class="title">库存统计</div>
<div class="title">物料到货信息</div>
<div class="chart">
<Chart ref="chart2"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="purchaseOrderData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="到货数量"
prop="completeAmount"
width="100"
>
</el-table-column>
<el-table-column
label="订单数量"
prop="orderAmount"
width="100"
>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -159,9 +205,60 @@
</div>
<div class="chartBox chartBox4">
<div class="title">每周产量</div>
<div class="title">申请物料信息</div>
<div class="chart">
<Chart ref="chart4"></Chart>
<div class="whiteTable">
<el-table
:cell-style="{textAlign:'center'}"
:data="rawOutstockData"
:header-cell-style="{textAlign:'center'}"
:max-height="19.13 * vw"
style="width: 100%"
>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
label="物料编码"
prop="materialCode"
>
</el-table-column>
<el-table-column
label="物料名称"
prop="materialName"
>
</el-table-column>
<el-table-column
label="物料规格"
prop="materialSpec"
>
</el-table-column>
<el-table-column
label="申请数量"
prop="planAmount"
width="100"
>
</el-table-column>
<el-table-column
label="已领数量"
prop="outstockAmount"
width="100"
>
</el-table-column>
<el-table-column
label="状态"
prop="auditStatus"
width="100"
>
<template slot-scope="scope">
<dict-tag :options="dict.type.wms_audit_status" :value="scope.row.auditStatus"/>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
@ -249,7 +346,7 @@ import {
getNewestProductPlanDetail,
getProductPlans,
startNextProductPlanDetail,
productPlanDetailPause,productPlanDetailContinue
productPlanDetailPause, productPlanDetailContinue, selectBindPurchaseOrders, getRawOutstocks
} from '@/api/board'
import WorkshopNotice from "@/components/workshopNotice/index.vue";
import {noticeData} from "@/utils/notice"
@ -273,6 +370,7 @@ const setState = (e) => {
const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100
export default {
name: 'Board1',
dicts: ['wms_audit_status'],
components: {
Chart,
WorkshopNotice,
@ -288,7 +386,7 @@ export default {
nowNum1: 1,
totalNum1: 0,
form: {},
submitLoading:false,
submitLoading: false,
tableData: [],
vw: (document.documentElement.clientWidth || document.body.clientWidth) / 100,
//
@ -297,6 +395,8 @@ export default {
thisTitle: "查看SOP附件",
//
fileListData: [],
rawOutstockData: [],
purchaseOrderData: []
}
},
mounted() {
@ -308,168 +408,168 @@ export default {
// duration: 0
// });
// }, 60 * 1000)
this.$refs.chart2.setData({
tooltip: {
trigger: 'axis',
axisPointer: {
//
type: 'shadow' // 线'line' | 'shadow'
}
},
grid: {
left: '0',
right: '4%',
bottom: '0',
top: 20,
containLabel: true
},
xAxis: {
type: 'category',
data: [1, 2, 3, 4, 5, 6],
axisLine: {
lineStyle: {
color: 'white'
}
},
axisLabel: {
// interval: 0,
// rotate: 40,
textStyle: {
fontFamily: 'Microsoft YaHei'
}
}
},
yAxis: {
type: 'value',
axisLine: {
show: false,
lineStyle: {
color: 'white'
}
},
splitLine: {
show: false
},
axisLabel: {}
},
series: [
{
name: '数量',
label: {
normal: {
show: true,
position: 'top',
textStyle: {
color: '#a8aab0',
fontStyle: 'normal',
fontFamily: '微软雅黑',
fontSize: 0.75 * vw
}
}
},
type: 'bar',
barWidth: '30%',
barMaxWidth: 50,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#39ffff'
},
{
offset: 1,
color: '#5affa6'
}
])
}
},
data: [1, 2, 3, 4, 5, 6]
}
]
})
this.$refs.chart4.setData({
tooltip: {
trigger: 'axis',
axisPointer: {
//
type: 'shadow' // 线'line' | 'shadow'
}
},
grid: {
left: '0',
right: '4%',
bottom: '0',
top: 20,
containLabel: true
},
xAxis: {
type: 'category',
data: [1, 2, 3, 4, 5, 6],
axisLine: {
lineStyle: {
color: 'white'
}
},
axisLabel: {
// interval: 0,
// rotate: 40,
textStyle: {
fontFamily: 'Microsoft YaHei'
}
}
},
yAxis: {
type: 'value',
axisLine: {
show: false,
lineStyle: {
color: 'white'
}
},
splitLine: {
show: false
},
axisLabel: {}
},
series: [
{
name: '数量',
label: {
normal: {
show: true,
position: 'top',
textStyle: {
color: '#a8aab0',
fontStyle: 'normal',
fontFamily: '微软雅黑',
fontSize: 0.75 * vw
}
}
},
type: 'bar',
barWidth: '30%',
barMaxWidth: 50,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#39ffff'
},
{
offset: 1,
color: '#5affa6'
}
])
}
},
data: [1, 2, 3, 4, 5, 6]
}
]
})
// this.$refs.chart2.setData({
// tooltip: {
// trigger: 'axis',
// axisPointer: {
// //
// type: 'shadow' // 线'line' | 'shadow'
// }
// },
// grid: {
// left: '0',
// right: '4%',
// bottom: '0',
// top: 20,
// containLabel: true
// },
// xAxis: {
// type: 'category',
// data: [1, 2, 3, 4, 5, 6],
// axisLine: {
// lineStyle: {
// color: 'white'
// }
// },
// axisLabel: {
// // interval: 0,
// // rotate: 40,
// textStyle: {
// fontFamily: 'Microsoft YaHei'
// }
// }
// },
//
// yAxis: {
// type: 'value',
// axisLine: {
// show: false,
// lineStyle: {
// color: 'white'
// }
// },
// splitLine: {
// show: false
// },
// axisLabel: {}
// },
// series: [
// {
// name: '',
// label: {
// normal: {
// show: true,
// position: 'top',
// textStyle: {
// color: '#a8aab0',
// fontStyle: 'normal',
// fontFamily: '',
// fontSize: 0.75 * vw
// }
// }
// },
// type: 'bar',
// barWidth: '30%',
// barMaxWidth: 50,
// itemStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: '#39ffff'
// },
// {
// offset: 1,
// color: '#5affa6'
// }
// ])
// }
// },
// data: [1, 2, 3, 4, 5, 6]
// }
// ]
// })
// this.$refs.chart4.setData({
// tooltip: {
// trigger: 'axis',
// axisPointer: {
// //
// type: 'shadow' // 线'line' | 'shadow'
// }
// },
// grid: {
// left: '0',
// right: '4%',
// bottom: '0',
// top: 20,
// containLabel: true
// },
// xAxis: {
// type: 'category',
// data: [1, 2, 3, 4, 5, 6],
// axisLine: {
// lineStyle: {
// color: 'white'
// }
// },
// axisLabel: {
// // interval: 0,
// // rotate: 40,
// textStyle: {
// fontFamily: 'Microsoft YaHei'
// }
// }
// },
//
// yAxis: {
// type: 'value',
// axisLine: {
// show: false,
// lineStyle: {
// color: 'white'
// }
// },
// splitLine: {
// show: false
// },
// axisLabel: {}
// },
// series: [
// {
// name: '',
// label: {
// normal: {
// show: true,
// position: 'top',
// textStyle: {
// color: '#a8aab0',
// fontStyle: 'normal',
// fontFamily: '',
// fontSize: 0.75 * vw
// }
// }
// },
// type: 'bar',
// barWidth: '30%',
// barMaxWidth: 50,
// itemStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: '#39ffff'
// },
// {
// offset: 1,
// color: '#5affa6'
// }
// ])
// }
// },
// data: [1, 2, 3, 4, 5, 6]
// }
// ]
// })
getProductPlans({pageNum: this.nowNum1, pageSize: 5}).then(e => {
this.tableData = e.rows
this.totalNum1 = Math.ceil(e.total / 5)
@ -518,6 +618,8 @@ export default {
this.form.materialName = val.materialName
this.form.planDetailStatus = setState(data.data.planDetailStatus)
this.getInfo(val)
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
async tableClick(val) {
if (!val) return
@ -526,8 +628,11 @@ export default {
this.form.materialId = val.materialId
this.form.materialCode = val.materialCode
this.form.materialName = val.materialName
this.form.saleOrderId = val.saleOrderId
this.form.planDetailStatus = setState(data?.planDetailStatus)
this.getInfo(val)
this.selectBindPurchaseOrders();
this.selectRawOutstocks();
},
getInfo(e) {
this.$refs.chart1_1.setData({
@ -879,7 +984,7 @@ export default {
},
/** SOP预览*/
handleViewSOP(e){
handleViewSOP(e) {
this.fileListData = [];
getDispatchSOPAttachList(e.dispatchCode, e.processId).then(res => {
let attachList = res.data;
@ -891,7 +996,7 @@ export default {
thisFileList.push(previewFile);
})
console.log("thisFileList", thisFileList)
if (thisFileList.length > 0){
if (thisFileList.length > 0) {
this.fileListData = thisFileList;
this.showFileDialog = true;
} else {
@ -904,7 +1009,7 @@ export default {
/** 提交暂停按钮 */
submitProductPlanDetailPause() {
this.submitLoading = true;
let pauseForm = {planDetailId:this.form.planDetailId};
let pauseForm = {planDetailId: this.form.planDetailId};
this.$modal.confirm('确认要暂停么?').then(function () {
return productPlanDetailPause(pauseForm);
}).then(() => {
@ -920,7 +1025,7 @@ export default {
/** 提交继续按钮 */
submitProductPlanDetailContinue() {
this.submitLoading = true;
let continueForm = {planDetailId:this.form.planDetailId};
let continueForm = {planDetailId: this.form.planDetailId};
this.$modal.confirm('确认要继续么?').then(function () {
return productPlanDetailContinue(continueForm);
}).then(() => {
@ -931,6 +1036,31 @@ export default {
this.submitLoading = false;
});
},
selectBindPurchaseOrders() {
this.purchaseOrderData = [];
if (this.form.saleOrderId && this.form.saleOrderId != '') {
selectBindPurchaseOrders({saleOrderId: this.form.saleOrderId}).then(response => {
this.purchaseOrderData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
},
selectRawOutstocks() {
this.rawOutstockData = [];
if (this.form.planDetailCode && this.form.planDetailCode !== '') {
getRawOutstocks({planDetailCode: this.form.planDetailCode}).then(response => {
this.rawOutstockData = response.rows;
// this.detailTotal = response.total;
// this.loading = false;
});
}
}
}
}
</script>

@ -0,0 +1,272 @@
<template>
<div class="app-container">
<!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">-->
<!-- <el-form-item label="创建时间" prop="createDate">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.createDate"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择创建时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="最后更新时间" prop="updateDate">-->
<!-- <el-date-picker clearable-->
<!-- v-model="queryParams.updateDate"-->
<!-- type="date"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- placeholder="请选择最后更新时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>-->
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-row :gutter="10" class="mb8">-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="primary"-->
<!-- plain-->
<!-- icon="el-icon-plus"-->
<!-- size="mini"-->
<!-- @click="handleAdd"-->
<!-- v-hasPermi="['mes:alarmInfo:add']"-->
<!-- >新增</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['mes:alarmInfo:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="el-icon-delete"-->
<!-- size="mini"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['mes:alarmInfo:remove']"-->
<!-- >删除</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['mes:alarmInfo:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<!-- </el-row>-->
<el-table v-loading="loading" :data="alarmInfoList" @selection-change="handleSelectionChange">
<el-table-column label="报警类型" align="center" prop="alarmInfoType" >
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_alarm_info_type" :value="scope.row.alarmInfoType"/>
</template>
</el-table-column>
<!-- <el-table-column label="处理状态(0未处理 1已处理)" align="center" prop="handleStatus" />-->
<el-table-column label="报警时间" align="center" prop="createDate" width="180">
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleDetail(scope.row)"
v-hasPermi="['mes:alarmInfo:query']"
>报警明细</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改生产告警信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="报警时间" prop="createDate">
{{form.createDate}}
</el-form-item>
<el-divider content-position="center">库存告警明细信息</el-divider>
<el-table :data="mesStockAlarmDetailList" ref="mesStockAlarmDetail">
<!-- <el-table-column label="序号" align="center" type="index" width="50"/>-->
<el-table-column label="物料编码" prop="materialCode" width="150">
</el-table-column>
<el-table-column label="物料名称" prop="materialName" width="150">
</el-table-column>
<el-table-column label="物料规格" prop="materialSpec" width="150">
</el-table-column>
<el-table-column label="安全库存数量" prop="safeStockAmount" width="150">
</el-table-column>
<el-table-column label="库存数量" prop="stockAmount" width="150">
</el-table-column>
</el-table>
<pagination
v-show="detailTotal>0"
:total="detailTotal"
:page.sync="detailQueryParams.pageNum"
:limit.sync="detailQueryParams.pageSize"
@pagination="getDetailList"
/>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listAlarmInfo, listStockAlarmDetail } from "@/api/mes/alarmInfo";
export default {
name: "AlarmInfo",
dicts: ['mes_alarm_info_type'],
data() {
return {
//
loading: true,
//
ids: [],
//
checkedMesStockAlarmDetail: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
alarmInfoList: [],
//
mesStockAlarmDetailList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
alarmInfoType: null,
handleStatus: null,
createDate: null,
updateDate: null
},
detailTotal:0,
detailQueryParams: {
pageNum: 1,
pageSize: 10,
alarmInfoType: null,
handleStatus: null,
createDate: null,
updateDate: null
},
//
form: {},
//
rules: {
alarmInfoType: [
{ required: true, message: "报警类型(1库存报警)不能为空", trigger: "change" }
],
handleStatus: [
{ required: true, message: "处理状态(0未处理 1已处理)不能为空", trigger: "change" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询生产告警信息列表 */
getList() {
this.loading = true;
listAlarmInfo(this.queryParams).then(response => {
this.alarmInfoList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
alarmInfoId: null,
alarmInfoType: null,
handleStatus: null,
createBy: null,
createDate: null,
updateBy: null,
updateDate: null
};
this.mesStockAlarmDetailList = [];
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.alarmInfoId)
this.single = selection.length!==1
this.multiple = !selection.length
},
handleDetail(row){
this.mesStockAlarmDetailList = [];
this.detailTotal = 0;
this.form.createDate = row.createDate;
this.open = true;
this.title = "库存告警明细";
this.detailQueryParams.alarmInfoId = row.alarmInfoId;
this.getDetailList();
},
/** 查询生产告警信息列表 */
getDetailList() {
// this.loading = true;]
listStockAlarmDetail(this.detailQueryParams).then(response => {
this.mesStockAlarmDetailList = response.rows;
this.detailTotal = response.total;
// this.loading = false;
});
},
}
};
</script>

@ -180,10 +180,17 @@
<el-button
size="mini"
type="text"
icon="el-icon-edit"
icon="el-icon-info"
@click="handleSaleOrderRelates(scope.row)"
v-if="scope.row.materialClassfication==='2'"
>物料明细</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-info"
@click="handleUpdate(scope.row)"
v-hasPermi="['wms:productoutstock:edit']"
>明细</el-button>
>出库明细</el-button>
</template>
</el-table-column>
</el-table>
@ -303,16 +310,32 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 关联销售订单信息对话框 -->
<el-dialog title="关联信息" :visible.sync="relateDialogVisible" append-to-body>
<sale-order-relates ref="saleOrderRelatesRef" :defineData="saleOrderRelatesData"
v-if="relateDialogVisible"></sale-order-relates>
</el-dialog>
</div>
</template>
<script>
import { listProductoutstock, getProductoutstock, delProductoutstock, addProductoutstock, updateProductoutstock } from "@/api/wms/productoutstock";
import { getProductWarehouses } from "@/api/wms/productInstock";
import saleOrderRelates from "@/views/board/common/saleOrderRelates.vue";
export default {
name: "Productoutstock",
components: {
'sale-order-relates': saleOrderRelates,
},
dicts: ["wms_erp_status","wms_warehouse_instock_type","wms_operation_type","wms_execute_status","wms_audit_status","wms_product_outstock_task_type"],
provide() {
return {
closeDialog: this.closeDialog,
}
},
data() {
return {
//
@ -374,7 +397,10 @@ export default {
},
//
form: {},
productWarehouseList:[]
productWarehouseList:[],
relateDialogVisible:false,
saleOrderRelatesData: {},
};
},
created() {
@ -552,6 +578,17 @@ export default {
this.productWarehouseList = response.data;
});
},
/** 查询关联物料信息列表 */
handleSaleOrderRelates(row){
this.saleOrderRelatesData = {
virtualMaterialId: row.productId,
}
this.relateDialogVisible = true
},
closeDialog() {
this.relateDialogVisible = false;
},
}
};
</script>

@ -243,7 +243,7 @@ export default {
const taskCode = row.taskCode
const warehouseName = row.warehouseName;
const params = {pageNum: this.queryParams.pageNum};
this.$tab.openPage("退库详情[" + taskCode + "]", '/wms/raw-return/detail/' + rawReturnId + '/1/' + warehouseName, params);
this.$tab.openPage("退库详情[" + taskCode + "]", '/wms/raw-return/audit/' + rawReturnId+'/1/'+warehouseName, params);
},
/** 导出按钮操作 */

@ -139,6 +139,107 @@
</el-col>
</el-row>
<el-divider content-position="center">原材料退库记录明细</el-divider>
<el-table :data="wmsRawReturnDetailList" ref="wmsRawReturnDetail">
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="库位编码" prop="locationCode" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.locationCode" placeholder="请输入库位编码" />
</template>
</el-table-column>
<el-table-column label="物料条码" prop="materialBarcode" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.materialBarcode" placeholder="请输入物料条码" />
</template>
</el-table-column>
<el-table-column label="物料ID" prop="materialId" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.materialId" placeholder="请输入物料ID" />
</template>
</el-table-column>
<el-table-column label="批次;扫描条码时,从打印条码记录表中获取" prop="instockBatch" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.instockBatch" placeholder="请输入批次;扫描条码时,从打印条码记录表中获取" />
</template>
</el-table-column>
<el-table-column label="生产日期;扫描条码时,从打印条码记录表中获取" prop="materialProductionDate" width="240">
<template slot-scope="scope">
<el-date-picker clearable v-model="scope.row.materialProductionDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择生产日期;扫描条码时,从打印条码记录表中获取" />
</template>
</el-table-column>
<el-table-column label="计划数量" prop="planAmount" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.planAmount" placeholder="请输入计划数量" />
</template>
</el-table-column>
<el-table-column label="退库数量" prop="returnAmount" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.returnAmount" placeholder="请输入退库数量" />
</template>
</el-table-column>
<el-table-column label="执行状态(0待执行,1执行中,2执行完成)" prop="executeStatus" width="150">
<template slot-scope="scope">
<el-select v-model="scope.row.executeStatus" placeholder="请选择执行状态(0待执行,1执行中,2执行完成)">
<el-option label="请选择字典生成" value="" />
</el-select>
</template>
</el-table-column>
<el-table-column label="同步ERP状态(0:失败,1成功)" prop="erpStatus" width="150">
<template slot-scope="scope">
<el-select v-model="scope.row.erpStatus" placeholder="请选择同步ERP状态(0:失败,1成功)">
<el-option label="请选择字典生成" value="" />
</el-select>
</template>
</el-table-column>
<el-table-column label="同步给ERP的数量" prop="erpAmount" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.erpAmount" placeholder="请输入同步给ERP的数量" />
</template>
</el-table-column>
<el-table-column label="退库人" prop="returnPerson" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.returnPerson" placeholder="请输入退库人" />
</template>
</el-table-column>
<el-table-column label="退库时间" prop="returnTime" width="240">
<template slot-scope="scope">
<el-date-picker clearable v-model="scope.row.returnTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择退库时间" />
</template>
</el-table-column>
<el-table-column label="退库方式" prop="returnWay" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.returnWay" placeholder="请输入退库方式" />
</template>
</el-table-column>
<el-table-column label="使用机台名称;退库扫描条码时,从打印条码记录表中获取" prop="machineName" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.machineName" placeholder="请输入使用机台名称;退库扫描条码时,从打印条码记录表中获取" />
</template>
</el-table-column>
<el-table-column label="质检状态(0:待质检,1:合格,2:NG)" prop="qualityStatus" width="150">
<template slot-scope="scope">
<el-select v-model="scope.row.qualityStatus" placeholder="请选择质检状态(0:待质检,1:合格,2:NG)">
<el-option label="请选择字典生成" value="" />
</el-select>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createDate" width="240">
<template slot-scope="scope">
<el-date-picker clearable v-model="scope.row.createDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择创建时间" />
</template>
</el-table-column>
<el-table-column label="最后更新时间" prop="updateDate" width="240">
<template slot-scope="scope">
<el-date-picker clearable v-model="scope.row.updateDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择最后更新时间" />
</template>
</el-table-column>
<el-table-column label="每托数量" prop="stackAmount" width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.stackAmount" placeholder="请输入每托数量" />
</template>
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">

@ -79,7 +79,9 @@
<el-table-column label="仓库" align="center" prop="warehouseName" />
<el-table-column label="计划编号" align="center" prop="planCode" width="100"/>
<el-table-column label="计划明细编号" align="center" prop="planDetailCode" width="100"/>
<el-table-column label="物料条码" align="center" prop="materialBarcode" width="100"/>
<el-table-column label="物料编码" align="center" prop="materialCode" width="100"/>
<el-table-column label="物料名称" align="center" prop="materialName" width="100"/>
<el-table-column label="物料规格" align="center" prop="materialSpec" width="100"/>
<el-table-column label="计划退库数量" align="center" prop="planAmount" width="100"/>
<el-table-column label="任务类型" align="center" prop="taskType" >
<template slot-scope="scope">
@ -88,9 +90,6 @@
</el-table-column>
<el-table-column label="申请人" align="center" prop="applyBy" />
<el-table-column label="申请时间" align="center" prop="applyDate" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.applyDate, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="审核状态" align="center" prop="auditStatus" >
<template slot-scope="scope">

@ -47,8 +47,26 @@
</el-col>
</el-row>
<el-row>
<el-col :span="16" :offset="2">
<el-col :span="8" :offset="2">
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" disabled/>
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="form.materialName" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="物料规格" prop="materialCode">
<el-input v-model="form.materialSpec" disabled/>
</el-form-item>
</el-col>
<el-col :span="8" :offset="2">
<el-form-item label="退库类型" prop="taskType">
<template slot-scope="scope">
<dict-tag :options="dict.type.wms_raw_return_task_type" :value="form.taskType"/>
@ -57,6 +75,8 @@
</el-col>
</el-row>
<el-row v-if="detailFlag">
<el-col :span="8" :offset="2">
<el-form-item label="审核人" prop="auditBy">
@ -77,13 +97,13 @@
</el-col>
</el-row>
<el-row v-if="detailFlag">
<el-col :span="16" :offset="2">
<el-form-item label="同步ERP数量" prop="erpAmount">
<el-input v-model="form.erpAmount" disabled/>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row v-if="detailFlag">-->
<!-- <el-col :span="16" :offset="2">-->
<!-- <el-form-item label="同步ERP数量" prop="erpAmount">-->
<!-- <el-input v-model="form.erpAmount" disabled/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row v-if="detailFlag">
@ -103,9 +123,9 @@
</el-col>
</el-row>
<el-divider content-position="center">原材料退库明细信息</el-divider>
<el-divider content-position="center" v-if="this.detailFlag">退</el-divider>
<el-table :data="wmsRawReturnDetailList" :row-class-name="rowWmsRawReturnDetailIndex"
ref="wmsRawReturnDetail">
ref="wmsRawReturnDetail" v-if="this.detailFlag">
<el-table-column label="序号" align="center" prop="index" width="50"/>
<el-table-column label="库位编码" prop="locationCode"/>
<el-table-column label="物料编码" prop="materialCode"/>
@ -136,7 +156,7 @@
</template>
<script>
import {auditRawReturn, getRawReturnByTaskCode} from "@/api/wms/rawreturn";
import {auditRawReturn, getRawReturnByTaskCode,getRawreturn} from "@/api/wms/rawreturn";
export default {
name: "Rawreturn",
@ -180,24 +200,45 @@ export default {
this.form.taskCode = taskCode;
this.warehouseName = warehouseName;
this.rawReturnId = rawReturnId;
this.getRawReturn();
// if(this.detailFlag){
this.getRawReturnByReturnId();
// }else{
// this.getRawReturnByTaskCode();
// }
},
methods: {
/** 查询原材料退库记录列表 */
getRawReturn() {
getRawReturnByReturnId() {
this.loading = true;
getRawreturn(this.rawReturnId).then(response => {
this.form = response.data;
this.wmsRawReturnDetailList = response.data.wmsRawReturnDetailList;
this.form.warehouseName = this.warehouseName;
this.loading = false;
});
},
/** 查询原材料退库记录列表 */
getRawReturnByTaskCode() {
this.loading = true;
getRawReturnByTaskCode(this.form.taskCode).then(response => {
this.form = response.data.wmsRawReturn;
this.wmsRawReturnDetailList = response.data.wmsRawReturnDetailList;
console.log(this.wmsRawReturnDetailList)
this.form.warehouseName = this.warehouseName;
this.loading = false;
});
},
//
cancel() {
const obj = {path: "/wms/rawmanagement/rawreturn", query: {t: Date.now(), pageNum: this.$route.query.pageNum}};
this.$tab.closeOpenPage(obj);
if(this.detailFlag){
const obj = {path: "/wms/info/rawreturn", query: {t: Date.now(), pageNum: this.$route.query.pageNum}};
this.$tab.closeOpenPage(obj);
}else{
const obj = {path: "/wms/rawmanagement/rawreturn", query: {t: Date.now(), pageNum: this.$route.query.pageNum}};
this.$tab.closeOpenPage(obj);
}
},
//

Loading…
Cancel
Save