diff --git a/src/main/java/com/glxp/api/dao/inv/InvRemindMsgDao.java b/src/main/java/com/glxp/api/dao/inv/InvRemindMsgDao.java index ee3232ff2..a97b146e6 100644 --- a/src/main/java/com/glxp/api/dao/inv/InvRemindMsgDao.java +++ b/src/main/java/com/glxp/api/dao/inv/InvRemindMsgDao.java @@ -19,4 +19,12 @@ public interface InvRemindMsgDao extends BaseMapper { * @return */ List filterList(FilterInvRemindMsgRequest filterInvRemindMsgRequest); + + /** + * 查询单条库存预警消息 + * + * @param invRemindMsgRequest + * @return + */ + InvRemindMsgEntity selectRemindMsg(FilterInvRemindMsgRequest invRemindMsgRequest); } \ No newline at end of file diff --git a/src/main/java/com/glxp/api/dao/purchase/PurOrderDao.java b/src/main/java/com/glxp/api/dao/purchase/PurOrderDao.java new file mode 100644 index 000000000..057f0018b --- /dev/null +++ b/src/main/java/com/glxp/api/dao/purchase/PurOrderDao.java @@ -0,0 +1,7 @@ +package com.glxp.api.dao.purchase; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.purchase.PurOrderEntity; + +public interface PurOrderDao extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/dao/purchase/PurOrderDetailDao.java b/src/main/java/com/glxp/api/dao/purchase/PurOrderDetailDao.java new file mode 100644 index 000000000..9fb555f8e --- /dev/null +++ b/src/main/java/com/glxp/api/dao/purchase/PurOrderDetailDao.java @@ -0,0 +1,7 @@ +package com.glxp.api.dao.purchase; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.glxp.api.entity.purchase.PurOrderDetailEntity; + +public interface PurOrderDetailDao extends BaseMapper { +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/inv/InvProductEntity.java b/src/main/java/com/glxp/api/entity/inv/InvProductEntity.java index 744ab4f2d..8c2b9504e 100644 --- a/src/main/java/com/glxp/api/entity/inv/InvProductEntity.java +++ b/src/main/java/com/glxp/api/entity/inv/InvProductEntity.java @@ -66,7 +66,7 @@ public class InvProductEntity { * 客户ID */ @TableField(value = "customerId") - private String customerId; + private String customerId; /** * 供应商ID @@ -86,6 +86,12 @@ public class InvProductEntity { @TableField(value = "invCode") private String invCode; + /** + * 货位编码 + */ + @TableField(value = "invSpaceCode") + private String invSpaceCode; + /** * 创建时间 */ diff --git a/src/main/java/com/glxp/api/entity/purchase/PurOrderDetailEntity.java b/src/main/java/com/glxp/api/entity/purchase/PurOrderDetailEntity.java new file mode 100644 index 000000000..5879df14c --- /dev/null +++ b/src/main/java/com/glxp/api/entity/purchase/PurOrderDetailEntity.java @@ -0,0 +1,64 @@ +package com.glxp.api.entity.purchase; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName(value = "pur_order_detail") +public class PurOrderDetailEntity { + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 订单外键 + */ + @TableField(value = "orderIdFk") + private String orderIdFk; + + /** + * 产品ID + */ + @TableField(value = "productId") + private Integer productId; + + /** + * 产品名称 + */ + @TableField(value = "productName") + private String productName; + + /** + * 数量 + */ + @TableField(value = "`count`") + private Integer count; + + /** + * 供应商ID + */ + @TableField(value = "supId") + private String supId; + + /** + * 注册证备案证号 + */ + @TableField(value = "zczbhhzbapzbh") + private String zczbhhzbapzbh; + + public static final String COL_ID = "id"; + + public static final String COL_ORDERIDFK = "orderIdFk"; + + public static final String COL_PRODUCTID = "productId"; + + public static final String COL_PRODUCTNAME = "productName"; + + public static final String COL_COUNT = "count"; + + public static final String COL_SUPID = "supId"; + + public static final String COL_ZCZBHHZBAPZBH = "zczbhhzbapzbh"; +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/entity/purchase/PurOrderEntity.java b/src/main/java/com/glxp/api/entity/purchase/PurOrderEntity.java new file mode 100644 index 000000000..d3f1a0ab1 --- /dev/null +++ b/src/main/java/com/glxp/api/entity/purchase/PurOrderEntity.java @@ -0,0 +1,169 @@ +package com.glxp.api.entity.purchase; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import lombok.Data; + +@Data +@TableName(value = "pur_order") +public class PurOrderEntity { + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 单据号 + */ + @TableField(value = "billNo") + private String billNo; + + /** + * 单据日期 + */ + @TableField(value = "billDate") + private Date billDate; + + /** + * 状态(1.草稿,2.未审核,3.已审核) + */ + @TableField(value = "`status`") + private Byte status; + + /** + * 订单类型 + */ + @TableField(value = "billType") + private String billType; + + /** + * 订单说明 + */ + @TableField(value = "remark") + private String remark; + + /** + * 当前分库 + */ + @TableField(value = "invCode") + private String invCode; + + /** + * 所属部门 + */ + @TableField(value = "deptCode") + private String deptCode; + + /** + * 创建人 + */ + @TableField(value = "`createUser`") + private String createUser; + + /** + * 创建时间 + */ + @TableField(value = "createTime") + private Date createTime; + + /** + * 审核人 + */ + @TableField(value = "auditUser") + private String auditUser; + + /** + * 审核时间 + */ + @TableField(value = "auditTime") + private Date auditTime; + + /** + * 审核说明 + */ + @TableField(value = "auditRemark") + private String auditRemark; + + /** + * 更新时间 + */ + @TableField(value = "updateTime") + private Date updateTime; + + /** + * 更新人 + */ + @TableField(value = "updateUser") + private String updateUser; + + /** + * 申购人 + */ + @TableField(value = "applyCreateUser") + private String applyCreateUser; + + /** + * 申购审核人 + */ + @TableField(value = "applyAuditUser") + private String applyAuditUser; + + /** + * 申购说明 + */ + @TableField(value = "applyRemark") + private String applyRemark; + + /** + * 申购单据号,多单以逗号隔开 + */ + @TableField(value = "applyBillNo") + private String applyBillNo; + + /** + * 生成采购入库业务单据 + */ + @TableField(value = "stockOrderNo") + private String stockOrderNo; + + public static final String COL_ID = "id"; + + public static final String COL_BILLNO = "billNo"; + + public static final String COL_BILLDATE = "billDate"; + + public static final String COL_STATUS = "status"; + + public static final String COL_BILLTYPE = "billType"; + + public static final String COL_REMARK = "remark"; + + public static final String COL_INVCODE = "invCode"; + + public static final String COL_DEPTCODE = "deptCode"; + + public static final String COL_CREATEUSER = "createUser"; + + public static final String COL_CREATETIME = "createTime"; + + public static final String COL_AUDITUSER = "auditUser"; + + public static final String COL_AUDITTIME = "auditTime"; + + public static final String COL_AUDITREMARK = "auditRemark"; + + public static final String COL_UPDATETIME = "updateTime"; + + public static final String COL_UPDATEUSER = "updateUser"; + + public static final String COL_APPLYCREATEUSER = "applyCreateUser"; + + public static final String COL_APPLYAUDITUSER = "applyAuditUser"; + + public static final String COL_APPLYREMARK = "applyRemark"; + + public static final String COL_APPLYBILLNO = "applyBillNo"; + + public static final String COL_STOCKORDERNO = "stockOrderNo"; +} \ No newline at end of file diff --git a/src/main/java/com/glxp/api/req/inv/FilterInvRemindMsgRequest.java b/src/main/java/com/glxp/api/req/inv/FilterInvRemindMsgRequest.java index d462fcf02..725f94842 100644 --- a/src/main/java/com/glxp/api/req/inv/FilterInvRemindMsgRequest.java +++ b/src/main/java/com/glxp/api/req/inv/FilterInvRemindMsgRequest.java @@ -19,6 +19,11 @@ public class FilterInvRemindMsgRequest extends ListPageRequest { */ private String batchNo; + /** + * 部门编码 + */ + private String deptCode; + /** * 仓库编码 */ diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java index eca566294..1971c47eb 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java @@ -69,10 +69,36 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService { List invDataList = new CopyOnWriteArrayList<>(invProductList); invDataList.parallelStream().forEach(invProductEntity -> { + //根据预警设置,查询对应的预警消息 + QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq(StrUtil.isNotBlank(invRemindSetEntity.getRelId()), "relId", invRemindSetEntity.getRelId()) .eq("invCode", invRemindSetEntity.getInvCode()) .eq(StrUtil.isNotBlank(invRemindSetEntity.getInvSpaceCode()), "invSpaceCode", invRemindSetEntity.getInvSpaceCode()); + + //初始化查询预警消息参数 + FilterInvRemindMsgRequest invRemindMsgRequest = new FilterInvRemindMsgRequest(); + invRemindMsgRequest.setRelId(invProductEntity.getRelIdFk().toString()); + invRemindMsgRequest.setBatchNo(invProductEntity.getBatchNo()); + invRemindMsgRequest.setDeptCode(invProductEntity.getDeptCode()); + invRemindMsgRequest.setInvCode(invProductEntity.getInvCode()); + invRemindMsgRequest.setInvSpaceCode(invProductEntity.getInvSpaceCode()); + + //根据预警设置,添加类型参数 + if (invRemindSetEntity.getLowStock()) { + //开启低库存预警 + invRemindMsgRequest.setType("1"); //库存不足类型 + InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); + //判断是否需要生成/刷新库存预警 + if (msgEntity.getNextRemindTime().getTime() > new Date().getTime() && msgEntity.getReCount() < invRemindSetEntity.getLowStockNum()) { + msgEntity.setStatus(1); //重置成为未确认消息 + msgEntity.setIgnoreStatus(0); //消息忽略状态修改为不忽略 + msgEntity.setUpdateTime(new Date()); + msgEntity.setNextRemindTime(new Date()); + } + } + + InvRemindMsgEntity invRemindMsgEntity = invRemindMsgDao.selectOne(wrapper); if (null == invRemindMsgEntity) { invRemindMsgEntity = new InvRemindMsgEntity(); @@ -112,4 +138,40 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService { } } + /** + * 查询或生成预警消息提醒 + * + * @param invRemindMsgRequest 预警消息查询参数 + * @param invProductEntity 库存产品信息 + * @return + */ + private InvRemindMsgEntity getInvRemindMsgEntity(FilterInvRemindMsgRequest invRemindMsgRequest, InvProductEntity invProductEntity) { + InvRemindMsgEntity msgEntity = invRemindMsgDao.selectRemindMsg(invRemindMsgRequest); + if (null == msgEntity) { + //数据库不存在对应的预警消息,生成新的预警消息 + msgEntity = new InvRemindMsgEntity(); + msgEntity.setRelId(invProductEntity.getRelIdFk().toString()); //耗材字典产品ID + msgEntity.setBatchNo(invProductEntity.getBatchNo()); //批次号 + msgEntity.setDeptCode(invProductEntity.getDeptCode()); //部门编码 + msgEntity.setInvCode(invProductEntity.getInvCode()); //仓库编码 + msgEntity.setInvSpaceCode(invProductEntity.getInvSpaceCode()); //货位号 + msgEntity.setStatus(1); //消息状态:未确认 + msgEntity.setIgnoreStatus(0); //消息忽略状态:不忽略 + msgEntity.setType(Integer.valueOf(invRemindMsgRequest.getType())); //预警类型 + + Date date = new Date(); + msgEntity.setCreateTime(date); + msgEntity.setUpdateTime(date); + msgEntity.setNextRemindTime(date); + } + + //更新预警消息的产品日期,数量等信息 + msgEntity.setProductionDate(invProductEntity.getProductionDate()); + msgEntity.setExpireDate(invProductEntity.getExpireDate()); + msgEntity.setInCount(invProductEntity.getInCount()); + msgEntity.setOutCount(invProductEntity.getOutCount()); + msgEntity.setReCount(invProductEntity.getReCount()); + return msgEntity; + } + } diff --git a/src/main/resources/mybatis/mapper/inv/InvRemindMsgDao.xml b/src/main/resources/mybatis/mapper/inv/InvRemindMsgDao.xml index 4fafcdcc3..1a149755b 100644 --- a/src/main/resources/mybatis/mapper/inv/InvRemindMsgDao.xml +++ b/src/main/resources/mybatis/mapper/inv/InvRemindMsgDao.xml @@ -44,4 +44,28 @@ order by irm.updateTime desc + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/inv/invProductDao.xml b/src/main/resources/mybatis/mapper/inv/invProductDao.xml index 6ae393975..5e14f5c5a 100644 --- a/src/main/resources/mybatis/mapper/inv/invProductDao.xml +++ b/src/main/resources/mybatis/mapper/inv/invProductDao.xml @@ -237,29 +237,31 @@ - + select ip.relIdFk, + ip.deptCode, + ip.invCode, + ipd.invSpaceCode, + ip.batchNo, + ip.productionDate, + ip.expireDate, + sum(ip.inCount), + sum(ip.outCount), + sum(ip.reCount) + from inv_product ip + left join inv_product_detail ipd + on ip.relIdFk = ipd.relId and ifnull(ip.batchNo, 'empty') = ifnull(ipd.batchNo, 'empty') - AND invCode = #{invCode} + AND ip.invCode = #{invCode} - AND invSpaceCode = #{invSpaceCode} + AND ipd.invSpaceCode = #{invSpaceCode} - AND relIdFk = #{relId} + AND ip.relIdFk = #{relId} - group by relIdFk, batchNo, invCode, invSpaceCode + group by ip.relIdFk, ip.batchNo, ip.invCode, ipd.invSpaceCode diff --git a/src/main/resources/mybatis/mapper/purchase/PurOrderDao.xml b/src/main/resources/mybatis/mapper/purchase/PurOrderDao.xml new file mode 100644 index 000000000..5d6369403 --- /dev/null +++ b/src/main/resources/mybatis/mapper/purchase/PurOrderDao.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, billNo, billDate, `status`, billType, remark, invCode, deptCode, `createUser`, + createTime, auditUser, auditTime, auditRemark, updateTime, updateUser, applyCreateUser, + applyAuditUser, applyRemark, applyBillNo, stockOrderNo + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/purchase/PurOrderDetailDao.xml b/src/main/resources/mybatis/mapper/purchase/PurOrderDetailDao.xml new file mode 100644 index 000000000..fa075ea5e --- /dev/null +++ b/src/main/resources/mybatis/mapper/purchase/PurOrderDetailDao.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + id, orderIdFk, productId, productName, `count`, supId, zczbhhzbapzbh + + \ No newline at end of file