Commit b9dc1c63 by 李小惠

项目重新提交

parent de744ead
......@@ -47,6 +47,12 @@
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
......
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.math.BigDecimal;
//存储记账的信息
@Data
public class AccountingDto {
//号型id
private String sizeId;
//类型id
private String typeId;
//单价
private BigDecimal price;
//记账数量
private Integer modifyQuantity;
}
package com.junmp.jyzb.api.bean.dto;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
......@@ -127,14 +125,23 @@ public class BusFormDto {
private String note;
/**
* 供应商id
* 商id
*/
private String supplierId;
/**
* 供应商名称
* 商名称
*/
private String supplierName;
/**
* 厂商类型(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
private Integer agencyType;
/**
* 装备类别拼接
*/
private String invList;
/**
* 仓库id
......@@ -158,23 +165,18 @@ public class BusFormDto {
private String updateUser;
/**
* 报废类型(1报废出库,2移入报废区)
* 报废销毁类型(1销毁出库,2移入报废区)
*/
private Integer type;
/**
* 维修单位id
*/
private String repairId;
/**
* 维修单位名称
*/
private String repairName;
/**
* 销毁、报废单位id
* 单据使用次数(forbidden禁止使用,outgoing 仅出库使用,incoming仅入库使用,bothuseing出入库都可以使用一次)
*/
private String destoryId;
private String useCount;
/**
* 销毁、报废单位名称
* 审核人信息
*/
private String destoryName;
private String currentAssign;
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ESOrgDto {
private List<OrgDto> orgDto;
private ArrayList ids;
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ESTypeDto {
private List<EquipmentTypeDto> typeDto;
private ArrayList ids;
}
......@@ -9,20 +9,36 @@ import java.io.Serializable;
*/
@Data
public class EqsSumDto implements Serializable {
/**
* 装备类型id
*/
private String typeId;
/**
* 装备类型名称
*/
private String typeName;
/**
* 装备类型id
*/
private String sizeId;
/**
* 装备类型名称
*/
private String sizeName;
//组织机构id
private Long orgId;
//组织机构名称
private String orgName;
//总数(单警柜+仓库
private Integer totalSum;
//仓库在库数
private Integer inSum;
//总数(在库数+出库数
private Integer number;
//仓库在库数(包含报废区)
private Integer ckStockNumber;
//仓库出库数
private Integer outSum;
private Integer ckOutboundNumber;
//单警柜出库数
private Integer cabinetOutSum;
private Integer djgOutboundNumber;
//单警柜在库数
private Integer cabinetInSum;
//报废数
private Integer brokenSum;
private Integer djgStockNumber;
//销毁
private Integer destructionNumber;
}
......@@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
......@@ -22,4 +23,10 @@ public class EquipmentTypeDto {
private Boolean isLeaf;
private List<String> supplierList;
private String photo;
private Integer childCount;
private List<EquipmentTypeDto> children = new ArrayList<>();
public void addChild(EquipmentTypeDto child) {
children.add(child);
}
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class GeneratePurchaseQuicklyDto {
private String sizeId;
private String sizeName;
private String typeId;
private String typeName;
private Integer number;
}
......@@ -69,6 +69,8 @@ public class InventoryDto implements Serializable {
*/
private String locationId ;
private String locationName;
/**
* 价格
*/
......@@ -91,7 +93,8 @@ public class InventoryDto implements Serializable {
/**
* 组织机构id
*/
private Long orgId;
private String orgId;
private Long orgIdInt;
/**
* 组织机构
*/
......
......@@ -63,4 +63,11 @@ public class InventorySumDto {
*number 库存数量
*/
private Integer number;
private Integer ckStockNumber;
private Integer djgStockNumber;
private Integer ckOutboundNumber;
private Integer djgOutboundNumber;
private Integer totalNumber;
private Integer destructionNumber;
}
......@@ -3,6 +3,7 @@ package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
......@@ -10,7 +11,7 @@ public class LogDetailDto implements Serializable {
/**
* 出入库明细ID
*/
private Integer id;
private Long id;
/**
* 物资id
......@@ -20,7 +21,7 @@ public class LogDetailDto implements Serializable {
/**
* 出入库汇总ID
*/
private Integer summaryId;
private Long summaryId;
/**
* 单据ID
......@@ -35,17 +36,17 @@ public class LogDetailDto implements Serializable {
/**
* 装备名称
*/
private String equipmentName;
private String typeName;
/**
* 装备号型
*/
private String equipmentSize;
private String sizeName;
/**
* 供应商
*/
private String equipmentSupplier;
private String supplierName;
/**
* 装备类型:0单件/1装备包
......@@ -97,4 +98,8 @@ public class LogDetailDto implements Serializable {
* 存储名称:XX仓库,XX单警柜
*/
private String locationName;
private BigDecimal price;
private String outInState;
}
......@@ -11,7 +11,7 @@ public class LogSummaryDto implements Serializable {
/**
* 出入库汇总ID
*/
private Integer id;
private Long id;
/**
* 组织机构ID
......@@ -67,6 +67,8 @@ public class LogSummaryDto implements Serializable {
*/
private Integer outInState;
private Integer number;
/**
* 照片信息
*/
......@@ -96,10 +98,6 @@ public class LogSummaryDto implements Serializable {
* 创建人员
*/
private String createUser;
/**
* 装备详细信息
*/
private List<LogDetailDto> logList;
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.math.BigDecimal;
//日常出入库输出类,用于更新计算库存汇总表中的数据
@Data
public class NormalInOutDto {
/**
*orgId 组织机构id
*/
private Long orgId;
/**
*orgName 组织机构名称
*/
private String orgName;
/**
*typeId 装备类型id
*/
private String typeId;
/**
*typeName 装备类型名称
*/
private String typeName;
/**
*sizeId 装备型号id
*/
private String sizeId;
/**
*sizeName 装备型号名称
*/
private String sizeName;
/**
* 位置信息id
*/
private String locationId;
/**
* 位置名称
*/
private String locationName;
/**
* 单价
*/
private BigDecimal price;
/**
*number 库存数量
*/
private Integer number;
//出入库状态
private String OutInState;
}
......@@ -37,6 +37,8 @@ public class OrderDetailDto implements Serializable {
* 实际数量
*/
private Integer actualNum;
//记账数量
private Integer modifyQuantity;
private BigDecimal price;
......
......@@ -76,9 +76,9 @@ public class OrderDto implements Serializable {
private String invList;
/**
* 生产厂商id
* 生产厂商
*/
private String manufacturerId;
private String manufacturerName;
/**
* 明细列表
*/
......@@ -87,5 +87,20 @@ public class OrderDto implements Serializable {
private Date useDate;
private String createUser;
private String allocateType;
private String repairName;
private String destoryName;
/**
* 附件地址
*/
private String attachmentLocation;
/**
* 归还人id,归还入库特有(相当于领用人)
*/
private String returnUserId;
private String returnUser;
}
......@@ -12,12 +12,15 @@ public class OrgDto {
private String orgCode;
private Integer isDepartment;
private Long orgParentId;
private String orgParentIds;
private String areaName;
private String levelFlag;
private String dName;
private Boolean isLeaf;
private Integer statusFlag;
private Integer childCount;
private List<OrgDto> children = new ArrayList<>();
public void addChild(OrgDto child) {
children.add(child);
}
......
......@@ -24,6 +24,8 @@ public class PolicemanDto {
private String photo;
private String tel;
private String phone;
//单警柜编号
private String cabinetNum;
......@@ -40,7 +42,28 @@ public class PolicemanDto {
private Boolean isCreatedAccount;
//指纹信息列表
private List<PoliceFingerDto> fingersList;
private String fileContent;
private Long userId;
//用户名
private String account;
/**
* 角色id列表
*/
private List<Long> rolesList;
/**
* 0警员,1辅警
*/
private Integer identity;
/**
* 人脸照片list
*/
private List<String> faceInfoList;
/**
* 指纹照片list
*/
private List<String> fingerList;
}
\ No newline at end of file
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
/**
* 流程单据具体装备输出实体类
*/
@Data
public class ProcessOrderDto {
/**
* 出入库单据
*/
private OrderDto orderDto;
/**
* 业务单据
*/
private BusFormDto busFormDto;
/**
* 调岗单据
*/
private ReassignmentDto reassignmentDto;
/**
* 盘库单据
*/
private StocktakeDto stocktakeDto;
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.io.Serializable;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/3 13:21
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
public class ProductBatchDto implements Serializable {
/**
* 批次编号
*/
private Long batchId;
/**
* 批次号
*/
private String batchNo;
/**
* 产品编号
*/
private Long productId;
/**
* 产品名称
*/
private String productName;
/**
* 广告语
*/
private String adInfo;
/**
* 号型编号
*/
private Long specId;
/**
* 号型
*/
private String spec;
/**
* 重量
*/
private String weight;
/**
* 材质
*/
private String material;
/**
* 计划生产数
*/
private Integer total;
/**
* 是否复检完成
*/
private Boolean hasFinish;
/**
* 是否初始化完成
*/
private Boolean hasInit;
/**
* 已生产数量
*/
private Integer doneNum;
/**
* 初始化数量
*/
private Integer initNum;
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.io.Serializable;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/3 13:21
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
public class ProductProcessDto implements Serializable {
/**
* 批次编号
*/
private Long batchId;
/**
* 批次号
*/
private String batchNo;
/**
* 产品编号
*/
private Long productId;
/**
* 产品名称
*/
private String productName;
/**
* 广告语
*/
private String adInfo ;
/**
* 号型编号
*/
private Long specId;
/**
* 号型
*/
private String spec;
/**
* 重量
*/
private String weight;
/**
* 材质
*/
private String material;
/**
* 计划生产数
*/
private Integer total;
/**
* 是否复检完成
*/
private Boolean hasFinish;
/**
* 是否初始化完成
*/
private Boolean hasInit;
/**
* 已自检数量
*/
private Integer checkedNum;
/**
* 待自检数量
*/
private Integer waitingNum;
}
package com.junmp.jyzb.api.bean.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/5 15:32
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
public class ProductTagDto implements Serializable {
private Long tagId ;
private String productCode ;
private String password;
private String ciphertext ;
private String productName ;
private Date produceTime ;
private String spec ;
private String material ;
private String weight ;
private String companyName ;
private String adInfo ;
}
package com.junmp.jyzb.api.bean.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class ReassignmentDto {
/**
* id
*/
private String id;
/**
* 经办人
*/
private String userName;
/**
* 工作流id
*/
private String processId;
/**
* 订单编号
*/
private String orderCode;
/**
* 调岗警员id
*/
private String policeId;
/**
* 调岗警员姓名
*/
private String policeName;
/**
* 警员带走装备
*/
private String eqsList;
/**
* 组织机构id(谁申请,就是谁的组织机构号)
*/
private Long orgId;
private String orgName;
/**
* 警员
*/
private String policeCode;
/**
* 调岗原因
*/
private String note;
/**
* 审核状态(none未接入工作流,working审批中,finished审批完成)
*/
private String examineState;
/**
* 申请时间
*/
private Date applyTime;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建人员
*/
private String createUser;
/**
* 更新人员
*/
private String updateUser;
/**
* 装备总数
*/
private Integer totalNum;
/**
* 装备总金额
*/
private BigDecimal price;
/**
* 类型(调入警员0,调出警员1)
*/
private Integer reassigmentType;
}
\ No newline at end of file
package com.junmp.jyzb.api.bean.dto;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
......@@ -34,9 +35,20 @@ public class StocktakeDto implements Serializable {
private Long orgId;
/**
* 组织机构名称
*/
private String orgName;
/**
* 仓库id
*/
private String locationId;
/**
* 仓库名称
*/
private String locationName;
/**
* 盘库类型(0全盘,1根据货架位置盘,2根据装备类型盘)
*/
......@@ -48,9 +60,19 @@ public class StocktakeDto implements Serializable {
private String shelfId;
/**
* 货架位置(类型为1时特有)
*
*/
private String shelfLocation;
private Integer shelfRanges;
/**
* 列
*/
private Integer shelfColumns;
/**
* 行
*/
private Integer shelfRows;
/**
* 号型id(类型为2时特有)
......@@ -122,4 +144,6 @@ public class StocktakeDto implements Serializable {
* 更新人员
*/
private String updateUser;
}
}
\ No newline at end of file
......@@ -33,6 +33,11 @@ public class SupplierDto {
private String shortName;
/**
* 类型(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
private Integer agencyType;
/**
* 联系人
*/
private String contacts;
......
package com.junmp.jyzb.api.bean.dto.TjDto;
import lombok.Data;
import java.util.List;
@Data
public class FinalTjOrgEqsDto {
// 合计总数
private Integer totalNumber;
// 合计仓库在库数
private Integer ckStockNumber;
// 合计单警柜在库数
private Integer djgStockNumber;
// 合计仓库出库数
private Integer ckOutboundNumber;
// 合计单警柜出库数
private Integer djgOutboundNumber;
// 合计销毁数
private Integer destructionNumber;
// 每个组织机构的装备数
private List<TjOrgEqsDto> tjOrgEqsDto;
}
package com.junmp.jyzb.api.bean.dto.TjDto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class FinalTjOrgPriceDto {
// 合计年初数量
private Integer startNum;
// 合计年初金额
private BigDecimal startPrice;
// 合计年末数量
private Integer endNum;
// 合计年末金额
private BigDecimal endPrice;
// 合计本年度新增数量
private Integer addNum;
// 合计本年度销毁数量
private Integer destoryNum;
// 组织机构装备新增情况list
private List<TjOrgPriceDto> tjOrgPriceDto;
}
package com.junmp.jyzb.api.bean.dto.TjDto;
import lombok.Data;
import java.util.List;
@Data
public class TjOrgEqsDto {
/**
* 组织机构id
*/
private Long orgId;
/**
* 组织机构名称
*/
private String orgName;
/**
* 组织机构编码
*/
private String orgCode;
/**
* 上层组织机构id
*/
private Long parentId;
/**
* 装备总数
*/
private Integer totalNumber;
/**
* 在库数(仓库数)
*/
private Integer ckStockNumber;
/**
* 出库数(仓库数)
*/
private Integer ckOutboundNumber;
/**
* 单警柜在库数
*/
private Integer djgStockNumber;
/**
* 单警柜出库数
*/
private Integer djgOutboundNumber;
/**
* 销毁数
*/
private Integer destructionNumber;
}
package com.junmp.jyzb.api.bean.dto.TjDto;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class TjOrgPriceDto {
/**
* 组织机构id
*/
private Long orgId;
/**
* 组织机构名称
*/
private String orgName;
/**
* 组织机构编码
*/
private String orgCode;
/**
* 上层组织机构id
*/
private Long parentId;
// 年初数量
private Integer startNum;
// 年初金额
private BigDecimal startPrice;
// 年末数量
private Integer endNum;
// 年末金额
private BigDecimal endPrice;
// 本年度新增数量
private Integer addNum;
// 本年度销毁数量
private Integer destoryNum;
private String sizeId;
private String sizeName;
private String typeId;
private String typeName;
}
package com.junmp.jyzb.api.bean.query;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class BussinessOrderDetialReq {
private String id;
private Long orgId;
private String orgName;
private String typeId;
private String typeName;
private String sizeId;
private String sizeName;
private String locationType;
private String locationName;
private String locationId;
private Integer planNum;
private BigDecimal unitPrice;
private BigDecimal price;
private String note;
private BigDecimal totalPrice;
//备注
private String remark;
}
package com.junmp.jyzb.api.bean.query;
import lombok.Data;
import java.util.List;
@Data
public class EpcCheckReq {
private List<String> epcList;
}
package com.junmp.jyzb.api.bean.query.InAndOutRecordReq;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class DetailLogReq {
private Integer summaryId;
private String inventoryId;
private String bussinessType;
private String epc;
private String sizeId;
private String typeId;
private String typeName;
private String sizeName;
private String supplierId;
private String supplierName;
private Integer errorState;
private BigDecimal price;
private Integer equipmentType;
}
package com.junmp.jyzb.api.bean.query.InAndOutRecordReq;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class DetailOrderReq {
private String id;
private String orderType;
private BigDecimal price;
private Integer actualNum;
}
package com.junmp.jyzb.api.bean.query.InAndOutRecordReq;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class OrderReq {
private String id;
private BigDecimal price;
private Integer actualQuantity;
private Integer orderState;
private List<DetailOrderReq> orderDetail;
private List<PurchaseEqsReq> purchaseList;
}
package com.junmp.jyzb.api.bean.query.InAndOutRecordReq;
import lombok.Data;
import java.util.List;
@Data
public class OutInLogsReq {
//组织机构id
private Long orgId;
//组织机构名称
private String orgName;
//设备标识
private String device;
//出入设备
private Integer deviceType;
//业务类型
private String bussinessType;
//出入状态
private String outInState;
//所属位置(0仓库1单警柜)
private Integer locationType;
private OrderReq orderMain;
private List<SummaryLogReq> logSummaryList;
}
package com.junmp.jyzb.api.bean.query.InAndOutRecordReq;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class PurchaseEqsReq {
private String epc;
private String typeId;
private String typeName;
private String sizeId;
private String sizeName;
private Date productionDate;
private Integer warranyPeriod;
private Integer maintenancePeriod;
private String supplierId;
private String supplierName;
//装备类型0单件,1装备包
private Integer equipmentType;
private BigDecimal price;
}
package com.junmp.jyzb.api.bean.query.InAndOutRecordReq;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class SummaryLogReq {
private String orderMainId;
private String orderCode;
private String locationId;
private String locationName;
private String userName;
private Date useTime;
private String picture;
private String equipmentList;
private Integer number;
private List<DetailLogReq> logDetailList;
}
......@@ -139,6 +139,7 @@ public class InventoryReq extends BaseRequest {
* 位置ID
*/
private String locationId ;
private String locationName;
/**
* 是否遗失
*/
......
......@@ -9,6 +9,8 @@ import lombok.Getter;
@Data
@EqualsAndHashCode(callSuper = true)
public class InventorySumReq extends BaseRequest {
private String id;
/**
* 组织机构
*/
......
package com.junmp.jyzb.api.bean.query;
import com.baomidou.mybatisplus.annotation.TableField;
import com.junmp.v2.common.bean.request.ValidationApi;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
......@@ -10,7 +14,7 @@ public class LogDetailReq {
/**
* 出入库明细ID
*/
private Integer id;
private Long id;
/**
* 物资id
......@@ -20,12 +24,9 @@ public class LogDetailReq {
/**
* 出入库汇总ID
*/
private Integer summaryId;
@NotNull(message = "出入库记录汇总id不能为空",groups = {ValidationApi.detail.class})
private Long summaryId;
/**
* 单据ID
*/
private String orderMainId;
/**
* EPC信息
......@@ -88,13 +89,4 @@ public class LogDetailReq {
*/
private Integer deviceType;
/**
* 存储ID
*/
private String locationId;
/**
* 存储名称:XX仓库,XX单警柜
*/
private String locationName;
}
......@@ -7,6 +7,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
......@@ -17,12 +18,12 @@ public class LogSummaryReq extends BaseRequest {
/**
* 出入库汇总ID
*/
private Integer id;
private Long id;
/**
* 组织机构ID
*/
@NotNull(message = "组织机构id不能为空",groups = {detail.class})
@NotNull(message = "组织机构id不能为空",groups = {page.class})
private Long orgId;
/**
......@@ -33,6 +34,7 @@ public class LogSummaryReq extends BaseRequest {
/**
* 单据id
*/
@NotBlank(message = "单据id不能为空",groups = {detail.class})
private String orderMainId;
/**
......@@ -40,10 +42,6 @@ public class LogSummaryReq extends BaseRequest {
*/
private String locationId;
/**
* 箱门id
*/
private String cabinetboxId;
/**
* 存储名称:XX仓库,XX单警柜
......@@ -53,6 +51,7 @@ public class LogSummaryReq extends BaseRequest {
/**
* 0仓库,1单警柜
*/
@NotNull(message = "位置不能为空",groups = {page.class})
private Integer locationType;
/**
......@@ -80,9 +79,11 @@ public class LogSummaryReq extends BaseRequest {
private String userName;
/**
* 出入库类型:0出库/1入库
* 出入库类型
*/
private Integer outInState;
private String outInState;
private Integer number;
/**
* 照片信息
......@@ -120,4 +121,9 @@ public class LogSummaryReq extends BaseRequest {
private String typeId;
private String column;
private String order;
private Date startTime;
private Date endTime;
}
......@@ -36,6 +36,7 @@ public class OrderDetailReq extends BaseRequest {
private Integer actualNum;
private BigDecimal price;
private String orderType;
......@@ -53,7 +54,7 @@ public class OrderDetailReq extends BaseRequest {
private String warehouseName;
/**
* 修改后数量
* 修改后数量(记账数量)
*/
private Integer modifyQuantity;
......
......@@ -19,6 +19,8 @@ public class OrderMainReq extends BaseRequest {
@NotBlank(message = "业务类型不能为空",groups = {edit.class})
private String orderType;
private String processInstanceId;
private String processId;
private String bussinessType;
......@@ -92,12 +94,12 @@ public class OrderMainReq extends BaseRequest {
/**
* 生产厂商id
*/
private String manufacturerId;
private String manufacturerName;
/**
* 调拨类型(2支拨,1价拨),调拨出入库才有
*/
private Integer transferType;
private Integer allocateType;
/**
* 归还人,归还入库特有
......
package com.junmp.jyzb.api.bean.query;
import com.junmp.jyzb.api.bean.req.FormEqsReq;
import com.junmp.v2.common.bean.request.ValidationApi;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
//警员调岗
@Data
public class PoliceReassignmentReq {
//调岗警员id
@NotBlank(message = "警员id不能为空",groups = {ValidationApi.edit.class})
private String id;
//目标组织机构id
@NotNull(message = "目标组织机构id不能为空",groups = {ValidationApi.edit.class})
private Long goalOrgId;
//需要带走的装备信息列表
private List<FormEqsReq> eqsReqList;
//调岗原因
private String note;
//工作流id
}
package com.junmp.jyzb.api.bean.query.ProcessReq;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class PoliceEquipmentReq {
/**
* 主键
*/
private String id;
/**
* 警员ID
*/
private String policeId;
private String policeName;
/**
* 装备号型id
*/
private String sizeId;
/**
*装备号型名称
*/
private String sizeName;
/**
* 装备类型id
*/
private String typeId;
/**
*装备类型名称
*/
private String typeName;
/**
* 装备数量
*/
private Integer num;
/**
* 组织机构ID
*/
private Long orgId;
//装备单价
private BigDecimal price;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建时间
*/
private Date createTime;
private List<PoliceEquipmentReq> list;
}
package com.junmp.jyzb.api.bean.query;
import com.junmp.v2.common.bean.request.BaseRequest;
import com.junmp.v2.validator.api.validators.unique.TableUniqueValue;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/2 10:11
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductBatchReq extends BaseRequest {
/**
* 批次主键
*/
@NotNull(message = "批次主键不能为空", groups = {edit.class, delete.class, detail.class})
private Long batchId;
/**
* 批次编号
*/
@NotBlank(message = "批次号不能为空", groups = {edit.class})
@TableUniqueValue(
message = "批次号重复",
groups = {edit.class},
tableName = "biz_product_batch",
columnName = "batch_no",
idFieldName = "batch_id")
private String batchNo;
/**
* 产品编号
*/
@NotNull(message = "批次主键不能为空", groups = {edit.class, add.class})
private Long productId;
/**
* 关联号型
*/
private Long specId;
/**
* 生产总量
*/
@NotNull(message = "批次主键不能为空", groups = {edit.class, add.class})
private Integer total;
/**
* 序号前缀
*/
private String prefix;
}
package com.junmp.jyzb.api.bean.query;
import com.junmp.v2.common.bean.request.BaseRequest;
import com.junmp.v2.validator.api.validators.unique.TableUniqueValue;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 16:29
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductReq extends BaseRequest {
@NotNull(message = "产品主键不能为空", groups = {edit.class, delete.class, detail.class})
private Long productId;
/**
* 产品代码
*/
@NotBlank(message = "产品编码不能为空", groups = {edit.class})
@TableUniqueValue(
message = "编码重复",
groups = {edit.class},
tableName = "biz_product",
columnName = "product_code",
idFieldName = "product_id")
private String productCode;
/**
* 产品当前序号
*/
private Integer sn;
/**
* 产品名称
*/
private String name;
/**
* 条码信息
*/
private String barcode;
/**
* 重量
*/
private String weight;
/**
* 规格尺寸
*/
private String spec;
/**
* 材质
*/
private String material;
/**
* 计量单位
*/
private String unit;
/**
* 广告信息
*/
private String adInfo;
/**
* 图片地址
*/
private String imageUrl;
/**
* 生产厂家编号
*/
private Long mfBizId;
/**
* 生产厂家名称
*/
private String mfBizName;
}
package com.junmp.jyzb.api.bean.query;
import com.junmp.v2.common.bean.request.BaseRequest;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 18:28
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductSkuReq extends BaseRequest {
@NotNull(message = "号型主键不能为空", groups = {edit.class, delete.class, detail.class})
private Long specId;
private String skuCode ;
/**
* 号型
*/
private String spec;
/**
* 重量
*/
private String weight;
/**
* 材质
*/
private String material;
/**
* 关联产品
*/
private Long productId;
/**
* 预览属性1
*/
private String attr1;
/**
* 预览属性2
*/
private String attr2;
/**
* 预览属性3
*/
private String attr3;
}
package com.junmp.jyzb.api.bean.query;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/2 14:36
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductTagReq extends BaseRequest {
/**
* 标签编号
*/
@NotNull(message = "标签编号不能为空", groups = {edit.class, delete.class, detail.class})
private Long tagId;
private String tagUid;
/**
* 成品码(批次+序号)
*/
private String productCode;
/**
* 关联生成批次编号
*/
@NotNull(message = "批次不能为空", groups = {add.class})
private Long batchId;
/**
* 关联生成产品主键
*/
@NotNull(message = "产品不能为空", groups = {add.class})
private Long productId;
/**
* 关联生成号型主键
*/
@NotNull(message = "号型不能为空", groups = {add.class})
private Long specId;
/**
* 产品序号
*/
private Integer serialId;
/**
* 版本编号
*/
private String versionNo;
/**
* 密码
*/
private String password;
/**
* 密文内容
*/
private String ciphertext;
}
......@@ -124,7 +124,7 @@ public class QueryBusFormReq extends BaseRequest {
/**
* 调拨类型(2支拨,1价拨)
*/
private Integer allocateType;
private String allocateType;
/**
* 备注
......@@ -132,14 +132,18 @@ public class QueryBusFormReq extends BaseRequest {
private String note;
/**
* 供应商id
* 商id
*/
private String supplierId;
/**
* 供应商名称
* 商名称
*/
private String supplierName;
/**
* 厂商类型(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
private Integer agencyType;
/**
* 仓库id
......@@ -183,24 +187,25 @@ public class QueryBusFormReq extends BaseRequest {
private String order;
/**
* 报废类型(1报废出库,2移入报废区)
* 报废销毁类型(1销毁出库,2移入报废区)
*/
private Integer type;
/**
* 维修单位id
*/
private String repairId;
/**
* 维修单位名称
* 单据使用次数(forbidden禁止使用,outgoing 仅出库使用,incoming仅入库使用,bothuseing出入库都可以使用一次)
*/
private String repairName;
private String useCount;
/**
* 销毁、报废单位id
*装备类别拼接
*/
private String destoryId;
private String invList;
/**
* 销毁、报废单位名称
* 装备名称
*/
private String destoryName;
private String typeName;
//当前登录人员
private String userId;
}
......@@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
......@@ -27,4 +28,6 @@ public class QueryEquipmentSizeReq extends BaseRequest {
private Integer state;
private String instructions;
private List<String> typeIdsList;
}
......@@ -16,5 +16,6 @@ public class QueryEquipmentTypeReq {
private String code;
private String parentId;
private Integer type;
private String typeName;
}
......@@ -13,6 +13,7 @@ public class QueryOrgReq {
private String orgCode;
@NotNull(message = "组织机构不能为空",groups = {ValidationApi.detail.class})
private Long orgId;
private String orgName;
private Long parentId;
private Integer isDepartment;
private Integer level;
......
package com.junmp.jyzb.api.bean.query;
import com.baomidou.mybatisplus.annotation.TableField;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
//警员调岗
@Data
@EqualsAndHashCode(callSuper = true)
public class QueryReassignmentReq extends BaseRequest {
/**
* id
*/
private String id;
/**
* 经办人
*/
private String userName;
/**
* 工作流id
*/
private String processDefinitionId;
private String orderCode;
/**
* 调岗警员id
*/
private String policeId;
/**
* 调岗警员姓名
*/
private String policeName;
/**
* 警员带走装备
*/
private String eqsList;
/**
* 组织机构id(警员原组织机构id)
*/
private Long orgId;
private String orgName;
/**
* 警员编号
*/
private String policeCode;
/**
* 调岗原因
*/
private String note;
/**
* 审核状态(none未接入工作流,working审批中,finished审批完成)
*/
private String examineState;
/**
* 申请时间
*/
private Date applyTime;
/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建人员
*/
private String createUser;
/**
* 更新人员
*/
private String updateUser;
/**
* 排序规则
*/
private String order;
/**
* 排序字段
*/
private String column;
/**
* 装备总数
*/
private Integer totalNum;
/**
* 装备总金额
*/
private BigDecimal price;
/**
* 类型(调入警员0,调出警员1)
*/
private Integer reassigmentType;
}
......@@ -16,6 +16,10 @@ public class QuerySupplierReq extends BaseRequest {
private String id;
private String code;
/**
* 类型(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
private Integer agencyType;
private String shortName;
......
package com.junmp.jyzb.api.bean.query;
import lombok.Data;
@Data
public class TestReq {
private String queueName;
}
package com.junmp.jyzb.api.bean.query.TjReq;
import lombok.Data;
import java.util.List;
@Data
public class TjOrgEqsReq {
//组织机构
private Long orgId;
List<String> typeIdsList;
private List<String> sizeNameList;
}
package com.junmp.jyzb.api.bean.query.TjReq;
import lombok.Data;
import java.util.List;
@Data
public class TjOrgPriceReq {
//组织机构
private Long orgId;
//类型idList
List<String> typeIdsList;
//号型名称list
private List<String> sizeNameList;
//年
private Integer year;
}
......@@ -13,7 +13,6 @@ public class FormEqsReq extends BaseRequest {
/**
* 主键
*/
@ApiModelProperty(value = "主键ID")
private String id;
/**
......@@ -42,16 +41,6 @@ public class FormEqsReq extends BaseRequest {
private String typeName;
/**
*供应商id
*/
private String supplierId;
/**
*供应商名称
*/
private String supplierName;
/**
* 装备数量
*/
private Integer num;
......
package com.junmp.jyzb.api.bean.req;
import lombok.Data;
import java.util.List;
@Data
public class GeneratePurchaseQuicklyReq {
//业务单
private List<UpdateBusFormReq> busFormList;
//组织机构id
private Long orgId;
//业务类型
private String bussinessType;
}
package com.junmp.jyzb.api.bean.req;
import lombok.Data;
/**
* 过质保期的数据汇总数据
*/
@Data
public class InvExpireReq {
private String typeId;
private String typeName;
private String sizeId;
private String sizeName;
private Long orgId;
private String locationId;
private String locationName;
private Integer sumExpireNumber;
private String userId;
}
......@@ -12,9 +12,9 @@ import java.util.List;
@Data
public class RabbitMqOrderReq implements Serializable {
//主单据
private OrderMainReq orderMainReq;
private OrderMainReq orderMain;
//子单据
private OrderDetailReq orderDetailReq;
private OrderDetailReq orderDetail;
//具体装备epc
private List<InventoryReq> inventoryReqList;
//设备标识
......
......@@ -38,7 +38,7 @@ public class UpdateBusFormReq extends BaseRequest {
/**
* 组织机构id
*/
@NotNull(message = "组织机构id不能为空",groups = {add.class})
// @NotNull(message = "组织机构id不能为空",groups = {add.class})
private Long orgId;
/**
......@@ -124,7 +124,7 @@ public class UpdateBusFormReq extends BaseRequest {
/**
* 调拨类型(2支拨,1价拨)
*/
private Integer allocateType;
private String allocateType;
/**
* 备注
......@@ -132,15 +132,18 @@ public class UpdateBusFormReq extends BaseRequest {
private String note;
/**
* 供应商id
* 商id
*/
private String supplierId;
/**
* 供应商名称
* 商名称
*/
private String supplierName;
/**
* 厂商类型(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
private Integer agencyType;
/**
* 仓库id
*/
......@@ -163,24 +166,18 @@ public class UpdateBusFormReq extends BaseRequest {
private String updateUser;
/**
* 报废类型(1报废出库,2移入报废区)
* 报废销毁类型(1销毁出库,2移入报废区)
*/
private Integer type;
/**
* 维修单位id
*/
private String repairId;
/**
* 维修单位名称
* 单据使用次数(forbidden禁止使用,outgoing 仅出库使用,incoming仅入库使用,bothuseing出入库都可以使用一次)
*/
private String repairName;
/**
* 销毁、报废单位id
*/
private String destoryId;
private String useCount;
/**
* 销毁、报废单位名称
*装备类别拼接
*/
private String destoryName;
private String invList;
}
......@@ -13,7 +13,7 @@ public class UpdateEquipmentSizeReq {
@NotBlank(message = "装备号型主键不能为空", groups = {ValidationApi.edit.class, ValidationApi.delete.class, ValidationApi.detail.class})
private String id;
@NotBlank(message = "装备类型id不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
private String typeId;
@NotBlank(message = "编码不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
private String code;
......
......@@ -31,11 +31,13 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
*/
private String processDefinitionId;
/**
* 工作流实例id
*/
private String processId;
/**
* 单据业务类型
*/
// @IsDateTime(format = "yyyy-MM-dd HH:mm:ss", message = "字段必须是有效的日期或时间")
private String bussinessType;
/**
* 订单号
......@@ -50,7 +52,7 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
* 发物单位
*/
// @IsNumber(message = "startOrgId必须是数字",groups = {add.class})
private Long startOrgId;
private String startOrgId;
/**
* 发物单位名称
*/
......@@ -64,7 +66,10 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
* 收物单位名称
*/
private String endOrgName;
/**
* 供应商id
*/
private String supplierId;
/**
* 供应商名称
*/
......@@ -127,24 +132,29 @@ public class UpdateOrderReq extends BaseRequest implements Serializable {
private List<UpdateOrderDetailReq> detailList;
/**
* 生产厂商id
* 生产厂商
*/
private String manufacturerId;
private String manufacturerName;
/**
* 调拨类型(2支拨,1价拨),调拨出入库才有
*/
private Integer transferType;
private String allocateType;
/**
* 归还人,归还入库特有
* 归还人id,归还入库特有(相当于领用人)
*/
private String returnUserId;
private String returnUser;
private Date useDate;
private String createUser;
private String updateUser;
//备注
private String note;
}
......@@ -53,7 +53,6 @@ public class UpdatePolicemanReq extends BaseRequest {
private Date updateTime;
@NotBlank(message = "身份证号不能为空", groups = {add.class,edit.class})
private String idCard;
private String updateUser;
......@@ -70,5 +69,16 @@ public class UpdatePolicemanReq extends BaseRequest {
* 角色id列表
*/
private List<Long> rolesList;
//当前登录人的id
private Long createUser;
/**
* 人脸照片list
*/
private List<String> faceInfoList;
/**
* 指纹照片list
*/
private List<String> fingerList;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.junmp.jyzb.api.bean.req;
import com.baomidou.mybatisplus.annotation.TableField;
import com.junmp.v2.common.bean.request.BaseRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
@Data
......@@ -14,6 +16,13 @@ public class UpdateReassignmentReq extends BaseRequest {
*/
private String id;
/**
* 经办人
*/
private String userName;
/**
* 申请人id
*/
private String userId;
/**
......@@ -22,6 +31,11 @@ public class UpdateReassignmentReq extends BaseRequest {
private String processDefinitionId;
/**
* 业务类型
*/
private String bussinessType;
/**
* 调岗警员id
*/
private String policeId;
......@@ -41,10 +55,12 @@ public class UpdateReassignmentReq extends BaseRequest {
*/
private Long orgId;
private String orgName;
/**
* 目标组织机构id
* 警员编号
*/
private Long targetOrgId;
private String policeCode;
/**
* 调岗原因
......@@ -55,15 +71,11 @@ public class UpdateReassignmentReq extends BaseRequest {
* 审核状态(none未接入工作流,working审批中,finished审批完成)
*/
private String examineState;
/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
* 申请时间
*/
private Date endTime;
private Date applyTime;
/**
* 创建时间
*/
......@@ -85,11 +97,17 @@ public class UpdateReassignmentReq extends BaseRequest {
private String updateUser;
/**
* 排序规则
* 装备总数
*/
private String order;
private Integer totalNum;
/**
* 排序字段
* 装备总金额
*/
private String column;
private BigDecimal price;
/**
* 类型(调入警员0,调出警员1)
*/
private Integer reassigmentType;
}
......@@ -17,6 +17,12 @@ public class UpdateSupplierReq {
@NotBlank(message = "供应商编码不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
private String code;
/**
* 类型,(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
@NotNull(message = "类型不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
private Integer agencyType;
private String shortName;
private String contacts;
......
......@@ -5,8 +5,11 @@ import com.junmp.v2.common.constant.CommonConstant;
import com.junmp.v2.common.exception.IExceptionEnum;
import lombok.Getter;
/**
* 装备异常信息,包括了size和type
*/
@Getter
public enum EquipmentTypeExceptionEnum implements IExceptionEnum {
public enum EquipmentExceptionEnum implements IExceptionEnum {
/**
* 装备类别不存在
......@@ -14,14 +17,24 @@ public enum EquipmentTypeExceptionEnum implements IExceptionEnum {
EQUIPMENT_TYPE_NOT_EXIST(CommonConstant.DEFAULT_CORE_ERROR_CODE + JYZBConstant.JYZB_EXCEPTION_STEP_CODE + 12, "装备或类别不存在"),
/**
* 装备类别不存在
* 有多关联装备,无法删除
*/
EQUIPMENT_CHILDREN_EXIST(CommonConstant.DEFAULT_CORE_ERROR_CODE + JYZBConstant.JYZB_EXCEPTION_STEP_CODE + 13, "有多关联装备,无法删除"),
/**
* 装备不存在
*/
SUPPLIER_NOT_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE + JYZBConstant.JYZB_EXCEPTION_STEP_CODE + 13, "{}");
SUPPLIER_NOT_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE + JYZBConstant.JYZB_EXCEPTION_STEP_CODE + 13, "{}"),
/**
* 装备名称重复
*/
EQUIPMENT_NAME_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE,"装备名称重复"),
/**
* 装备名称和编号重复
*/
EQUIPMENT_NAME_CODE_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE,"装备名称和编号重复"),
;
/**
......@@ -35,7 +48,7 @@ public enum EquipmentTypeExceptionEnum implements IExceptionEnum {
private final String message;
EquipmentTypeExceptionEnum(Integer code, String message) {
EquipmentExceptionEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
......
......@@ -13,6 +13,7 @@ public enum OrderExceptionEnum implements IExceptionEnum {
ORDERDETAIL_NOT_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE,"子单据不存在"),
ORDERDETAIL_ERROR(CommonConstant.DEFAULT_USER_ERROR_CODE,"子单据不一致,操作失败"),
ROLE_ERROR(CommonConstant.DEFAULT_USER_ERROR_CODE,"审核组织机构用户配置异常!请检查日志"),
ORDER_CREATE_ERROR(CommonConstant.DEFAULT_USER_ERROR_CODE,"单子创建失败"),
;
/**
......
......@@ -13,6 +13,12 @@
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
......
package com.junmp.jyzb.Repository;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.entity.ES.Blog;
import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.awt.print.Pageable;
import java.util.List;
public interface BlogRepository extends ElasticsearchRepository<Blog, Long> {
}
\ No newline at end of file
package com.junmp.jyzb.Repository;
import com.junmp.jyzb.entity.EquipmentType;
import com.junmp.jyzb.entity.PubOrg;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface PubOrgRepository extends ElasticsearchRepository<PubOrg, Long> {
}
package com.junmp.jyzb.Repository;
import com.junmp.jyzb.entity.EquipmentSize;
import com.junmp.jyzb.entity.EquipmentType;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface SizeRepository extends ElasticsearchRepository<EquipmentSize, Long> {
}
package com.junmp.jyzb.Repository;
import com.junmp.jyzb.api.bean.dto.EquipmentTypeDto;
import com.junmp.jyzb.entity.ES.Blog;
import com.junmp.jyzb.entity.EquipmentType;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface TypeRepository extends ElasticsearchRepository<EquipmentType, Long> {
}
......@@ -2,7 +2,9 @@ package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import com.junmp.jyzb.api.bean.dto.BusFormDto;
import com.junmp.jyzb.api.bean.dto.GeneratePurchaseQuicklyDto;
import com.junmp.jyzb.api.bean.query.QueryBusFormReq;
import com.junmp.jyzb.api.bean.req.GeneratePurchaseQuicklyReq;
import com.junmp.jyzb.api.bean.req.UpdateBusFormReq;
import com.junmp.jyzb.service.BusFormService;
import com.junmp.v2.common.bean.request.ValidationApi;
......@@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* 业务单据管理模块(只针对业务单据,不包含任何出入库单据)
......@@ -34,24 +37,10 @@ public class BussinessController {
@PostMapping("/AddBussinessOrder")
@ApiOperation("创建业务单")
public ApiRes<String> AddBussinessOrder(@RequestBody @Validated(ValidationApi.add.class) UpdateBusFormReq req){
//判断是否有工作流id,如果有则将状态进行修改
if (ObjectUtil.isEmpty(req.getProcessDefinitionId()))
{
req.setExamineState("none");
}
else
{
req.setExamineState("working");
}
return ApiRes.success(busFormService.AddBussinessOrder(req));
}
//修改业务单
@PostMapping("/UpdateBussinessOrder")
@ApiOperation("修改业务单")
public ApiRes<Boolean> UpdateBussinessOrder(@RequestBody @Validated(ValidationApi.edit.class) UpdateBusFormReq req){
return ApiRes.success(busFormService.UpdateBussinessOrder(req));
}
//查看业务单(可以条件查询)
@PostMapping("/showBussinessOrder")
......@@ -60,6 +49,11 @@ public class BussinessController {
return ApiRes.success(busFormService.showBussinessOrder(req));
}
//根据调拨单,一键生成采购单
@PostMapping("/GeneratePurchaseQuickly")
@ApiOperation("快速生成采购单")
public ApiRes<List<GeneratePurchaseQuicklyDto>> GeneratePurchaseQuickly(@RequestBody GeneratePurchaseQuicklyReq req){
return ApiRes.success(busFormService.GeneratePurchaseQuickly(req));
}
}
package com.junmp.jyzb.controller.ES;
import com.junmp.jyzb.Repository.BlogRepository;
import com.junmp.jyzb.entity.ES.Blog;
import com.junmp.jyzb.entity.EquipmentSize;
import com.junmp.jyzb.service.EquipmentSizeService;
import com.junmp.jyzb.service.EquipmentTypeService;
import com.junmp.jyzb.service.PubOrgService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Api(tags = "增删改查(文档)")
@RestController
@Slf4j
@RequestMapping("crud")
public class CrudController {
@Autowired
private BlogRepository blogRepository;
@Resource
public EquipmentTypeService equipmentTypeService;
@Resource
public EquipmentSizeService equipmentSizeService;
@Resource
public PubOrgService pubOrgService;
@ApiOperation("测试")
@PostMapping("testDocument")
public Object testDocument() {
return equipmentTypeService.addEs();
}
@ApiOperation("测试组织机构")
@PostMapping("testOrgDocument")
public Object testOrgDocument() {
return pubOrgService.AddToEs();
}
@ApiOperation("一键初始化ES")
@PostMapping("UpdateES")
public Object UpdateES() {
pubOrgService.AddToEs();
equipmentTypeService.addEs();
equipmentSizeService.addEs();
return true;
}
@ApiOperation("添加单个文档")
@PostMapping("addDocument")
public Blog addDocument() {
Long id = 1L;
Blog blog = new Blog();
blog.setBlogId(id);
blog.setTitle("巡特警" + id);
blog.setContent("巡特警手铐" + id);
blog.setAuthor("Tony");
blog.setCategory("ElasticSearch");
blog.setCreateTime(new Date());
blog.setStatus(1);
blog.setSerialNum(id.toString());
Long id1 = 2L;
Blog blog1 = new Blog();
blog1.setBlogId(id1);
blog1.setTitle("巡特警" + id1);
blog1.setContent("巡特警盾牌" + id1);
blog1.setAuthor("Tony");
blog1.setCategory("ElasticSearch");
blog1.setCreateTime(new Date());
blog1.setStatus(1);
blog1.setSerialNum(id1.toString());
blogRepository.save(blog1);
return blogRepository.save(blog);
}
@ApiOperation("添加多个文档")
@PostMapping("addDocuments")
public Object addDocuments(Integer count) {
List<Blog> blogs = new ArrayList<>();
for (int i = 1; i <= count; i++) {
Long id = (long)i;
Blog blog = new Blog();
blog.setBlogId(id);
blog.setTitle("Spring Data ElasticSearch学习教程" + id);
blog.setContent("这是添加单个文档的实例" + id);
blog.setAuthor("Tony");
blog.setCategory("ElasticSearch");
blog.setCreateTime(new Date());
blog.setStatus(1);
blog.setSerialNum(id.toString());
blogs.add(blog);
}
return blogRepository.saveAll(blogs);
}
/**
* 跟新增是同一个方法。若id已存在,则修改。
* 无法只修改某个字段,只能覆盖所有字段。若某个字段没有值,则会写入null。
* @return 成功写入的数据
*/
@ApiOperation("修改单个文档")
@PostMapping("editDocument")
public Blog editDocument() {
Long id = 1L;
Blog blog = new Blog();
blog.setBlogId(id);
blog.setTitle("Spring Data ElasticSearch学习教程" + id);
blog.setContent("这是修改单个文档的实例" + id);
// blog.setAuthor("Tony");
// blog.setCategory("ElasticSearch");
// blog.setCreateTime(new Date());
// blog.setStatus(1);
// blog.setSerialNum(id.toString());
return blogRepository.save(blog);
}
@ApiOperation("查找单个文档")
@GetMapping("findById")
public Blog findById(Long id) {
return blogRepository.findById(id).get();
}
@ApiOperation("删除单个文档")
@PostMapping("deleteDocument")
public String deleteDocument(Long id) {
blogRepository.deleteById(id);
return "success";
}
@ApiOperation("删除所有文档")
@PostMapping("deleteDocumentAll")
public String deleteDocumentAll() {
blogRepository.deleteAll();
return "success";
}
}
......@@ -2,9 +2,11 @@ package com.junmp.jyzb.controller;
import cn.hutool.db.Page;
import com.junmp.jyzb.api.bean.dto.EquipmentSizeDto;
import com.junmp.jyzb.api.bean.query.InventorySumReq;
import com.junmp.jyzb.api.bean.query.QueryEquipmentSizeReq;
import com.junmp.jyzb.api.bean.req.UpdateEquipmentSizeReq;
import com.junmp.jyzb.entity.EquipmentSize;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.service.EquipmentSizeService;
import com.junmp.v2.common.bean.request.ValidationApi;
import com.junmp.v2.common.bean.response.ApiRes;
......@@ -73,5 +75,18 @@ public class EquipmentSizeController {
return ApiRes.success(equipmentSizeService.changeSizeState(req));
}
//根据typeId返回号型名称
@PostMapping("/searchByTypeIds")
@ApiOperation("/根据装备类型返回装备号型名称")
public ApiRes<List<String>> searchByTypeIds(@RequestBody QueryEquipmentSizeReq req ){
return ApiRes.success(equipmentSizeService.getByTypeIds(req));
}
@PostMapping("/selectByTypeIds")
@ApiOperation("/根据装备类型返回装备所有装备子集")
public ApiRes<List<String>> selectByTypeIds(@RequestBody QueryEquipmentSizeReq req ){
return ApiRes.success(equipmentSizeService.selectByTypeIds(req.getTypeIdsList()));
}
}
package com.junmp.jyzb.controller;
import com.junmp.jyzb.api.bean.dto.ESTypeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTypeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTreeDto;
import com.junmp.jyzb.api.bean.query.QueryEquipmentTypeReq;
......@@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
@RestController
......@@ -49,7 +51,11 @@ public class EquipmentTypeController {
public ApiRes<List<EquipmentTypeDto>> ShowEquipmentList(@RequestBody QueryEquipmentTypeReq req) {
return ApiRes.success(equipmentTypeService.getEquipmentList(req));
}
@PostMapping("/ShowEquipmentESList")
@ApiOperation("通过ES模糊检索类别列表")
public ApiRes<ESTypeDto> ShowEquipmentESList(@RequestBody QueryEquipmentTypeReq req) throws IOException {
return ApiRes.success(equipmentTypeService.getTypeTreeByEs(req));
}
@PostMapping("/GetEquipmentDetail")
@ApiOperation("查询单个物资信息")
......
......@@ -4,9 +4,11 @@ import com.junmp.jyzb.api.bean.dto.*;
import com.junmp.jyzb.api.bean.query.*;
import com.junmp.jyzb.api.bean.req.BatchEditingInvsReq;
import com.junmp.jyzb.api.bean.req.EquipmentBindReq;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.entity.LogDetail;
import com.junmp.jyzb.entity.LogSummary;
import com.junmp.jyzb.entity.PubOrg;
import com.junmp.jyzb.service.*;
import com.junmp.v2.common.bean.request.ValidationApi;
import com.junmp.v2.common.bean.response.ApiRes;
......@@ -18,7 +20,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.*;
@RestController
@Slf4j
......@@ -33,6 +35,13 @@ public class InventoryController {
public MQProductService mqProductService;
@GetMapping("/TestSum")
@ApiOperation("根据组织机构查询库存信息")
public ApiRes<Boolean> TestSum( ) {
inventorySummaryService.MonthStartSum();
return ApiRes.success();
}
@GetMapping("/testMQ")
@ApiOperation("根据组织机构查询库存信息")
public ApiRes<Boolean> testMQ( ) {
......@@ -41,7 +50,8 @@ public class InventoryController {
}
//填充汇总信息(将表中的数据base_inventory_summary进行删除并且根据base_inventory表中数据同步)
//填充汇总信息(根据base_inventory表中数据汇总同步)--第一次进行数据同步,适用于3.0初始化inventory_summary表
//该方法只有插入语句,要注意inventory_summary表中没有数据,仅有结构,否则数据不准确
@PostMapping("/SetInventoryMsg")
@ApiOperation("填充汇总表信息")
public ApiRes<Boolean> setInventoryMsg() {
......@@ -91,6 +101,14 @@ public class InventoryController {
return ApiRes.success(inventorySummaryService.getEquipmentInfo(req));
}
@PostMapping("/getOne")
@ApiOperation("获取单个库存的数量")
public ApiRes<InventorySummary> getOne(@RequestBody InventorySumReq req){
return ApiRes.success(inventorySummaryService.getOne(req));
}
//根据组织机构id/单警柜id/仓库id查询出库存汇总数量以及金额(和getEquipmentInfo同时调用,汇总出符合查询条件的装备)
@PostMapping("/getTotalNumberAndPrice")
@ApiOperation("查询总金额以及各个汇总数量")
......@@ -112,6 +130,7 @@ public class InventoryController {
public ApiRes<List<EqsBriefDto>> searchEqsByBoxId(@RequestBody @Validated(ValidationApi.detail.class) CabinetBoxReq req){
return ApiRes.success(inventoryService.searchEqsByBoxId(req));
}
//查询箱门(cabinetBox下)所有装备简要信息列表page(传递cabinetBoxId)
@PostMapping("/searchEqsByBoxIdPage")
@ApiOperation("查询某一箱门下的所有装备简要信息(page)")
......@@ -126,6 +145,7 @@ public class InventoryController {
public ApiRes<List<InventorySummary>> EqsByCabinetBoxId(@RequestBody @Validated(ValidationApi.detail.class)CabinetBoxReq req){
return ApiRes.success(inventoryService.EqsByCabinetBoxId(req));
}
//查询单警柜箱门下的汇总信息(传递cabinetBoxId)
@PostMapping("/EqsByCabinetBoxIdPage")
@ApiOperation("查询箱门下的汇总信息(page)")
......@@ -139,6 +159,7 @@ public class InventoryController {
public ApiRes<List<InventorySummary>> ShelfInventoryList(@RequestBody @Validated(ValidationApi.edit.class) ShelfReq req){
return ApiRes.success(inventoryService.ShelfInventoryList(req));
}
//根据货架id查询装备信息汇总 (page)
@PostMapping("/ShelfInventoryPage")
@ApiOperation("根据货架id查询装备信息汇总(page)")
......@@ -215,35 +236,8 @@ public class InventoryController {
return ApiRes.success(inventoryService.BatchEditingInvsInfo(req));
}
//装备出入库记录(根据单据id)
@PostMapping("/ShowInOutRecordsByOrder")
@ApiOperation("出入库单据查询展示")
public ApiRes<PageResult<LogSummary>> ShowInOutRecordsByOrder(@RequestBody @Validated(ValidationApi.detail.class) LogSummaryReq req){
return ApiRes.success(inventoryService.ShowInOutRecordsByOrder(req));
}
//装备出入库记录(根据条件查询)
@PostMapping("/ShowInOutRecordsByItems")
@ApiOperation("出入库记录条件查询展示")
public ApiRes<PageResult<LogSummary>> ShowInOutRecordsByItems(@RequestBody @Validated(ValidationApi.detail.class) LogSummaryReq req){
return ApiRes.success(inventoryService.ShowInOutRecordsByItems(req));
}
//通过装备id查询某一件装备的出入库记录
@PostMapping("/ShowInOutRecordsByEqs")
@ApiOperation("出入库记录装备id查询展示")
public ApiRes<PageResult<LogDetail>> getInOutRecords(@RequestBody @Validated(ValidationApi.detail.class) InventoryReq req){
return ApiRes.success(inventoryService.getInOutRecords(req));
}
@PostMapping("/test")
public ApiRes<Boolean> test(@RequestBody InventorySumReq req){
System.out.println("req = " + req);
return ApiRes.success(true);
}
//首页上的装备统计数量
@PostMapping("/EquipmentStatistics")
@ApiOperation("装备数量数据统计")
public ApiRes<List<InventorySummary>> EquipmentStatistics(@RequestBody InventorySumReq req){
......@@ -251,7 +245,19 @@ public class InventoryController {
return ApiRes.success(inventorySummaryService.EquipmentStatistics(req));
}
//判断epc是否存在
@PostMapping("/checkEPCList")
@ApiOperation("判断epc是否存在")
public ApiRes<List<String>> checkEPCList(@RequestBody EpcCheckReq req){
return ApiRes.success(inventoryService.checkEPCList(req));
}
//调用存储过程将汇总信息进行插入
@PostMapping("/insertToSummary")
@ApiOperation("将汇总信息进行插入更新")
public ApiRes<Boolean> insertToSummary(){
return ApiRes.success(inventorySummaryService.insertToSummary());
}
}
......@@ -71,81 +71,81 @@ public class MessageSendController {
// messageApi.pushMsgToUser(String.valueOf(userId),count1);
//消息推送场景1:物资低于物资阈值
@PostMapping("/aaa")
public ApiRes<Boolean> action1() {
// @PostMapping("/aaa")
// public ApiRes<Boolean> action1() {
//获取装备信息汇总,并且判断装备的汇总数量是否低于装备阈值,如果低于装备阈值,则进行消息提醒
//所有待判断的物资
LambdaQueryWrapper<InventorySummary> wrapper = new LambdaQueryWrapper<InventorySummary>()
.eq(InventorySummary::getLocationType, 0);
//分页参数
int pageSize=1000;
int currentPage=1;
//获取装备的所有库存数量
long termCount= inventorySummaryService.count(wrapper);
List<InventorySummary> list=new ArrayList<>();
if (termCount>0) {
// 分页查询
while ((currentPage - 1) * pageSize < termCount) {
List<InventorySummary> inventorySummaryList = processPageData1(currentPage, pageSize);
currentPage++;
list.addAll(inventorySummaryList);
}
}
//超期物资查询出来之后,将超期物资进行消息推送提醒
//直接对list进行处理操作推送消息即可
for (InventorySummary inventorySummary:list) {
MessageSendReq sendReq = new MessageSendReq();
sendReq.setSendUserId("1000");
sendReq.setReceiveUserIds("1000");
sendReq.setMsgTitle("物资低于阈值");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictItemId, "1698969902300176385"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent(inventorySummary.getLocationName()+"仓库下的"+inventorySummary.getTypeName()+",号型为:"+inventorySummary.getSizeName()+"的物资低于阈值");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
}
messageApi.queryCount(new MessageReq());
/*推送发送未读数量*/
List<Long> userIdList=new ArrayList<>();
userIdList.add(1000L);
for(Long userId :userIdList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(userId);
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(String.valueOf(userId),count1);
}
return ApiRes.success(true);
}
// 处理每页数据
private List<InventorySummary> processPageData1(long pageSize, long currentPage) {
//得到全局默认值(随机处理数据表中的一条数据为默认值)
Integer threshold = equipmentTypeService.getById(100001).getThreshold();
//查询inventory_summary表中的threshold字段是否存在值,
// 如果存在则用summary表中的字段进行比较物资阈值,如果不存在则默认使用全局物资阈值进行比较
LambdaQueryWrapper<InventorySummary> wrapper = new LambdaQueryWrapper<InventorySummary>()
.eq(InventorySummary::getLocationType, 0);
Page<InventorySummary> page = inventorySummaryService.page(PageFactory.getDefaultPage(pageSize, currentPage),wrapper);
List<InventorySummary> records = page.getRecords();
//使用自定义物资阈值进行比较
List<InventorySummary> collect1 = records.stream()
.filter(data -> ObjectUtil.isNotNull(data.getThreshold()))
.filter(data -> data.getNumber() <= data.getThreshold())
.collect(Collectors.toList());
//使用全局物资阈值进行比较
List<InventorySummary> collect2 = records.stream()
.filter(data -> data.getNumber() <= threshold && ObjectUtil.isNull(data.getThreshold()))
.collect(Collectors.toList());
//将数据存储到一个list中
List<InventorySummary> inventorySummaryList=new ArrayList<>();
inventorySummaryList.addAll(collect1);
inventorySummaryList.addAll(collect2);
return inventorySummaryList;
}
// LambdaQueryWrapper<InventorySummary> wrapper = new LambdaQueryWrapper<InventorySummary>()
// .eq(InventorySummary::getLocationType, 0);
// //分页参数
// int pageSize=1000;
// int currentPage=1;
// //获取装备的所有库存数量
// long termCount= inventorySummaryService.count(wrapper);
// List<InventorySummary> list=new ArrayList<>();
// if (termCount>0) {
// // 分页查询
// while ((currentPage - 1) * pageSize < termCount) {
// List<InventorySummary> inventorySummaryList = processPageData1(currentPage, pageSize);
// currentPage++;
// list.addAll(inventorySummaryList);
// }
// }
// //超期物资查询出来之后,将超期物资进行消息推送提醒
// //直接对list进行处理操作推送消息即可
// for (InventorySummary inventorySummary:list) {
// MessageSendReq sendReq = new MessageSendReq();
// sendReq.setSendUserId("1000");
// sendReq.setReceiveUserIds("1000");
// sendReq.setMsgTitle("物资低于阈值");
// //设置业务类型
// SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
// .eq(SysDictItem::getDictItemId, "1698969902300176385"));
// sendReq.setBizType(one.getItemValue());
// sendReq.setMsgContent(inventorySummary.getLocationName()+"仓库下的"+inventorySummary.getTypeName()+",号型为:"+inventorySummary.getSizeName()+"的物资低于阈值");
// sendReq.setPriority("0");
// sendReq.setSendTime(DateTime.now());
// messageApi.sendMessage(sendReq);
// }
// messageApi.queryCount(new MessageReq());
// /*推送发送未读数量*/
// List<Long> userIdList=new ArrayList<>();
// userIdList.add(1000L);
// for(Long userId :userIdList){
// MessageReq req1 = new MessageReq();
// req1.setReadFlag(0);
// req1.setReceiveUserId(userId);
// Integer count1 = messageApi.queryCount(req1);
// messageApi.pushMsgToUser(String.valueOf(userId),count1);
// }
// return ApiRes.success(true);
// }
// // 处理每页数据
// private List<InventorySummary> processPageData1(long pageSize, long currentPage) {
// //得到全局默认值(随机处理数据表中的一条数据为默认值)
// Integer threshold = equipmentTypeService.getById(100001).getThreshold();
// //查询inventory_summary表中的threshold字段是否存在值,
// // 如果存在则用summary表中的字段进行比较物资阈值,如果不存在则默认使用全局物资阈值进行比较
// LambdaQueryWrapper<InventorySummary> wrapper = new LambdaQueryWrapper<InventorySummary>()
// .eq(InventorySummary::getLocationType, 0);
// Page<InventorySummary> page = inventorySummaryService.page(PageFactory.getDefaultPage(pageSize, currentPage),wrapper);
// List<InventorySummary> records = page.getRecords();
// //使用自定义物资阈值进行比较
// List<InventorySummary> collect1 = records.stream()
// .filter(data -> ObjectUtil.isNotNull(data.getThreshold()))
// .filter(data -> data.getNumber() <= data.getThreshold())
// .collect(Collectors.toList());
// //使用全局物资阈值进行比较
// List<InventorySummary> collect2 = records.stream()
// .filter(data -> data.getNumber() <= threshold && ObjectUtil.isNull(data.getThreshold()))
// .collect(Collectors.toList());
// //将数据存储到一个list中
// List<InventorySummary> inventorySummaryList=new ArrayList<>();
// inventorySummaryList.addAll(collect1);
// inventorySummaryList.addAll(collect2);
// return inventorySummaryList;
// }
//消息推送场景2:物资超期
......@@ -153,27 +153,27 @@ public class MessageSendController {
//消息推送场景3:过质保期
@PostMapping("/ccc")
public void action3() {
LambdaQueryWrapper<Inventory> wrapper = new LambdaQueryWrapper<>();
// 分页参数
int pageSize = 1000; // 每页记录数,可以根据需求调整
int currentPage = 1; // 当前页数
//所有待判断的物资
wrapper.eq( Inventory::getTermState, 0);
//获取未超期的物资数量(并且他的state不是销毁状态)
long termCount= inventoryService.count(wrapper);
List<Inventory> list=new ArrayList<>();
if (termCount>0) {
// 分页查询
while ((currentPage - 1) * pageSize < termCount) {
List<Inventory> inventoryList = processPageData3(currentPage, pageSize);
currentPage++;
list.addAll(inventoryList);
}
}
System.out.println(list);
//超期物资查询出来之后,将超期物资进行消息推送提醒
//直接对list进行处理操作推送消息即可
// LambdaQueryWrapper<Inventory> wrapper = new LambdaQueryWrapper<>();
// // 分页参数
// int pageSize = 1000; // 每页记录数,可以根据需求调整
// int currentPage = 1; // 当前页数
//
// //所有待判断的物资
// wrapper.eq( Inventory::getTermState, 0);
// //获取未超期的物资数量(并且他的state不是销毁状态)
// long termCount= inventoryService.count(wrapper);
// List<Inventory> list=new ArrayList<>();
// if (termCount>0) {
// // 分页查询
// while ((currentPage - 1) * pageSize < termCount) {
// List<Inventory> inventoryList = processPageData3(currentPage, pageSize);
// currentPage++;
// list.addAll(inventoryList);
// }
// }
// System.out.println(list);
// //超期物资查询出来之后,将超期物资进行消息推送提醒
// //直接对list进行处理操作推送消息即可
}
......
......@@ -3,6 +3,7 @@ package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import com.junmp.jyzb.api.bean.dto.OrderDto;
import com.junmp.jyzb.api.bean.dto.OrderMainDto;
import com.junmp.jyzb.api.bean.dto.ProcessOrderDto;
import com.junmp.jyzb.api.bean.query.OrderMainReq;
import com.junmp.jyzb.api.bean.query.OrderUploadReq;
import com.junmp.jyzb.api.bean.req.BaseOrderReq;
......@@ -38,16 +39,7 @@ public class OrderController {
@PostMapping("/AddOrder")
@ApiOperation("新增任务单")
public ApiRes<List<String>> addOrder(@RequestBody @Validated(ValidationApi.add.class) UpdateOrderReq req) {
//判断是否有工作流id,如果有则将状态进行修改
if (ObjectUtil.isEmpty(req.getProcessDefinitionId()))
{
req.setExamineState("none");
}
else//有工作流
{
req.setExamineState("working");
}
return ApiRes.success(orderMainService.AddOrder(req));
}
......@@ -58,17 +50,17 @@ public class OrderController {
@PostMapping("/AddFinishOrder")
@ApiOperation("新增已完成的任务单")
public ApiRes<String> AddFinishOrder(@RequestBody UpdateOrderReq req) {
req.setExamineState("finished");
return ApiRes.success(orderMainService.AddFinishOrder(req));
}
//修改任务单只允许工作流id为空的时候(视为草稿可以进行修改)
@PostMapping("/UpdateOrder")
@ApiOperation("修改任务单")
public ApiRes<Boolean> updateOrder(@RequestBody @Validated(ValidationApi.edit.class) UpdateOrderReq req) {
return ApiRes.success(orderMainService.updateOrder(req));
}
// @PostMapping("/UpdateOrder")
// @ApiOperation("修改任务单")
// public ApiRes<Boolean> updateOrder(@RequestBody @Validated(ValidationApi.edit.class) UpdateOrderReq req) {
// return ApiRes.success(orderMainService.updateOrder(req));
// }
//查询任务列表(根据组织机构id)
......@@ -103,8 +95,7 @@ public class OrderController {
}
//个人装备管理申请单(移交申请)
//个人装备管理申请单
@PostMapping("/AddPersonalEqsOrder")
@ApiOperation("/新增个人装备申请单")
public ApiRes<List<String>> AddPersonalEqsOrder(@RequestBody BaseOrderReq req){
......@@ -155,4 +146,10 @@ public class OrderController {
}
//根据流程id获取单据的装备信息
@PostMapping("/GetByProcessId")
@ApiOperation("根据流程id获取单据装备信息")
public ApiRes<ProcessOrderDto> GetByProcessId(@RequestBody OrderMainReq req){
return ApiRes.success(orderMainService.GetByProcessId(req));
}
}
package com.junmp.jyzb.controller;
import com.junmp.jyzb.api.bean.dto.LogDetailDto;
import com.junmp.jyzb.api.bean.query.InAndOutRecordReq.OutInLogsReq;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.req.FormEqsReq;
import com.junmp.jyzb.service.PoliceEquipmentService;
import com.junmp.jyzb.api.bean.query.LogDetailReq;
import com.junmp.jyzb.api.bean.query.LogSummaryReq;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.jyzb.entity.LogDetail;
import com.junmp.jyzb.entity.LogSummary;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.jyzb.service.LogDetailService;
import com.junmp.jyzb.service.LogSummaryService;
import com.junmp.v2.common.bean.request.ValidationApi;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/OutAndInbound")
@RequestMapping("/OutAndInRecords")
@Api(tags = "出入库模块")
public class OutAndInboundController {
@Resource
private PoliceEquipmentService policeEquipmentService;
//装备入库,添加入库记录
@ApiOperation("添加装备入库记录")
@PostMapping("/AddInRecords")
public ApiRes<Boolean> AddInRecords(InventoryReq req){
return ApiRes.success();
}
public LogSummaryService logSummaryService;
@Resource
private LogDetailService logDetailService;
@ApiOperation("/查看出入库详情")
@PostMapping("/GetDetailByLogSumId")
public ApiRes<List<LogDetailDto>> GetDetailByLogSumId(@RequestBody @Validated(ValidationApi.detail.class) LogDetailReq req){
return ApiRes.success(logDetailService.GetDetailByLogSumId(req));
}
//装备出入库记录(根据单据id)
@PostMapping("/ShowInOutRecordsByOrder")
@ApiOperation("出入库单据查询展示")
public ApiRes<List<LogDetailDto>> ShowInOutRecordsByOrder(@RequestBody @Validated(ValidationApi.detail.class) LogSummaryReq req){
return ApiRes.success(logDetailService.ShowInOutRecordsByOrder(req));
}
//装备出入库记录(根据条件查询)
@PostMapping("/ShowInOutRecordsByItems")
@ApiOperation("出入库记录条件查询展示")
public ApiRes<PageResult<LogSummary>> ShowInOutRecordsByItems(@RequestBody @Validated(ValidationApi.page.class) LogSummaryReq req){
return ApiRes.success(logSummaryService.ShowInOutRecordsByItems(req));
}
//警员借用装备后在在数据库中增加相关借用装备数据
@PostMapping("/AddBorrowEqs")
@ApiOperation("增加警员借用装备数据信息")
public ApiRes<Boolean> AddBorrowEqs(FormEqsReq req){
return ApiRes.success(policeEquipmentService.AddPoliceEqs(req));
//通过装备id查询某一件装备的出入库记录
@PostMapping("/ShowInOutRecordsByEqs")
@ApiOperation("出入库记录装备id查询展示")
public ApiRes<PageResult<LogDetail>> getInOutRecords(@RequestBody @Validated(ValidationApi.detail.class) InventoryReq req){
return ApiRes.success(logDetailService.getInOutRecords(req));
}
//警员领用装备后在数据库中增加相关领用装备数据
@PostMapping("/AddTakeEqs")
@ApiOperation("增加警员领用装备数据信息")
public ApiRes<Boolean> AddTakeEqs(FormEqsReq req){
return ApiRes.success(policeEquipmentService.AddPoliceEqs(req));
@PostMapping("/OutInRecords")
public ApiRes<Boolean> OutInRecords(@RequestBody OutInLogsReq req){
return ApiRes.success(logSummaryService.processInventoryRecords(req));
}
}
......@@ -2,9 +2,10 @@ package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import com.junmp.jyzb.api.bean.dto.PolicemanDto;
import com.junmp.jyzb.api.bean.dto.ReassignmentDto;
import com.junmp.jyzb.api.bean.query.CabinetReq;
import com.junmp.jyzb.api.bean.query.PoliceReassignmentReq;
import com.junmp.jyzb.api.bean.query.PolicemanReq;
import com.junmp.jyzb.api.bean.query.QueryReassignmentReq;
import com.junmp.jyzb.api.bean.req.UpdatePolicemanReq;
import com.junmp.jyzb.api.bean.req.UpdateReassignmentReq;
import com.junmp.jyzb.entity.EquipmentSize;
......@@ -46,6 +47,12 @@ public class PoliceController {
String policeId = policemanService.AddPoliceman(req);
return ApiRes.success(policeId);
}
//添加警员时先将没有组织机构号的警员查询出来
@PostMapping("/GetPoliceWithoutOrg")
@ApiOperation("/获取没有组织机构的警员信息")
public ApiRes<List<Policeman>> GetPoliceWithoutOrg(){
return ApiRes.success(policemanService.GetPoliceWithoutOrg());
}
@PostMapping("/DeletePolice")
@ApiOperation("删除警员信息")
......@@ -57,6 +64,13 @@ public class PoliceController {
return ApiRes.success(b);
}
//添加人脸和指纹照片或修改
@PostMapping("/addFaceAndfinger")
@ApiOperation("添加警员人脸照片和指纹照片")
public ApiRes<Boolean> addFaceAndfinger(@RequestBody UpdatePolicemanReq req){
return ApiRes.success(policemanService.addFaceAndfinger(req));
}
@PostMapping("/ChangePoliceState")
@ApiOperation("修改警员状态")
......@@ -187,13 +201,6 @@ public class PoliceController {
return ApiRes.success(policemanService.UpdatePoliceInfo(req));
}
//获取警员的装备信息
@PostMapping("/GetPoliceEqs")
@ApiOperation("获取警员装备信息")
public ApiRes<PageResult<PoliceEquipment>> GetPoliceEqs(@RequestBody PolicemanReq req){
return ApiRes.success(policemanService.GetPoliceEqs(req));
}
//将警员和user一一对应并且关系表也一一对应
@PostMapping("/UpdatePoliceUser")
@ApiOperation("将警员关系一一对应")
......@@ -201,6 +208,7 @@ public class PoliceController {
return ApiRes.success(policemanService.UpdatePoliceUser());
}
@PostMapping("/PoliceReassignment")
@ApiOperation("警员调岗申请单")
public ApiRes<String> PoliceReassignment(@RequestBody UpdateReassignmentReq req){
......@@ -209,14 +217,22 @@ public class PoliceController {
@PostMapping("/ShowReassignmentPage")
@ApiOperation("查看警员调岗申请单")
public ApiRes<PageResult<Reassignment>> ShowReassignmentPage(@RequestBody UpdateReassignmentReq req){
public ApiRes<PageResult<ReassignmentDto>> ShowReassignmentPage(@RequestBody QueryReassignmentReq req){
return ApiRes.success(policemanService.ShowReassignmentPage(req));
}
@PostMapping("/ChangePoliceOrg")
@ApiOperation("警员调岗(业务过程)")
public ApiRes<Boolean> changePoliceOrg(@RequestBody @Validated(ValidationApi.edit.class)PoliceReassignmentReq req){
public ApiRes<Boolean> changePoliceOrg(@RequestBody UpdateReassignmentReq req){
return ApiRes.success(policemanService.changePoliceOrg(req));
}
//获取警员的装备信息
@PostMapping("/GetPoliceEquipment")
@ApiOperation("获取警员装备信息")
public ApiRes<List<PoliceEquipment>> GetPoliceEqs(@RequestBody QueryReassignmentReq req){
return ApiRes.success(policemanService.GetPoliceEqs(req));
}
}
package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.junmp.jyzb.api.bean.dto.ProductBatchDto;
import com.junmp.jyzb.api.bean.dto.ProductProcessDto;
import com.junmp.jyzb.api.bean.query.ProductBatchReq;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.api.util.GenCodeUtil;
import com.junmp.jyzb.doc.ProductBatchDoc;
import com.junmp.jyzb.entity.ProductBatch;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.jyzb.service.ProductBatchService;
import com.junmp.jyzb.service.ProductTagService;
import com.junmp.v2.common.bean.request.ValidationApi;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.exception.enums.DefaultBizExceptionEnum;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 17:59
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
* 20221109 ning 修改初始化重复成品码严重的BUG.
* </pre>
*/
@RestController
@Slf4j
@RequestMapping("/api")
public class ProductBatchController implements ProductBatchDoc {
@Resource
private ProductBatchService productBatchService;
@Resource
private ProductTagService productTagService;
@PostMapping(path = "/batch/produce", name = "生产产品批次")
public ApiRes<Boolean> makeProduct(@RequestBody @Validated(ValidationApi.detail.class) ProductBatchReq req) {
if (ObjectUtil.isNotNull(req) && ObjectUtil.isNotNull(req.getBatchId())) {
ProductBatchDto dto = productBatchService.getBatchDetail(req.getBatchId());
List<ProductTag> list = batchTagInfo(dto);
if (null != list && list.size() > 0) {
productTagService.saveBatch(list);
//更新已完成
ProductBatch pb = new ProductBatch();
pb.setBatchId(req.getBatchId());
pb.setHasInit(true);
productBatchService.updateById(pb);
return ApiRes.success();
} else {
return ApiRes.failure("没有可生产数据");
}
} else {
return ApiRes.failure(DefaultBizExceptionEnum.VALID_PARAMS_ERROR);
}
}
@PostMapping(path = "/batch", name = "新增产品批次")
@Override
public ApiRes<Boolean> addProductBatch(@RequestBody @Validated(ValidationApi.add.class) ProductBatchReq req) {
boolean flag = productBatchService.addProductBatch(req);
if (flag) {
return ApiRes.success();
} else {
log.warn(StrUtil.format("请求的参数:{}", JSONUtil.toJsonStr(req)));
return ApiRes.failure(StrUtil.format("保存失败"));
}
}
@PutMapping(path = "/batch", name = "更新产品批次")
@Override
public ApiRes<Boolean> editProductBatch(@RequestBody @Validated(ValidationApi.edit.class) ProductBatchReq req) {
boolean flag = productBatchService.editProductBatch(req);
if (flag) {
return ApiRes.success();
} else {
log.warn(StrUtil.format("请求的参数:{}", JSONUtil.toJsonStr(req)));
return ApiRes.failure(StrUtil.format("更新失败"));
}
}
@DeleteMapping(path = "/batch", name = "删除产品批次")
@Override
public ApiRes<Boolean> delBatch(@RequestBody @Validated(ValidationApi.delete.class) ProductBatchReq req) {
try {
boolean flag = productBatchService.del(req);
if (flag) {
return ApiRes.success();
} else {
return ApiRes.failure("删除失败");
}
} catch (ServiceException ex) {
return ApiRes.failure(ex.getMessage());
}
}
@GetMapping(path = "/batch/page", name = "分页批次数据")
@Override
public ApiRes<PageResult<ProductBatchDto>> getPage(ProductBatchReq req) {
return ApiRes.success(productBatchService.findPage(req));
}
@GetMapping(path = "/batch/process/page", name = "分页批次数据")
@Override
public ApiRes<PageResult<ProductProcessDto>> getProcessPage(ProductBatchReq req) {
return ApiRes.success(productBatchService.findProcessPage(req));
}
/**
* 批次信息
*
*
*/
private List<ProductTag> batchTagInfo(ProductBatchDto batch) {
if (batch.getHasInit()) {
throw new ServiceException(ProductExceptionEnum.BATCH_PROCESSED_DONE);
} else {
List<ProductTag> list = new ArrayList<>();
Integer total = batch.getTotal();
//修改已知的BUG 。重复成品码的根源
Integer initVal = batch.getInitNum() > 0 ? batch.getInitNum() + 1 : 1;
for (; initVal <= total; initVal++) {
ProductTag tag = new ProductTag();
tag.setBatchId(batch.getBatchId());
tag.setProductId(batch.getProductId());
tag.setSpecId(batch.getSpecId());
tag.setProduceTime(new Date());
tag.setSerialId(initVal);
//成品码
StringBuilder sb = new StringBuilder();
String serialNo = GenCodeUtil.splicingZero(String.valueOf(initVal), 4);
sb.append(batch.getBatchNo())
.append(serialNo);
tag.setProductCode(sb.toString());
tag.setHasInit(false);
tag.setHasChecked(false);
list.add(tag);
}
return list;
}
}
}
package com.junmp.jyzb.controller;
import com.junmp.jyzb.api.bean.query.ProductReq;
import com.junmp.jyzb.doc.ProductDoc;
import com.junmp.jyzb.entity.Product;
import com.junmp.jyzb.service.ProductService;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 16:25
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@RestController
@Slf4j
@RequestMapping("/api")
public class ProductController implements ProductDoc {
@Resource
private ProductService productService;
@PostMapping(path = "/product", name = "新增产品")
@Override
public ApiRes<Boolean> addProduct(@RequestBody @Validated(ProductReq.add.class) ProductReq req) {
return ApiRes.success(productService.addProduct(req));
}
@PutMapping(path = "/product", name = "编辑产品")
@Override
public ApiRes<Boolean> editProduct(@RequestBody @Validated(ProductReq.edit.class) ProductReq req) {
return ApiRes.success(productService.editProduct(req));
}
@GetMapping(path = "/product", name = "产品列表")
@Override
public ApiRes<List<Product>> list(ProductReq req) {
return ApiRes.success(productService.findList(req));
}
@DeleteMapping(path = "/product", name = "删除产品")
@Override
public ApiRes<Boolean> delProduct(@RequestBody @Validated(ProductReq.delete.class)ProductReq req) {
return ApiRes.success(productService.del(req));
}
@GetMapping(path = "/product/page", name = "产品分页")
@Override
public ApiRes<PageResult<Product>> page(ProductReq req) {
return ApiRes.success(productService.findPage(req));
}
}
package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import com.junmp.jyzb.api.bean.query.ProductSkuReq;
import com.junmp.jyzb.api.bean.vo.ProductSkuVo;
import com.junmp.jyzb.doc.ProductSkuDoc;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.jyzb.service.ProductSkuService;
import com.junmp.v2.common.bean.request.ValidationApi;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.exception.enums.DefaultBizExceptionEnum;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 17:59
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@RestController
@Slf4j
@RequestMapping("/api")
public class ProductSkuController implements ProductSkuDoc {
@Resource
private ProductSkuService productSkuService;
@PostMapping(path = "/spec", name = "新增号型")
@Override
public ApiRes<Boolean> addProductSku(@RequestBody @Validated(ProductSkuReq.add.class) ProductSkuReq req) {
try {
productSkuService.addProductSku(req);
return ApiRes.success();
} catch (ServiceException ex) {
log.error("新增号型异常>>" + ex.getMessage());
return ApiRes.failure(DefaultBizExceptionEnum.SYS_RUNTIME_ERROR);
}
}
@PutMapping(path = "/spec", name = "编辑号型")
@Override
public ApiRes<Boolean> editProductSku(@RequestBody @Validated(ProductSkuReq.edit.class)ProductSkuReq req) {
return ApiRes.success(productSkuService.editProductSku(req));
}
@DeleteMapping(path = "/spec", name = "删除号型")
@Override
public ApiRes<Boolean> del(@RequestBody @Validated(ValidationApi.delete.class)ProductSkuReq req) {
return ApiRes.success(productSkuService.del(req));
}
@GetMapping(path = "/spec/page", name = "分页号型")
@Override
public ApiRes<PageResult<ProductSku>> page(ProductSkuReq req) {
return ApiRes.success(productSkuService.findPage(req));
}
@GetMapping(path = "/spec/getByProduct", name = "获取指定产品号型列表")
@Override
public ApiRes<List<ProductSkuVo>> listByProduct(ProductSkuReq req) {
if (ObjectUtil.isNotNull(req) && ObjectUtil.isNotNull(req.getProductId())) {
List<ProductSku> list = productSkuService.findList(req);
return ApiRes.success(BeanPlusUtil.toBeanList(list, ProductSkuVo.class));
} else {
return ApiRes.failure("产品编号不能为空");
}
}
}
package com.junmp.jyzb.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.junmp.jyzb.api.bean.dto.ProductTagDto;
import com.junmp.jyzb.api.bean.query.ProductTagReq;
import com.junmp.jyzb.api.bean.vo.TagInfoVo;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.doc.ProductTagDoc;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.jyzb.service.ProductTagService;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.exception.enums.DefaultBizExceptionEnum;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 17:59
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@RestController
@Slf4j
@RequestMapping("/api")
public class ProductTagController implements ProductTagDoc {
@Resource
private ProductTagService productTagService;
/**
* 前端参数包括:batchId 和 tagUid
*/
@PostMapping(path = "/tag/updateUid", name = "更新标签UID")
@Override
public ApiRes<TagInfoVo> updateUid(@RequestBody ProductTagReq req) {
ProductTag info = productTagService.checkTagUid(req);
info.setTagUid(req.getTagUid());
info.setHasInit(true);
boolean flag = productTagService.updateById(info);
if (flag) {
String hexStr = HexUtil.encodeHexStr(info.getProductCode());
return ApiRes.success(TagInfoVo.builder().tagId(info.getTagId()).content(hexStr).build());
} else {
return ApiRes.failure("UID数据更新失败");
}
}
/**
* 前端参数包括:tagId,password,ciphertext
*/
@PostMapping(path = "/tag/updateContent", name = "更新内容")
@Override
public ApiRes<TagInfoVo> updateContent(@RequestBody ProductTagReq req) {
if (ObjectUtil.isNotNull(req) && ObjectUtil.isNotNull(req.getTagId())) {
ProductTag info = productTagService.getById(req.getTagId());
if (null != info) {
info.setPassword(req.getPassword());
info.setCiphertext(req.getCiphertext());
boolean flag = productTagService.updateById(info);
if (flag) {
//查询视图获取数据
ProductTagDto dto = productTagService.getTagInfo(req.getTagId());
StringBuilder tmp = new StringBuilder();
Set<String> params = new LinkedHashSet<>();
if (StrUtil.isNotBlank(dto.getCompanyName())) {
tmp.append("厂家:{}\n");
params.add(dto.getCompanyName());
}
if (StrUtil.isNotBlank(dto.getProductName())) {
tmp.append("名称:{}\n");
params.add(dto.getProductName());
}
if (StrUtil.isNotBlank(dto.getSpec())) {
tmp.append("规格:{}\n");
params.add(dto.getSpec());
}
if (StrUtil.isNotBlank(dto.getMaterial())) {
tmp.append("材质:{}\n");
params.add(dto.getMaterial());
}
if (StrUtil.isNotBlank(dto.getWeight())) {
tmp.append("重量:{}\n");
params.add(dto.getWeight());
}
//厂家:{}\n日期:{}
tmp.append("编号:{}\n");
params.add(dto.getProductCode());
//写入广告语
if (StrUtil.isNotBlank(dto.getAdInfo())) {
tmp.append("{}\n");
params.add(dto.getAdInfo());
}
log.info(StrUtil.format("待写入的模板:{}", tmp.toString()));
//String abc = "名称:{}\n规格:{}\n重量:{}\n厂家:{}\n日期:{}\n编号:{}\n";
String content = StrUtil.format(tmp.toString(), params.toArray());
log.info(StrUtil.format("写入的内容:{}", content));
TagInfoVo infoVo = TagInfoVo.builder()
.tagId(req.getTagId())
.productCode(dto.getCiphertext())
.content(content).build();
log.info(StrUtil.format("写入芯片的内容>>", JSONUtil.toJsonStr(info)));
return ApiRes.success(infoVo);
} else {
return ApiRes.failure("UID数据更新失败");
}
} else {
return ApiRes.failure(ProductExceptionEnum.TAG_INFO_NOT_EXISTS);
}
} else {
return ApiRes.failure(DefaultBizExceptionEnum.VALID_PARAMS_ERROR);
}
}
/**
* 前端参数:tagUid,productCode
*/
@PostMapping(path = "/tag/check", name = "复检接口")
public ApiRes<Boolean> checkTag(@RequestBody ProductTagReq req) {
if (ObjectUtil.isNotNull(req) &&
ObjectUtil.isNotNull(req.getTagUid()) &&
ObjectUtil.isNotNull(req.getProductCode())) {
String code = HexUtil.decodeHexStr(req.getProductCode());
req.setProductCode(code);
List<ProductTag> list = productTagService.findList(req);
if (CollectionUtil.isNotEmpty(list) && list.size() == 1) {
ProductTag tag = list.get(0);
log.info(StrUtil.format("复检结果为:{}", JSONUtil.toJsonStr(tag)));
if (tag.getHasChecked()) {
log.warn("该产品已完成自检,编号为:{}", req.getTagUid());
return ApiRes.success();
}
if (ObjectUtil.isNotNull(tag)) {
//更新为已经复检
tag.setHasChecked(true);
tag.setCheckTime(new Date());
productTagService.updateById(tag);
return ApiRes.success();
} else {
return ApiRes.failure(ProductExceptionEnum.TAG_INFO_NOT_EXISTS);
}
} else {
return ApiRes.failure(ProductExceptionEnum.TAG_INFO_REPEAT_ERROR);
}
} else {
return ApiRes.failure(DefaultBizExceptionEnum.VALID_PARAMS_ERROR);
}
}
@GetMapping(path = "/tag/page", name = "分页标签")
public ApiRes<PageResult<ProductTag>> getPage(ProductTagReq req) {
return ApiRes.success(productTagService.findPage(req));
}
}
package com.junmp.jyzb.controller;
import com.junmp.jyzb.api.bean.dto.ESOrgDto;
import com.junmp.jyzb.api.bean.dto.OrgDto;
import com.junmp.jyzb.api.bean.dto.OrgTreeDto;
import com.junmp.jyzb.api.bean.query.ProductSkuReq;
import com.junmp.jyzb.api.bean.query.QueryOrgReq;
import com.junmp.jyzb.api.bean.req.UpdateOrgReq;
import com.junmp.jyzb.service.PubOrgService;
......@@ -12,11 +11,11 @@ import com.junmp.v2.common.bean.response.ApiRes;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.Nullable;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Map;
......@@ -53,6 +52,11 @@ public class PubOrgController {
public ApiRes<OrgDto> GetCurrentList(@RequestBody @Validated(ValidationApi.detail.class) QueryOrgReq req) {
return ApiRes.success(pubOrgService.getOrgHierarchy(req));
}
@PostMapping("/GetCurrentESList")
@ApiOperation("根据当前组织机构列表ES查询")
public ApiRes<ESOrgDto> GetCurrentESList(@RequestBody QueryOrgReq req) throws IOException {
return ApiRes.success(pubOrgService.getOrgTreeByEs(req));
}
@PostMapping("/ChangeOrgState")
@ApiOperation("改变组织机构状态信息")
public ApiRes<Boolean> changeOrgState(@RequestBody @Validated(ValidationApi.updateStatus.class) UpdateOrgReq req) {
......
package com.junmp.jyzb.controller;
import cn.hutool.core.util.ObjectUtil;
import com.junmp.jyzb.api.bean.dto.StocktakeDto;
import com.junmp.jyzb.api.bean.query.StocktakeReq;
import com.junmp.jyzb.api.bean.req.UpdateStocktakeReq;
import com.junmp.jyzb.entity.Stocktake;
......@@ -47,7 +48,7 @@ public class StocktakeController {
//查询单据
@PostMapping("/ShowStocktakeOrderPage")
@ApiOperation("盘库单据查询")
public ApiRes<PageResult<Stocktake>> ShowStocktakeOrderPage(@RequestBody @Validated(ValidationApi.edit.class)StocktakeReq req){
public ApiRes<PageResult<StocktakeDto>> ShowStocktakeOrderPage(@RequestBody @Validated(ValidationApi.edit.class)StocktakeReq req){
return ApiRes.success(stocktakeService.ShowStocktakeOrderPage(req));
}
......
package com.junmp.jyzb.controller;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.jyzb.api.bean.query.ProcessReq.PoliceEquipmentReq;
import com.junmp.jyzb.api.bean.query.TestReq;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.entity.PoliceEquipment;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.jyzb.service.PoliceEquipmentService;
import com.junmp.jyzb.service.TestService;
import com.junmp.jyzb.utils.ResponseResult;
import io.swagger.annotations.ApiOperation;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.util.BeanPlusUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@Slf4j
......@@ -19,15 +28,39 @@ public class TestController {
@Resource
private TestService testService;
@Resource
private InventorySummaryService inventorySummaryService;
@Resource
private PoliceEquipmentService policeEquipmentService;
@Resource
private RabbitAdmin rabbitAdmin;
@RequestMapping("/hello")
public ResponseResult Hello(){
return new ResponseResult(10000,"操作成功","hello");
}
@PostMapping("/uploadResult")
@ApiOperation("模拟本地主机上传结果到rabbitmq")
public Boolean uploadResult(@RequestBody RabbitMqOrderReq req){
// @PostMapping("/test")
// public ApiRes<Boolean> test(@RequestBody RabbitMqOrderReq req){
// return ApiRes.success(testService.test(req));
// }
@PostMapping("/hasConsumers")
public ApiRes<Boolean> hasConsumers(@RequestBody TestReq req){
Long execute = rabbitAdmin.getRabbitTemplate().execute(channel -> channel.consumerCount(req.getQueueName()));
System.out.println("execute = " + execute);
return ApiRes.success(execute>0L);
}
return testService.uploadResult(req);
@PostMapping("addPoliceEqs")
public ApiRes<Boolean> addPoliceEqs(@RequestBody PoliceEquipmentReq req){
List<PoliceEquipment> collect = req.getList().stream().map(policeEquipmentReq -> {
PoliceEquipment policeEquipment = new PoliceEquipment();
BeanPlusUtil.copyProperties(policeEquipmentReq, policeEquipment);
return policeEquipment;
}).collect(Collectors.toList());
return ApiRes.success(policeEquipmentService.saveBatch(collect));
}
}
package com.junmp.jyzb.controller;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgPriceDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgPriceDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.TjReq.TjOrgEqsReq;
import com.junmp.jyzb.api.bean.query.TjReq.TjOrgPriceReq;
import com.junmp.jyzb.service.TjService;
import com.junmp.v2.common.bean.response.ApiRes;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/Tj")
@Api(tags = "统计报表模块")
public class TjController {
@Resource
private TjService tjService;
/**
* 根据组织机构统计装备的报表数据(外层数据)
*/
@PostMapping("/TjOrgEqs")
@ApiOperation("/装备统计报表")
public ApiRes<FinalTjOrgEqsDto> TjOrgEqs(@RequestBody TjOrgEqsReq req){
return ApiRes.success(tjService.TjOrgEqs(req));
}
//装备统计报表(点击+后里面的数据)
@PostMapping("/TjOrgEqsDetail")
@ApiOperation("/根据添加查询组织机构下的装备统计")
public ApiRes<List<InventorySumDto>> TjOrgEqsDetail(@RequestBody TjOrgEqsReq req){
return ApiRes.success(tjService.TjOrgEqsDetail(req));
}
//财务统计报表
@PostMapping("/TjOrgPrice")
@ApiOperation("/财务统计报表")
public ApiRes<FinalTjOrgPriceDto> TjOrgPrice(@RequestBody TjOrgPriceReq req){
return ApiRes.success(tjService.TjOrgPrice(req));
}
//财务统计报表(点击+后里面的数据)
@PostMapping("/TjOrgPriceDetail")
@ApiOperation("/根据添加查询组织机构下的财务统计")
public ApiRes<List<TjOrgPriceDto>> TjOrgPriceDetail(@RequestBody TjOrgPriceReq req){
return ApiRes.success(tjService.TjOrgPriceDetail(req));
}
@PostMapping("test")
public ApiRes<List<TjOrgEqsDto>> test(@RequestBody InventoryReq req){
return ApiRes.success(tjService.test(req));
}
}
package com.junmp.jyzb.doc;
import com.junmp.jyzb.api.bean.dto.ProductBatchDto;
import com.junmp.jyzb.api.bean.dto.ProductProcessDto;
import com.junmp.jyzb.api.bean.query.ProductBatchReq;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 18:12
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Api(value = "生产管理", tags = "生产管理接口")
public interface ProductBatchDoc {
/**
* 生产标签
*
* @param req
*/
@ApiOperation(value = "生产初始化", tags = "生产管理接口")
ApiRes<Boolean> makeProduct(ProductBatchReq req);
/**
* 新增批次信息
*/
@ApiOperation(value = "新增批次信息", tags = "生产管理接口")
ApiRes<Boolean> addProductBatch(ProductBatchReq req);
/**
* 更新批次信息
*/
@ApiOperation(value = "更新批次信息", tags = "生产管理接口")
ApiRes<Boolean> editProductBatch(ProductBatchReq req);
/**
* 删除批次信息
*/
@ApiOperation(value = "删除批次信息", tags = "生产管理接口")
ApiRes<Boolean> delBatch(ProductBatchReq req);
/**
* 分页批次信息
*/
@ApiOperation(value = "分页批次信息", tags = "生产管理接口")
ApiRes<PageResult<ProductBatchDto>> getPage(ProductBatchReq req);
/**
* 分页批次信息
*/
@ApiOperation(value = "分页批次进度信息", tags = "生产管理接口")
ApiRes<PageResult<ProductProcessDto>> getProcessPage(ProductBatchReq req);
}
package com.junmp.jyzb.doc;
import com.junmp.jyzb.api.bean.query.ProductReq;
import com.junmp.jyzb.entity.Product;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 16:25
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Api(value = "产品管理", tags = "产品管理接口")
public interface ProductDoc {
/**
* 新增产品
*/
@ApiOperation(value = "新增产品", tags = "产品管理接口")
ApiRes<Boolean> addProduct(ProductReq req);
/**
* 更新产品
*/
@ApiOperation(value = "更新产品", tags = "产品管理接口")
ApiRes<Boolean> editProduct(ProductReq req);
/**
* 获取所有产品
*/
@ApiOperation(value = "获取所有产品", tags = "产品管理接口")
ApiRes<List<Product>> list(ProductReq req);
/**
* 删除产品
*/
@ApiOperation(value = "删除产品",tags = "产品管理接口")
ApiRes<Boolean> delProduct(ProductReq req);
/**
* 分页产品信息
*/
@ApiOperation(value = "分页产品信息", tags = "产品管理接口")
ApiRes<PageResult<Product>> page(ProductReq req);
}
package com.junmp.jyzb.doc;
import com.junmp.jyzb.api.bean.query.ProductSkuReq;
import com.junmp.jyzb.api.bean.vo.ProductSkuVo;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 18:00
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Api(value = "号型管理", tags = "产品号型接口")
public interface ProductSkuDoc {
/**
* 新增产品号型
*
* @param req
*/
@ApiOperation(value = "新增产品号型", tags = "产品号型接口")
ApiRes<Boolean> addProductSku(ProductSkuReq req);
/**
* 新增产品号型
*
* @param req
*/
@ApiOperation(value = "编辑号型", tags = "产品号型接口")
ApiRes<Boolean> editProductSku(ProductSkuReq req);
/**
* 新增产品号型
*
* @param req
*/
@ApiOperation(value = "删除号型", tags = "产品号型接口")
ApiRes<Boolean> del(ProductSkuReq req);
/**
* 新增产品号型
*
* @param req
*/
@ApiOperation(value = "分页产品信息", tags = "产品号型接口")
ApiRes<PageResult<ProductSku>> page(ProductSkuReq req);
/**
* 获取指定产品号型列表
*/
@ApiOperation(value = "获取指定产品号型列表", tags = "产品号型接口")
ApiRes<List<ProductSkuVo>> listByProduct(ProductSkuReq req);
}
package com.junmp.jyzb.doc;
import com.junmp.jyzb.api.bean.query.ProductTagReq;
import com.junmp.jyzb.api.bean.vo.TagInfoVo;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.db.api.page.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 18:10
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Api(value = "生产管理", tags = "生产管理接口")
public interface ProductTagDoc {
@ApiOperation(value = "更新产品UID", tags = "生产管理接口")
ApiRes<TagInfoVo> updateUid(ProductTagReq req);
@ApiOperation(value = "更新产品内容", tags = "生产管理接口")
ApiRes<TagInfoVo> updateContent(ProductTagReq req);
@ApiOperation(value = "产品复检", tags = "生产管理接口")
ApiRes<Boolean> checkTag(ProductTagReq req);
@ApiOperation(value = "分页接口", tags = "生产管理接口")
ApiRes<PageResult<ProductTag>> getPage(ProductTagReq req);
}
package com.junmp.jyzb.document;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.Mapping;
import java.io.Serializable;
import java.util.Date;
@Document(indexName = "orders")
@Mapping(mappingPath = "productIndex.json") // 解决IK分词不能使用问题
public class ProductDocument implements Serializable {
@Id
private String id;
//@Field(analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String productName;
//@Field(analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String productDesc;
private Date createTime;
private Date updateTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
package com.junmp.jyzb.document;
import java.util.Date;
public class ProductDocumentBuilder {
private static ProductDocument productDocument;
// create start
public static ProductDocumentBuilder create(){
productDocument = new ProductDocument();
return new ProductDocumentBuilder();
}
public ProductDocumentBuilder addId(String id) {
productDocument.setId(id);
return this;
}
public ProductDocumentBuilder addProductName(String productName) {
productDocument.setProductName(productName);
return this;
}
public ProductDocumentBuilder addProductDesc(String productDesc) {
productDocument.setProductDesc(productDesc);
return this;
}
public ProductDocumentBuilder addCreateTime(Date createTime) {
productDocument.setCreateTime(createTime);
return this;
}
public ProductDocumentBuilder addUpdateTime(Date updateTime) {
productDocument.setUpdateTime(updateTime);
return this;
}
public ProductDocument builder() {
return productDocument;
}
}
......@@ -148,7 +148,7 @@ public class BusForm implements Serializable {
* 调拨类型(2支拨,1价拨)
*/
@TableField(value = "allocate_type")
private Integer allocateType;
private String allocateType;
/**
* 备注
......@@ -156,18 +156,28 @@ public class BusForm implements Serializable {
private String note;
/**
* 供应商id
* 商id
*/
@TableField(value = "supplier_id")
private String supplierId;
/**
* 供应商名称
* 商名称
*/
@TableField(value = "supplier_name")
private String supplierName;
/**
* 厂商类型(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
@TableField(value = "agency_type")
private Integer agencyType;
/**
* 装备类别拼接
*/
@TableField(value = "inv_list")
private String invList;
/**
* 仓库id
*/
@TableField(value = "warehouse_id")
......@@ -204,29 +214,22 @@ public class BusForm implements Serializable {
private String updateUser;
/**
* 报废类型(1报废出库,2移入报废区)
* 报废销毁类型(1销毁出库,2移入报废区)
*/
private Integer type;
/**
* 维修单位id
*/
@TableField(value = "repair_id")
private String repairId;
/**
* 维修单位名称
*/
@TableField(value = "repair_name")
private String repairName;
/**
* 销毁、报废单位id
* 审核人信息
*/
@TableField(value = "destory_id")
private String destoryId;
@TableField(value = "current_assign")
private String currentAssign;
/**
* 销毁、报废单位名称
* 单据使用次数(forbidden禁止使用,outgoing 仅出库使用,incoming仅入库使用,bothuseing出入库都可以使用一次)
*/
@TableField(value = "destory_name")
private String destoryName;
@TableField(value = "use_count")
private String useCount;
private static final long serialVersionUID = 1L;
......
package com.junmp.jyzb.entity.ES;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.Date;
@Data
@Document(indexName = "blog", shards = 1, replicas = 1)
public class Blog {
//此项作为id,不会写到_source里边。
@Id
private Long blogId;
@Field(type = FieldType.Text)
private String title;
@Field(type = FieldType.Text)
private String content;
@Field(type = FieldType.Text)
private String author;
//博客所属分类。
@Field(type = FieldType.Keyword)
private String category;
//0: 未发布(草稿) 1:已发布 2:已删除
@Field(type = FieldType.Integer)
private int status;
//序列号,用于给外部展示的id
@Field(type = FieldType.Keyword)
private String serialNum;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
@Field(type= FieldType.Date, format= DateFormat.custom, pattern="yyyy-MM-dd HH:mm:ss.SSS")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
@Field(type=FieldType.Date, format=DateFormat.custom, pattern="yyyy-MM-dd HH:mm:ss.SSS")
private Date updateTime;
}
package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
......@@ -9,18 +10,23 @@ import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@ApiModel(value = "com-junmp-jyzb-domain-EquipmentSize")
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("base_equipment_size")
@Document(indexName = "size_pinyin")
@JsonIgnoreProperties(ignoreUnknown = true)
public class EquipmentSize implements Serializable {
/**
* 装备号型ID
*/
@ApiModelProperty(value = "装备号型ID")
@TableField("id")
@Id
private String id;
/**
......@@ -79,6 +85,7 @@ public class EquipmentSize implements Serializable {
@TableField("epc_type")
private Integer epcType;
//图片
private String photo;
/**
......
package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
......@@ -8,18 +9,23 @@ import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@ApiModel(value = "com-junmp-jyzb-domain-EquipmentType")
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("base_equipment_type")
@Document(indexName = "type_pinyin")
@JsonIgnoreProperties(ignoreUnknown = true)
public class EquipmentType implements Serializable {
/**
* 装备类型ID
*/
@ApiModelProperty(value = "装备类型ID")
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@Id
private String id;
/**
......
......@@ -88,6 +88,12 @@ public class Inventory implements Serializable {
private Long orgId;
/**
* 组织机构名称
*/
@TableField(exist = false)
private String orgName;
/**
* 规格尺寸
*/
private String state;
......
......@@ -27,7 +27,7 @@ public class InventorySummary implements Serializable {
*/
@ApiModelProperty(value = "组织机构id")
@TableField("org_id_int")
private String orgId;
private Long orgId;
/**
* 组织机构名称
......@@ -36,6 +36,13 @@ public class InventorySummary implements Serializable {
@TableField("org_name")
private String orgName;
/**
* 组织机构编码
*/
@ApiModelProperty(value = "组织机构编码")
@TableField("org_code")
private String orgCode;
/**
* 装备类型id
*/
......@@ -126,6 +133,14 @@ public class InventorySummary implements Serializable {
@TableField("destruction_number")
private Integer destructionNumber;
/**
* 销毁金额
*/
@ApiModelProperty(value = "销毁金额")
@TableField("destruction_price")
private BigDecimal destructionPrice;
/**
* 过质保数量
*/
......@@ -176,23 +191,6 @@ public class InventorySummary implements Serializable {
@TableField("threshold")
private Integer threshold;
/**
* 质保期
*/
@TableField(exist = false)
private Integer warrantyPeriod;
/**
* 维保周期
*/
@TableField(exist = false)
private Integer maintenancePeriod;
@TableField(exist = false,updateStrategy = FieldStrategy.IGNORED)
private String photo;
@TableField(exist = false)
private String instructions;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
......@@ -18,7 +19,7 @@ public class LogDetail implements Serializable {
* 出入库明细ID
*/
private Long id;
private Long detailId;
/**
* 出入库汇总id
*/
......@@ -30,17 +31,6 @@ public class LogDetail implements Serializable {
@TableField(value = "inventory_id")
private String inventoryId;
/**
* 单据ID
*/
@TableField(value = "order_main_id")
private String orderMainId;
/**
* 单据编号
*/
@TableField(value = "order_code")
private String orderCode;
/**
* 业务类型
......@@ -96,17 +86,7 @@ public class LogDetail implements Serializable {
@TableField(value = "equipment_type")
private Integer equipmentType;
/**
* 位置id(存放单警柜id或者是仓库id)
*/
@TableField(value = "location_id")
private String locationId;
/**
* 位置名称(单警柜,仓库)
*/
@TableField(value = "location_name")
private String locationName;
/**
* 箱门id
......@@ -156,11 +136,10 @@ public class LogDetail implements Serializable {
@TableField(value = "picture")
private String picture;
/**
* 出入设备:0手持机/1单警柜/2通道
*/
@TableField(value = "device_type")
private Integer deviceType;
@TableField(value = "price")
private BigDecimal price;
private static final long serialVersionUID = 1L;
......
......@@ -57,7 +57,17 @@ public class LogSummary implements Serializable {
@TableField(value = "device_type")
private Integer deviceType;
/**
* 位置id(存放单警柜id或者是仓库id)
*/
@TableField(value = "location_id")
private String locationId;
/**
* 位置名称(单警柜,仓库)
*/
@TableField(value = "location_name")
private String locationName;
/**
* 所属位置(0仓库1单警柜)
......@@ -119,8 +129,6 @@ public class LogSummary implements Serializable {
@TableField(value = "create_user")
private String createUser;
@TableField(exist = false)
private List<LogDetail> logDetailList;
/**
* 出入状态
......@@ -128,6 +136,9 @@ public class LogSummary implements Serializable {
@TableField(value = "out_in_state")
private String outInState;
@TableField(value = "number")
private Integer number;
private static final long serialVersionUID = 1L;
......
......@@ -56,6 +56,9 @@ import java.util.Date;
@TableField("actual_num")
private Integer actualNum;
@TableField("modify_quantity")
private Integer modifyQuantity;
@TableField("price")
private BigDecimal price;
......
......@@ -20,7 +20,7 @@ public class OrderMain implements Serializable {
@TableField("order_type")
private String orderType;
@TableField("process_id")
@TableField(value = "process_id",updateStrategy = FieldStrategy.IGNORED)
private String processId;
@TableField("bussiness_type")
......@@ -86,6 +86,8 @@ public class OrderMain implements Serializable {
@TableField("inv_list")
private String invList;
@TableField("current_assign")
private String currentAssign;
@TableField("return_date")
private Date returnDate;
......@@ -117,19 +119,30 @@ public class OrderMain implements Serializable {
/**
* 生产厂商id
*/
@TableField("manufacturer_id")
private String manufacturerId;
@TableField("manufacturer_name")
private String manufacturerName;
/**
* 调拨类型(2支拨,1价拨)
*/
@TableField("transfer_type")
private Integer transferType;
@TableField("allocate_type")
private String allocateType;
/**
* 归还人,归还入库特有
*/
@TableField("return_user_id")
private String returnUserId;
@TableField("repair_name")
private String repairName;
@TableField("destory_name")
private String destoryName;
@TableField("location_id")
private String locationId;
@TableField("location_name")
private String locationName;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
......@@ -31,6 +32,9 @@ public class PoliceEquipment implements Serializable {
@TableField("police_id")
private String policeId;
@TableField("police_name")
private String policeName;
/**
* 装备号型id
*/
......@@ -67,6 +71,10 @@ public class PoliceEquipment implements Serializable {
@TableField("org_id")
private Long orgId;
//装备单价
@TableField("price")
private BigDecimal price;
/**
* 更新时间
*/
......
package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
*
* @TableName base_police_face
*/
@TableName(value ="base_police_face")
@Data
public class PoliceFace implements Serializable {
/**
* 人脸id
*/
@TableId(value = "id")
private Integer id;
/**
* 警员id
*/
@TableField(value = "police_id")
private String policeId;
/**
* 人脸信息名称
*/
@TableField(value = "name")
private String name;
/**
* 人脸信息
*/
@TableField(value = "face_info")
private String faceInfo;
/**
* 创建时间
*/
@TableField(value = "create_time")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time")
private Date updateTime;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -6,6 +6,8 @@ import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <pre>
*
......@@ -19,77 +21,107 @@ import java.util.Date;
* </pre>
*/
@Data
@TableName("biz_product")
public class Product implements Serializable {
@TableName("vie_price_sum_summary")
public class PriceSumSummary implements Serializable {
@TableId(value = "product_id", type = IdType.AUTO)
private Long productId;
@TableId(value = "id")
private String id;
/**
* 产品代码
*
*/
@TableField("product_code")
private String productCode;
@TableField("org_id_int")
private String orgIdInt;
/**
* 产品当前序号
*
*/
private Integer sn;
@TableField("org_code")
private String orgCode;
/**
* 产品名称
*
*/
private String name;
@TableField("org_name")
private String orgName;
/**
* 条码信息
*
*/
private String barcode;
@TableField("org_name_short")
private String orgNameShort;
/**
* 计量单位
*
*/
private String unit;
@TableField("sum_type")
private String sumType;
/**
* 重量
*
*/
private String weight;
private String year;
/**
* 规格尺寸
*
*/
private String spec;
private String month;
/**
* 材质
*
*/
private String material;
@TableField("start_price")
private String startPrice;
/**
* 图片地址
*
*/
@TableField("image_url")
private String imageUrl;
@TableField("end_price")
private String endPrice;
/**
* 生产厂家编号
*
*/
@TableField("mf_biz_id")
private Long mfBizId;
@TableField("start_num")
private String startNum;
/**
* 生产厂家名称
*
*/
@TableField(value = "mf_biz_name")
private String mfBizName;
@TableField("end_num")
private String endNum;
/**
*
*/
@TableField("destory_num")
private String destoryNum;
/**
*
*/
@TableField("destory_price")
private String destoryPrice;
/**
*
*/
@TableField("add_num")
private String addNum;
/**
*
*/
@TableField("add_price")
private String addPrice;
/**
*
*/
@TableField("type_name")
private String typeName;
/**
*
*/
@TableField("type_id")
private String typeId;
/**
*
*/
@TableField("size_name")
private String sizeName;
/**
* 广告信息
*
*/
@TableField(value = "ad_info")
private String adInfo ;
@TableField("size_id")
private String sizeId;
/**
* 创建时间
......
package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <pre>
*
* 描述:产品批次
* 版本:1.0.0
* 日期:2022/7/29 17:10
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@TableName("biz_product_batch")
public class ProductBatch implements Serializable {
/**
* 批次主键
*/
@TableId(value = "batch_id", type = IdType.AUTO)
private Long batchId;
/**
* 批次编号
*/
@TableField(value = "batch_no")
private String batchNo;
private Integer sn;
/**
* 产品编号
*/
@TableField(value = "product_id")
private Long productId;
/**
* 关联号型
*/
@TableField(value = "spec_id")
private Long specId;
/**
* 生产总量
*/
private Integer total;
/**
* 序号前缀
*/
private String prefix;
/**
* 复检是否完成
*/
@TableField(value = "has_finish")
private Boolean hasFinish;
/**
* 生产是否完成
*/
@TableField(value = "has_init")
private Boolean hasInit;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
}
package com.junmp.jyzb.entity;
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;
import java.io.Serializable;
/**
* <pre>
*
* 描述:产品SKU
* 版本:1.0.0
* 日期:2022/7/29 16:19
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@TableName("biz_product_sku")
public class ProductSku implements Serializable {
@TableId(type = IdType.AUTO, value = "spec_id")
private Long specId;
/**
* 号型代码
*/
@TableField(value = "spec_code")
private String specCode;
/**
* SKU编码
*/
@TableField(value = "sku_code")
private String skuCode;
/**
* 序号
*/
private Integer sn;
/**
* 号型
*/
private String spec;
/**
* 重量
*/
private String weight;
/**
* 材质
*/
private String material;
/**
* 关联产品
*/
@TableField(value = "product_id")
private Long productId;
/**
* 预览属性1
*/
private String attr1;
/**
* 预览属性2
*/
private String attr2;
/**
* 预览属性3
*/
private String attr3;
}
package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/29 16:16
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Data
@TableName("biz_product_tag")
public class ProductTag implements Serializable {
/**
* 标签编号
*/
@TableId(value = "tag_id", type = IdType.AUTO)
private Long tagId;
/**
* RFID uid
*/
@TableField(value = "tag_uid")
private String tagUid;
/**
* 成品码
*/
@TableField(value = "product_code")
private String productCode;
/**
* 关联生成批次编号
*/
@TableField(value = "batch_id")
private Long batchId;
/**
* 关联生成产品主键
*/
@TableField(value = "product_id")
private Long productId;
/**
* 关联生成号型主键
*/
@TableField(value = "spec_id")
private Long specId;
/**
* 产品序号
*/
@TableField(value = "serial_id")
private Integer serialId;
/**
* 版本编号
*/
@TableField(value = "version_no")
private String versionNo;
/**
* 密文内容
*/
private String ciphertext;
/**
* 生产日期
*/
@TableField(value = "produce_time")
private Date produceTime;
/**
* 复检时间
*/
@TableField(value = "check_time")
private Date checkTime ;
/**
* 密码
*/
private String password;
/**
* 是否初始化
*/
@TableField(value = "has_init")
private Boolean hasInit ;
/**
* 是否复检
*/
@TableField(value = "has_checked")
private Boolean hasChecked;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
}
......@@ -11,6 +11,8 @@ import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
/**
* 组织机构信息
......@@ -19,11 +21,17 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@TableName("pub_org")
@Document(indexName = "org_pinyin")
public class PubOrg implements Serializable {
//此项作为id,不会写到_source里边。
// @Id
// private String id;
/**
* 主键
*/
@TableId(type = IdType.AUTO, value = "org_id")
@Id
private Long orgId;
/**
* 主键
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.AllArgsConstructor;
......@@ -32,6 +33,12 @@ public class Reassignment implements Serializable {
private String processId;
/**
* 订单编号
*/
@TableField(value = "order_code")
private String orderCode;
/**
* 调岗警员id
*/
@TableField(value = "police_id")
......@@ -55,11 +62,14 @@ public class Reassignment implements Serializable {
@TableField(value = "org_id")
private Long orgId;
@TableField(value = "org_name")
private String orgName;
/**
* 目标组织机构id
* 警员
*/
@TableField(value = "target_org_id")
private Long targetOrgId;
@TableField(value = "police_code")
private String policeCode;
/**
* 调岗原因
......@@ -74,6 +84,17 @@ public class Reassignment implements Serializable {
private String examineState;
/**
* 当前审核人
*/
@TableField(value = "current_assign")
private String currentAssign;
/**
* 经办人
*/
@TableField(value = "user_name")
private String userName;
/**
* 申请时间
*/
@TableField(value = "apply_time")
......@@ -102,6 +123,24 @@ public class Reassignment implements Serializable {
@TableField(value = "update_user")
private String updateUser;
/**
* 装备总数
*/
@TableField(value = "total_num")
private Integer totalNum;
/**
* 装备总金额
*/
@TableField(value = "price")
private BigDecimal price;
/**
* 类型(调入警员0,调出警员1)
*/
@TableField(value = "reassigment_type")
private Integer reassigmentType;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -25,7 +25,11 @@ public class Stocktake implements Serializable {
*/
@TableField(value = "process_id")
private String processId;
/**
* 当前审核人
*/
@TableField(value = "current_assign")
private String currentAssign;
/**
* 单据业务类型:盘库stocktake
*/
......
package com.junmp.jyzb.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.junmp.v2.common.bean.request.ValidationApi;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
......@@ -9,6 +10,8 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
@Data
@TableName("base_supplier")
public class Supplier implements Serializable {
......@@ -37,6 +40,12 @@ public class Supplier implements Serializable {
private String shortName;
/**
* 类型,(0为供应商,1为生产厂商,2为维修单位,3为销毁单位)
*/
@TableField(value = "agency_type")
private Integer agencyType;
/**
* 联系人
*/
@TableField(value = "contacts")
......
......@@ -5,37 +5,45 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.junmp.junmpProcess.dto.UserListDTO;
import com.junmp.junmpProcess.dto.json.*;
import com.junmp.junmpProcess.exception.WorkFlowException;
import com.junmp.junmpProcess.mapper.OrgUserMapper;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.jyzb.api.exception.enums.OrderExceptionEnum;
import com.junmp.jyzb.entity.SupplierType;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.service.BusFormService;
import com.junmp.jyzb.service.OrderMainService;
import com.junmp.jyzb.service.ReassignmentService;
import com.junmp.jyzb.service.StocktakeService;
import com.junmp.v2.auth.api.bean.login.LoginUser;
import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.dict.entity.SysDict;
import com.junmp.v2.message.api.MessageApi;
import com.junmp.v2.message.api.bean.req.MessageReq;
import com.junmp.v2.message.api.bean.req.MessageSendReq;
import com.junmp.v2.sys.api.UserServiceApi;
import com.junmp.v2.sys.api.bean.user.dto.RoleUserDto;
import com.junmp.v2.sys.api.bean.user.vo.QueryUserInfoVo;
import com.junmp.v2.sys.user.service.SysUserService;
import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.TaskService;
import org.flowable.engine.*;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import com.junmp.junmpProcess.enums.AssigneeTypeEnums;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
import static com.junmp.junmpProcess.common.CommonConstants.BUSINESS_STATUS_4;
import static com.junmp.junmpProcess.common.CommonConstants.PROCESS_STATUS;
import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode;
/**
......@@ -45,16 +53,20 @@ import static com.junmp.junmpProcess.utils.BpmnModelUtils.getChildNode;
@Component
public class CounterSignListener implements ExecutionListener {
@Resource
private TaskService taskService;
public OrderMainService orderMainService;
@Resource
private StocktakeService stocktakeService;
@Resource
public BusFormService busFormService;
@Resource
private MessageApi messageApi;
@Resource
private RepositoryService repositoryService;
@Resource
private OrgUserMapper orgUserMapper;
@Resource
private HistoryService historyService;
private ReassignmentService reassignmentService;
@Override
public void notify(DelegateExecution execution) {
String currentActivityId = execution.getCurrentActivityId();
......@@ -178,34 +190,94 @@ public class CounterSignListener implements ExecutionListener {
}
else if (Type.equals("10"))//自己审批
{
assigneeList.add(LoginContext.getContext().getLoginUser().getUserId().toString());
execution.setVariable("skip", true);
}
if (assigneeList.size()!=0)
{
execution.setVariable(variable, assigneeList);
execution.setVariable("currentAssignee", assigneeList);
//为流程进行中的单据设置审核信息
String orderType= execution.getVariable("orderType").toString();
if (orderType.equals("workOrder"))
{
OrderMain om= orderMainService.getOne(new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getProcessId, execution.getProcessInstanceId()));
if (om!=null&&assigneeList.size()>0)//判断有没有启动的当前单据,并且下一审核人信息不为空,有启动的单据则把审核人信息加入
{
String assigneeString = String.join(",", assigneeList);
om.setCurrentAssign(assigneeString);
orderMainService.updateById(om);
}
}
else if (orderType.equals("reassigment"))//调岗相关
{
Reassignment re= reassignmentService.getOne(new LambdaQueryWrapper<Reassignment>()
.eq(Reassignment::getProcessId, execution.getProcessInstanceId()));
if (re!=null&&assigneeList.size()>0)//判断有没有启动的当前单据,并且下一审核人信息不为空,有启动的单据则把审核人信息加入
{
String assigneeString = String.join(",", assigneeList);
re.setCurrentAssign(assigneeString);
reassignmentService.updateById(re);
}
}
else if (orderType.equals("bussinessOrder"))//业务单据
{
BusForm re= busFormService.getOne(new LambdaQueryWrapper<BusForm>()
.eq(BusForm::getProcessId, execution.getProcessInstanceId()));
if (re!=null&&assigneeList.size()>0)//判断有没有启动的当前单据,并且下一审核人信息不为空,有启动的单据则把审核人信息加入
{
String assigneeString = String.join(",", assigneeList);
re.setCurrentAssign(assigneeString);
busFormService.updateById(re);
}
}
else if (orderType.equals("stocktakeOrder"))//业务单据
{
Stocktake re= stocktakeService.getOne(new LambdaQueryWrapper<Stocktake>()
.eq(Stocktake::getProcessId, execution.getProcessInstanceId()));
if (re!=null&&assigneeList.size()>0)//判断有没有启动的当前单据,并且下一审核人信息不为空,有启动的单据则把审核人信息加入
{
String assigneeString = String.join(",", assigneeList);
re.setCurrentAssign(assigneeString);
stocktakeService.updateById(re);
}
}
assigneeList.forEach(userId->//为相应的用户推送消息
{
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(String.valueOf(userId));
sendReq.setMsgTitle("单据审批提示");
sendReq.setBizType("单据审批");
sendReq.setMsgContent("您有一条单据流程需要进行审批");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
messageApi.queryCount(new MessageReq());
/*推送发送未读数量*/
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(Long.valueOf(userId));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(userId,count1);
if (userId!=LoginContext.getContext().getLoginUser().getUserId().toString())//非本人审核单据
{
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(String.valueOf(userId));
sendReq.setMsgTitle("单据审批提示");
sendReq.setBizType("单据审批");
sendReq.setMsgContent("您有一条单据流程需要进行审批");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
messageApi.queryCount(new MessageReq());
/*推送发送未读数量*/
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(Long.valueOf(userId));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(userId,count1);
}
});
}
} else {
}
}
}
......@@ -9,10 +9,16 @@ import com.junmp.junmpProcess.utils.RabbitMQUtils2;
//import com.rabbitmq.client.Connection;
import com.junmp.jyzb.api.bean.dto.OrderDto;
import com.junmp.jyzb.api.bean.query.OrderMainReq;
import com.junmp.jyzb.api.bean.req.UpdateBusFormReq;
import com.junmp.jyzb.api.bean.req.UpdateOrderDetailReq;
import com.junmp.jyzb.api.bean.req.UpdateOrderReq;
import com.junmp.jyzb.entity.OrderDetail;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.service.OrderMainService;
import com.junmp.jyzb.api.bean.req.UpdateReassignmentReq;
import com.junmp.jyzb.api.exception.enums.OrderExceptionEnum;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.service.*;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
......@@ -29,21 +35,41 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
@Component
public class GlobalEndListener extends AbstractFlowableEngineEventListener {
@Resource
public OrderMainService orderMainService;
@Resource
public OrderDetailService orderDetailService;
@Resource
private HistoryService historyService;
@Resource
private BusFormService busFormService;
@Resource
private PolicemanService policemanService;
@Resource
private ReassignmentService reassignmentService;
@Resource
private StocktakeService stocktakeService;
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@SneakyThrows
@Override
protected void processCompleted(FlowableEngineEntityEvent event) {
if (event.getType() == FlowableEngineEventType.PROCESS_COMPLETED) {
// 获取流程实例ID
String processInstanceId = event.getProcessInstanceId();
......@@ -51,45 +77,53 @@ import java.util.Map;
// 获取流程定义ID
String processDefinitionId = event.getProcessDefinitionId();
List<HistoricVariableInstance> orderType = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName("orderType").list();
String Type= orderType.get(0).getValue().toString();
if (Type.equals("workOrder"))//出入库单据
{
OrderMainReq req=new OrderMainReq();
req.setProcessId(processInstanceId);
OrderMain existOrder= orderMainService.getOne(new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getProcessId, req.getProcessId())
);
UpdateOrderReq updateOrderReq = new UpdateOrderReq();
updateOrderReq.setId(existOrder.getId());
updateOrderReq.setExamineState("finished");
updateOrderReq.setOrderState("ready");
orderMainService.ChangeOrderState(updateOrderReq);
}
if(orderType.size()>0) {
String Type= orderType.get(0).getValue().toString();
if (Type.equals("workOrder") || Type.equals("quickOrder"))//出入库单据(包含快速移库出库单)
{
// OrderMainReq req=new OrderMainReq();
// req.setProcessId(processInstanceId);
OrderMain existOrder= orderMainService.getOne(new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getProcessId, processInstanceId));
existOrder.setExamineState("finished");
existOrder.setOrderState("ready");
UpdateOrderReq updateOrderReq = new UpdateOrderReq();
BeanPlusUtil.copyProperties(existOrder,updateOrderReq);
List<OrderDetail> list = orderDetailService.list(new LambdaQueryWrapper<OrderDetail>()
.eq(OrderDetail::getOrderId, updateOrderReq.getId()));
updateOrderReq.setId(existOrder.getId());
orderMainService.updateById(existOrder);
// orderMainService.ChangeOrderState(updateOrderReq);
List<UpdateOrderDetailReq> collect = list.stream().map(orderDetail -> {
UpdateOrderDetailReq updateOrderDetailReq = new UpdateOrderDetailReq();
BeanPlusUtil.copyProperties(orderDetail, updateOrderDetailReq);
return updateOrderDetailReq;
}).collect(Collectors.toList());
updateOrderReq.setDetailList(collect);
//将单据上传到rabbitmq
orderMainService.AddFinishOrder(updateOrderReq);
}
//业务单据
if (Type.equals("bussinessOrder")){
BusForm busForm = busFormService.getOne(new LambdaQueryWrapper<BusForm>()
.eq(BusForm::getProcessId, processInstanceId));
busForm.setExamineState("finished");
busFormService.updateById(busForm);
}
if (Type.equals("reassigment")){//调岗申请单
Reassignment one = reassignmentService.getOne(new LambdaQueryWrapper<Reassignment>()
.eq(Reassignment::getProcessId, processInstanceId));
UpdateReassignmentReq updateReassignmentReq = new UpdateReassignmentReq();
BeanPlusUtil.copyProperties(one,updateReassignmentReq);
policemanService.changePoliceOrg(updateReassignmentReq);
}
if (Type.equals("stocktakeOrder")){//盘库申请单
// 获取流程实例关联的变量
// Map<String, Object> processVariables = getProcessVariables(processInstanceId);
// if (processVariables!=null)
// {
// // 获取单据类型
// String documentType = (String) processVariables.get("documentType");
// updateOrderReq = JSONObject.parseObject(documentType, new TypeReference<UpdateOrderReq>() {
// });
// updateOrderReq.setExamineState("finished");
// updateOrderReq.setOrderState("ready");
// orderMainService.updateOrder(updateOrderReq);
// // 获取单据类型
// String orderReq = (String) processVariables.get("orderReq");
// // 根据单据类型执行不同的操作
// if ("equipment".equals(documentType)) {
// // 执行装备相关操作,防止循环应用,丢入消息队列
// orderMainService.AddOrder(updateOrderReq);
// } else if ("personnel".equals(documentType)) {
// // 执行人员相关操作
// // ...
// }
// }
}
}
}
}
......
package com.junmp.jyzb.listener;
import org.flowable.engine.RepositoryService;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.junmp.v2.auth.api.context.LoginContext;
import org.apache.commons.lang3.BooleanUtils;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author LoveMyOrange
* @create 2022-10-15 19:47
*/
@Component
public class ServiceListener implements ExecutionListener {
@Resource
private RepositoryService repositoryService;
public class SkipTaskListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
Object skip=execution.getVariable("skip");
}
}
......@@ -31,4 +31,8 @@ public interface EquipmentSizeMapper extends BaseMapper<EquipmentSize> {
@Param("name") String name,
@Param("typeId") String typeId
);
//根据typeId返回号型名称
List<String> searchByTypeIds(@Param("list") List<String> typeIdsList);
}
\ No newline at end of file
......@@ -19,4 +19,8 @@ public interface EquipmentTypeMapper extends BaseMapper<EquipmentType> {
void setTypeParentIds();
List<String> selectByItems(@Param("list1") List<String> list1,
@Param("list2") List<String> list2,
@Param("list3") List<String> list3,
@Param("list4") List<String> list4);
}
\ No newline at end of file
......@@ -8,6 +8,7 @@ import com.junmp.jyzb.api.bean.dto.EqsSumDto;
import com.junmp.jyzb.api.bean.dto.InventoryDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.req.BatchEditingInvsReq;
import com.junmp.jyzb.api.bean.req.InvExpireReq;
import com.junmp.jyzb.api.bean.vo.InventoryVo;
import com.junmp.jyzb.entity.Inventory;
import com.junmp.jyzb.entity.InventorySummary;
......@@ -22,8 +23,6 @@ public interface InventoryMapper extends BaseMapper<Inventory> {
List<Map<String, Object>> getLocationInventory(@Param("queryType")String queryType, @Param("idMsg")String idMsg);
//将表中数据全部删除(base_inventory_summary)
boolean deleteAllMsg();
//根据单警柜统计装备信息
boolean SetCabinetInventory(@Param("brokenNumberDays") Integer brokenNumberDays);
......@@ -59,4 +58,19 @@ public interface InventoryMapper extends BaseMapper<Inventory> {
boolean insertInventorySummary(@Param("req") BatchEditingInvsReq req,@Param("brokenNumberDays")Integer brokenNumberDays);
//判断epc是否存在
List<String> checkEPCList(@Param("list") List<String> epcList);
//根据条件查询满足条件的数据(用于快速移库修改装备仓库id)
List<Inventory> selectEqsByItem(@Param("list") List<Object[]> searchCriteria);
//根据epc获取装备信息
List<InventoryDto> GetInvInfoByEpc(@Param("list") List<String> epcList);
//通过组织机构id获取组织机构下的userIdlist
List<InvExpireReq> selectUserListByOrgs(@Param("list") List<Long> uniqueOrgIDsList);
List<Inventory> searchExpireEqs(@Param("list") List<Object[]> searchItem);
}
\ No newline at end of file
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.WarehouseDto;
import com.junmp.jyzb.api.bean.dto.*;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.InventorySumReq;
import com.junmp.jyzb.entity.InventorySummary;
import org.apache.ibatis.annotations.Mapper;
......@@ -29,4 +31,30 @@ public interface InventorySummaryMapper extends BaseMapper<InventorySummary> {
InventorySummary getTotalNumberAndPrice(@Param("req") InventorySumReq req);
InventorySummary EquipmentStatistics(@Param("req") InventorySumReq req);
List<InventorySummary> selectByEqs(@Param("orgId") Long orgId);
//出入库时无单据查询库存汇总并统计更新或者记账时根据单据查询库存汇总并统计更新
List<InventorySummary> selectSumByItems(@Param("list") List<Object[]> searchCriteria);
//根据组织机构查询报表中的本级及下一级信息
List<TjOrgEqsDto> getByOrgId(@Param("orgId") Long orgId);
List<EqsSumDto> getEqsByOrgId(@Param("list") List<Long> collect1,@Param("sizeId") String sizeId,@Param("typeId") String typeId);
List<TjOrgEqsDto> test(@Param("req") InventoryReq req);
List<TjOrgEqsDto> selectDynamicView();
void insertToSummary(@Param("summaryTableName") String summaryTableName,@Param("sourceTableName") String sourceTableName, @Param("warrantyThreshold") Integer warrantyThreshold);
List<TjOrgEqsDto> selectViewOrgeqsSum();
void useViewOrgeqs(@Param("sql") String sql);
//获取合计
FinalTjOrgEqsDto getSumByViewOrgeqsSum();
List<InventorySumDto> TjOrgEqsDetail(@Param("orgId") Long orgId, @Param("typeIdsList") List<String> typeIdsList, @Param("sizeNameList") List<String> sizeNameList);
}
\ No newline at end of file
package com.junmp.jyzb.mapper;
import com.junmp.jyzb.api.bean.dto.LogDetailDto;
import com.junmp.jyzb.entity.LogDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author lxh专属坐骑
......@@ -11,6 +15,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface LogDetailMapper extends BaseMapper<LogDetail> {
List<LogDetailDto> GetDetailByLogSumId(@Param("summaryId") Long summaryId);
List<LogDetailDto> ShowInOutRecordsByOrder(@Param("orderMainId") String orderMainId);
}
......
......@@ -14,11 +14,7 @@ import org.apache.ibatis.annotations.Param;
* @Entity com.junmp.jyzb.entity.LogSummary
*/
public interface LogSummaryMapper extends BaseMapper<LogSummary> {
IPage<LogSummary> ShowInOutRecordsByOrder(Page<LogSummary> page, @Param("req") LogSummaryReq req);
IPage<LogSummary> ShowInOutRecordsByWarehouse(Page<LogSummary> page,@Param("req") LogSummaryReq req);
IPage<LogSummary> ShowInOutRecordsByCabinet(Page<LogSummary> page,@Param("req") LogSummaryReq req);
// IPage<LogSummary> ShowInOutRecordsPage(Page<LogSummary> page,@Param("req") LogSummaryReq req);
// IPage<LogSummary> ShowInOutRecordsByItems(Page<LogSummary> page,@Param("req") LogSummaryReq req);
}
......
......@@ -2,7 +2,6 @@ package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.entity.OrderDetail;
import com.junmp.jyzb.entity.Product;
import org.apache.ibatis.annotations.Mapper;
@Mapper
......
......@@ -5,14 +5,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.api.bean.query.OrderMainReq;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.entity.Product;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Mapper
public interface OrderMainMapper extends BaseMapper<OrderMain> {
Long addOrder(OrderMain order);
......
package com.junmp.jyzb.mapper;
import com.junmp.jyzb.entity.PoliceFace;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author lxh专属坐骑
* @description 针对表【base_police_face】的数据库操作Mapper
* @createDate 2023-10-31 14:18:50
* @Entity com.junmp.jyzb.entity.PoliceFace
*/
public interface PoliceFaceMapper extends BaseMapper<PoliceFace> {
}
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgPriceDto;
import com.junmp.jyzb.entity.PriceSumSummary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface PriceSumSummaryMapper extends BaseMapper<PriceSumSummary> {
/**
* 存储过程-月初金额数量统计
*/
void MonthStart ();
/**
* 存储过程-月末金额数量统计
*/
void MonthEnd ();
/**
* 存储过程-月末差值计算统计
*/
void MonthDifference ();
List<TjOrgPriceDto> TjOrgPrice(@Param("orgId") Long orgId,
@Param("year") Integer year,
@Param("typeIdsList")List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList);
List<TjOrgPriceDto> TjOrgPriceDetail(@Param("orgId") Long orgId,
@Param("year") Integer year,
@Param("typeIdsList")List<String> typeIdsList,
@Param("sizeNameList") List<String> sizeNameList);
}
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.api.bean.dto.ProductBatchDto;
import com.junmp.jyzb.api.bean.dto.ProductProcessDto;
import com.junmp.jyzb.api.bean.query.ProductBatchReq;
import com.junmp.jyzb.entity.ProductBatch;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:43
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Mapper
public interface ProductBatchMapper extends BaseMapper<ProductBatch> {
/**
* 获取当前最大序号
*/
Integer getMaxSn();
/**
* 指定批次的生成进度
*
* @param batchId 批次号
*/
ProductBatchDto getBatchProcess(@Param("batchId") Long batchId);
/**
* 分页
*
* @param page
* @param req
*/
Page<ProductBatchDto> getBatchPage(@Param("page") Page<ProductBatchDto> page, @Param("batch") ProductBatchReq req);
/**
* 分页
*
* @param page
* @param req
*/
Page<ProductProcessDto> getBatchProcessPage(@Param("page") Page<ProductProcessDto> page, @Param("batch") ProductBatchReq req);
}
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.entity.Product;
import org.apache.ibatis.annotations.Mapper;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:44
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Mapper
public interface ProductMapper extends BaseMapper<Product> {
/**
* 获取当前最大序号
*/
Integer getMaxSn();
}
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.entity.ProductSku;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/29 16:25
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Mapper
public interface ProductSkuMapper extends BaseMapper<ProductSku> {
/**
* 获取当前产品最大序号
*
* @param productId 产品编号
*/
Integer getMaxSn(@Param("productId") Long productId);
/**
* 删除产品对应的号型
*
* @param productId 产品编号
*/
boolean delByProductId(@Param("productId") Long productId);
}
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.api.bean.dto.ProductTagDto;
import com.junmp.jyzb.api.bean.dto.SimpleTagDto;
import com.junmp.jyzb.entity.ProductTag;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:45
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Mapper
public interface ProductTagMapper extends BaseMapper<ProductTag> {
/**
* 从指定批次取一条未生成的标签数据
*
* @param batchId 批次号
*/
SimpleTagDto getInitTagInfo(@Param("batchId") Long batchId);
/**
* 获取TAG
*/
ProductTagDto getTagInfoByTagId(@Param("tagId") Long tagId);
}
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto;
import com.junmp.jyzb.entity.PubOrg;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@Mapper
public interface PubOrgMapper extends BaseMapper<PubOrg> {
......@@ -18,4 +18,8 @@ public interface PubOrgMapper extends BaseMapper<PubOrg> {
void wipeParentIdsData();
//查询下级(除了下一级)
List<TjOrgEqsDto> getDownOrg(@Param("orgId") Long orgId);
//查询下一级(除了下n级)
List<TjOrgEqsDto> getLowOrg(@Param("orgId") Long orgId);
}
\ No newline at end of file
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.entity.Product;
import com.junmp.jyzb.entity.Supplier;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@Mapper
public interface SupplierMapper extends BaseMapper<Supplier> {
......
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.entity.Product;
import com.junmp.jyzb.entity.Shelf;
import com.junmp.jyzb.entity.WarehouseArea;
import org.apache.ibatis.annotations.Mapper;
......
package com.junmp.jyzb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.junmp.jyzb.entity.Product;
import com.junmp.jyzb.entity.Warehouse;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
......
package com.junmp.jyzb.rabbitmq;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.jyzb.service.InventorySummaryService;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
/**
* 装备出入库消息的监听
*/
@Component
public class OrderMQReceiver {
@Resource
private InventorySummaryService inventorySummaryService;
@RabbitListener(queues = "orderResult")//监听队列名
private void a(RabbitMqOrderReq req, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag){
try {
System.out.println("req = " + req);
//将消息进行消费
// Boolean result = inventorySummaryService.processInventoryRecords(req);
// if (result){
// // 手动确认消息
// channel.basicAck(deliveryTag, false);
// }else {
// channel.basicNack(deliveryTag, false, true);
// }
// 手动确认消息
channel.basicAck(deliveryTag, false);
} catch (Exception e) {
// 处理消息过程中发生异常,拒绝消息并将其重新放回队列
try {
channel.basicNack(deliveryTag, false, true);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
}
}
package com.junmp.jyzb.rabbitmq;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.junmp.jyzb.api.bean.req.UpdateOrderReq;
import com.junmp.jyzb.service.OrderLogService;
import com.junmp.jyzb.api.bean.query.InAndOutRecordReq.OutInLogsReq;
import com.junmp.jyzb.service.LogSummaryService;
import com.junmp.jyzb.service.OrderMainService;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Header;
......@@ -13,20 +12,27 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
/**
* 创建消息接收监听�
* */
@Component
@RabbitListener(queues = "1369509498032809902") //监听的队列名 (模拟本地主机接收单据)
public class DirectReceiver {
public class OutInLogsReceiver {
@RabbitHandler
private void modelConvert(UpdateOrderReq req, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
@Resource
private LogSummaryService logSummaryService;
@RabbitListener(queues = "11111")//监听队列名
private void a(OutInLogsReq req, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag){
try {
System.out.println("req = " + req);
//将消息进行消费
Boolean result = logSummaryService.processInventoryRecords(req);
if (result){
// 手动确认消息
channel.basicAck(deliveryTag, false);
}else {
channel.basicNack(deliveryTag, false, true);
}
// 手动确认消息
channel.basicAck(deliveryTag, false);
// channel.basicAck(deliveryTag, false);
} catch (Exception e) {
// 处理消息过程中发生异常,拒绝消息并将其重新放回队列
try {
......
package com.junmp.jyzb.service;
import java.util.List;
import java.util.Map;
/**
* @author zhoudong
* @version 0.1
* @date 2018/12/13 15:32
*/
public interface BaseSearchService<T> {
/**
* 搜 索
* @param keyword
* @param clazz
* @return
*/
Object query(String keyword, Class<T> clazz);
/**
* 搜索高亮显示
* @param keyword 关键字
* @param indexName 索引库
* @param fieldNames 搜索的字段
* @return
*/
List<Map<String,Object>> queryHit(String keyword, String indexName, String ... fieldNames);
/**
* 删除索引库
* @param indexName
* @return
*/
void deleteIndex(String indexName);
}
package com.junmp.jyzb.service;
import com.junmp.jyzb.api.bean.dto.BusFormDto;
import com.junmp.jyzb.api.bean.dto.GeneratePurchaseQuicklyDto;
import com.junmp.jyzb.api.bean.query.QueryBusFormReq;
import com.junmp.jyzb.api.bean.req.GeneratePurchaseQuicklyReq;
import com.junmp.jyzb.api.bean.req.UpdateBusFormReq;
import com.junmp.jyzb.entity.BusForm;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
/**
* @author lxh专属坐骑
* @description 针对表【base_bus_form】的数据库操作Service
......@@ -15,18 +19,16 @@ import com.junmp.v2.db.api.page.PageResult;
public interface BusFormService extends IService<BusForm> {
/**
* 创建业务单
* 创建业务单、修改业务单
* @return
*/
String AddBussinessOrder(UpdateBusFormReq req);
/**
* 修改业务单
* @param req
* @return
*/
boolean UpdateBussinessOrder(UpdateBusFormReq req);
//查看业务单(可根据条件查询)
PageResult<BusFormDto> showBussinessOrder(QueryBusFormReq req);
//根据调拨单,一键生成采购单
List<GeneratePurchaseQuicklyDto> GeneratePurchaseQuickly(GeneratePurchaseQuicklyReq req);
}
......@@ -11,6 +11,8 @@ import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
public interface EquipmentSizeService extends IService<EquipmentSize> {
Object addEs();
String addSize(UpdateEquipmentSizeReq req);
EquipmentSize getOneSize(QueryEquipmentSizeReq req);
......@@ -23,4 +25,10 @@ public interface EquipmentSizeService extends IService<EquipmentSize> {
List<EquipmentSizeDto> getAllSize(QueryEquipmentSizeReq req);
PageResult<EquipmentSizeDto> getSizePages(QueryEquipmentSizeReq req);
//根据typeId返回号型名称
List<String> getByTypeIds(QueryEquipmentSizeReq req);
//根据
List<String> selectByTypeIds(List<String> typeIdsList);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.ESTypeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTypeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTreeDto;
import com.junmp.jyzb.api.bean.dto.OrgDto;
import com.junmp.jyzb.api.bean.query.QueryEquipmentTypeReq;
import com.junmp.jyzb.api.bean.query.QueryOrgReq;
import com.junmp.jyzb.api.bean.req.UpdateEquipmentTypeReq;
import com.junmp.jyzb.entity.EquipmentType;
import com.junmp.jyzb.utils.ResponseResult;
import java.io.IOException;
import java.util.List;
public interface EquipmentTypeService extends IService<EquipmentType> {
Object addEs();
String addEquipment(UpdateEquipmentTypeReq req );
Boolean deleteEquipment(UpdateEquipmentTypeReq req);
Boolean updateEquipment(UpdateEquipmentTypeReq msg);
Boolean changeEquipmentState(UpdateEquipmentTypeReq req);
List<EquipmentTypeDto> getEquipmentList(QueryEquipmentTypeReq req);
EquipmentTypeDto getEquipment(QueryEquipmentTypeReq req );
List<EquipmentTypeDto> getLowType(QueryEquipmentTypeReq orgId);
ResponseResult setTypeParentIds();
ESTypeDto getTypeTreeByEs(QueryEquipmentTypeReq req) throws IOException;
List<EquipmentTreeDto> GetTypeTree();
}
......@@ -79,15 +79,9 @@ public interface InventoryService extends IService<Inventory> {
//批量信息修改
boolean BatchEditingInvsInfo(BatchEditingInvsReq req);
//判断epc是否存在
List<String> checkEPCList(EpcCheckReq req);
//获取装备的出入库记录(根据装备id获取某件装备的出入库记录信息)
PageResult<LogDetail> getInOutRecords(InventoryReq req);
//根据单据获取出入库记录
PageResult<LogSummary> ShowInOutRecordsByOrder(LogSummaryReq req);
PageResult<LogSummary> ShowInOutRecordsByItems(LogSummaryReq req);
boolean test(RabbitMqOrderReq req);
//根据条件查询满足条件的数据(用于快速移库修改装备仓库id)
List<Inventory> selectEqsByItem(List<Object[]> searchCriteria);
}
......@@ -2,25 +2,32 @@ package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.NormalInOutDto;
import com.junmp.jyzb.api.bean.query.InventorySumReq;
import com.junmp.jyzb.api.bean.req.CabinetInOutRecordsReq;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.v2.db.api.page.PageResult;
import liquibase.pro.packaged.L;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
public interface InventorySummaryService extends IService<InventorySummary> {
void MonthStartSum();
void MonthEndSum();
//根据条件查询库存汇总信息
PageResult<InventorySummary> getEquipmentInfo(InventorySumReq req);
//根据条件查询装备汇总信息,用于出库单的选择装备
List<InventorySumDto> GetInventorySumInfo(InventorySumReq req);
//处理本地主机返回单据结果
Boolean processInventoryRecords(RabbitMqOrderReq req);
InventorySummary getOne(InventorySumReq req);
//对summary表中数据进行重新计算装备信息汇总
Boolean updateSummaryInsByOrder(Long orgId);
......@@ -32,4 +39,10 @@ public interface InventorySummaryService extends IService<InventorySummary> {
//计算装备总数(装备数量数据统计)
List<InventorySummary> EquipmentStatistics(InventorySumReq req);
//出入库时无单据查询库存汇总并统计更新或者记账时根据单据查询库存汇总并统计更新
List<InventorySummary> selectSumByItems(List<Object[]> searchCriteria);
boolean insertToSummary();
}
package com.junmp.jyzb.service;
import com.junmp.jyzb.api.bean.dto.LogDetailDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.LogDetailReq;
import com.junmp.jyzb.api.bean.query.LogSummaryReq;
import com.junmp.jyzb.entity.LogDetail;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
/**
* @author lxh专属坐骑
......@@ -10,4 +17,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface LogDetailService extends IService<LogDetail> {
//根据logSumId查询详情
List<LogDetailDto> GetDetailByLogSumId(LogDetailReq req);
//根据单据获取出入库记录
List<LogDetailDto> ShowInOutRecordsByOrder(LogSummaryReq req);
//获取装备的出入库记录(根据装备id获取某件装备的出入库记录信息)
PageResult<LogDetail> getInOutRecords(InventoryReq req);
}
package com.junmp.jyzb.service;
import com.junmp.jyzb.api.bean.query.InAndOutRecordReq.OutInLogsReq;
import com.junmp.jyzb.api.bean.query.LogSummaryReq;
import com.junmp.jyzb.entity.LogSummary;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.v2.db.api.page.PageResult;
/**
* @author lxh专属坐骑
......@@ -10,4 +13,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface LogSummaryService extends IService<LogSummary> {
PageResult<LogSummary> ShowInOutRecordsByItems(LogSummaryReq req);
//本地主机返回出入库结果
Boolean processInventoryRecords(OutInLogsReq req);
}
......@@ -3,12 +3,15 @@ package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.OrderDto;
import com.junmp.jyzb.api.bean.dto.OrderMainDto;
import com.junmp.jyzb.api.bean.dto.ProcessOrderDto;
import com.junmp.jyzb.api.bean.query.InAndOutRecordReq.OutInLogsReq;
import com.junmp.jyzb.api.bean.query.OrderMainReq;
import com.junmp.jyzb.api.bean.query.OrderUploadReq;
import com.junmp.jyzb.api.bean.query.QueryOrderLogReq;
import com.junmp.jyzb.api.bean.req.UpdateOrderReq;
import com.junmp.jyzb.entity.OrderLog;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.entity.OrderNum;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
......@@ -18,7 +21,7 @@ public interface OrderMainService extends IService<OrderMain> {
String AddFinishOrder(UpdateOrderReq req);
//更新任务单
Boolean updateOrder(UpdateOrderReq req);
// Boolean updateOrder(UpdateOrderReq req);
Boolean ChangeOrderState(UpdateOrderReq req);
//判断任务单是否存在
......@@ -45,4 +48,11 @@ public interface OrderMainService extends IService<OrderMain> {
void InOrderExport(OrderMainReq req);
void OutOrderExport(OrderMainReq req);
ProcessOrderDto GetByProcessId(OrderMainReq req);
OrderNum setOrderCode(UpdateOrderReq req);
//快速创建入库单(快速移库内容)
boolean addQuickOrder(OrderMain existOrder);
}
......@@ -11,5 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface PoliceEquipmentService extends IService<PoliceEquipment> {
boolean AddPoliceEqs(FormEqsReq req);
}
package com.junmp.jyzb.service;
import com.junmp.jyzb.entity.PoliceFace;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author lxh专属坐骑
* @description 针对表【base_police_face】的数据库操作Service
* @createDate 2023-10-31 14:18:50
*/
public interface PoliceFaceService extends IService<PoliceFace> {
}
......@@ -2,9 +2,10 @@ package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.PolicemanDto;
import com.junmp.jyzb.api.bean.dto.ReassignmentDto;
import com.junmp.jyzb.api.bean.query.CabinetReq;
import com.junmp.jyzb.api.bean.query.PoliceReassignmentReq;
import com.junmp.jyzb.api.bean.query.PolicemanReq;
import com.junmp.jyzb.api.bean.query.QueryReassignmentReq;
import com.junmp.jyzb.api.bean.req.UpdatePolicemanReq;
import com.junmp.jyzb.api.bean.req.UpdateReassignmentReq;
import com.junmp.jyzb.entity.PoliceEquipment;
......@@ -19,6 +20,8 @@ import java.util.List;
public interface PolicemanService extends IService<Policeman> {
Object addEs();
//添加警员
String AddPoliceman(UpdatePolicemanReq req);
......@@ -71,11 +74,11 @@ public interface PolicemanService extends IService<Policeman> {
//删除账号时同时对警员的信息进行更改操作
boolean UpdatePoliceInfo(UserOrgReq req);
//警员调岗
boolean changePoliceOrg(PoliceReassignmentReq req);
//警员调岗(业务过程)
boolean changePoliceOrg(UpdateReassignmentReq req);
//获取警员的装备信息
PageResult<PoliceEquipment> GetPoliceEqs(PolicemanReq req);
List<PoliceEquipment> GetPoliceEqs(QueryReassignmentReq req);
//警员调岗业务逻辑
boolean UpdatePoliceUser();
......@@ -84,8 +87,15 @@ public interface PolicemanService extends IService<Policeman> {
String PoliceReassignment(UpdateReassignmentReq req);
//查看警员调岗申请单
PageResult<Reassignment> ShowReassignmentPage(UpdateReassignmentReq req);
PageResult<ReassignmentDto> ShowReassignmentPage(QueryReassignmentReq req);
////查询组织机构下的用户以及角色信息(也可以根据别的查询条件查询)
PageResult<SysUserDto> ShowUserRole(SysUserReq req);
//查询没有组织机构的警员信息(添加警员时如果需要则在该列表中)
List<Policeman> GetPoliceWithoutOrg();
//添加人脸和指纹照片或修改
boolean addFaceAndfinger(UpdatePolicemanReq req);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.ProductBatchDto;
import com.junmp.jyzb.api.bean.dto.ProductProcessDto;
import com.junmp.jyzb.api.bean.query.ProductBatchReq;
import com.junmp.jyzb.entity.ProductBatch;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:47
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
public interface ProductBatchService extends IService<ProductBatch> {
/**
* 新增
*
* @param req
*/
boolean addProductBatch(ProductBatchReq req);
/**
* 编辑
*
* @param req
*/
boolean editProductBatch(ProductBatchReq req);
/**
* 删除
*
* @param req
*/
boolean del(ProductBatchReq req);
/**
* 列表信息
*
* @param req
*/
List<ProductBatch> findList(ProductBatchReq req);
/**
* 分页信息
*
* @param req
*/
PageResult<ProductBatchDto> findPage(ProductBatchReq req);
/**
* 分页信息
*
* @param req
*/
PageResult<ProductProcessDto> findProcessPage(ProductBatchReq req);
/**
* 获取批次详细信息
*
* @param batchId
*/
ProductBatchDto getBatchDetail(Long batchId);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.query.ProductReq;
import com.junmp.jyzb.entity.Product;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:46
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
public interface ProductService extends IService<Product> {
/**
* 新增
*
* @param req
*/
boolean addProduct(ProductReq req);
/**
* 编辑
*
* @param req
*/
boolean editProduct(ProductReq req);
/**
* 删除
*
* @param req
*/
boolean del(ProductReq req);
/**
* 列表信息
*
* @param req
*/
List<Product> findList(ProductReq req);
/**
* 分页信息
*
* @param req
*/
PageResult<Product> findPage(ProductReq req);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.query.ProductSkuReq;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/29 16:25
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
public interface ProductSkuService extends IService<ProductSku> {
/**
* 新增
*
* @param req
*/
boolean addProductSku(ProductSkuReq req);
/**
* 编辑
*
* @param req
*/
boolean editProductSku(ProductSkuReq req);
/**
* 删除
*
* @param req
*/
boolean del(ProductSkuReq req);
/**
* 删除产品关联的号型
*
* @param productId
*/
boolean delByProductId(Long productId);
/**
* 列表信息
*
* @param req
*/
List<ProductSku> findList(ProductSkuReq req);
/**
* 分页信息
*
* @param req
*/
PageResult<ProductSku> findPage(ProductSkuReq req);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.ProductTagDto;
import com.junmp.jyzb.api.bean.query.ProductTagReq;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 09:36
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
public interface ProductTagService extends IService<ProductTag> {
/**
* 新增
*
* @param req
*/
boolean addTagInfo(ProductTagReq req);
/**
* 编辑
*
* @param req
*/
boolean editTagInfo(ProductTagReq req);
/**
* 删除
*
* @param req
*/
boolean del(ProductTagReq req);
/**
* 去一条未生产的标签数据
*/
ProductTag checkTagUid(ProductTagReq req);
/**
*
*/
ProductTag findByUid(String tagUid);
/**
* 获取标签信息
*/
ProductTagDto getTagInfo(Long tagId);
/**
* 列表信息
*
* @param req
*/
List<ProductTag> findList(ProductTagReq req);
/**
* 分页信息
*
* @param req
*/
PageResult<ProductTag> findPage(ProductTagReq req);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.ESOrgDto;
import com.junmp.jyzb.api.bean.dto.OrgDto;
import com.junmp.jyzb.api.bean.dto.OrgTreeDto;
import com.junmp.jyzb.api.bean.query.QueryOrgReq;
import com.junmp.jyzb.api.bean.req.UpdateOrgReq;
import com.junmp.jyzb.utils.ResponseResult;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import com.junmp.jyzb.entity.PubOrg;
......@@ -14,6 +15,9 @@ import com.junmp.jyzb.entity.PubOrg;
public interface PubOrgService extends IService<PubOrg> {
///添加至ES
Object AddToEs();
ResponseResult setShortName(Map<String, Object> orgId);
List<Long> getLowerOrg(Long orgId);
......@@ -23,10 +27,14 @@ public interface PubOrgService extends IService<PubOrg> {
List<OrgDto> getOrgList(QueryOrgReq req);
OrgDto getOrgHierarchy(QueryOrgReq req);
ESOrgDto getOrgTreeByEs(QueryOrgReq req) throws IOException;
List<OrgDto> getLowOrg(QueryOrgReq req);
Boolean ChangeState(UpdateOrgReq req);
//根据组织机构id查询出组织机构是否存在
PubOrg PubOrgExist(Long id);
}
package com.junmp.jyzb.service;
import com.junmp.jyzb.api.bean.dto.StocktakeDto;
import com.junmp.jyzb.api.bean.query.StocktakeReq;
import com.junmp.jyzb.api.bean.req.UpdateStocktakeReq;
import com.junmp.jyzb.entity.OrderNum;
......@@ -16,7 +17,7 @@ public interface StocktakeService extends IService<Stocktake> {
String AddStocktakeOrder(UpdateStocktakeReq req);
PageResult<Stocktake> ShowStocktakeOrderPage(StocktakeReq req);
PageResult<StocktakeDto> ShowStocktakeOrderPage(StocktakeReq req);
boolean UpdateStocktakeOrder(UpdateStocktakeReq req);
......
package com.junmp.jyzb.service;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.v2.common.bean.response.ApiRes;
public interface TestService {
Boolean uploadResult(RabbitMqOrderReq req);
boolean test(RabbitMqOrderReq req);
}
package com.junmp.jyzb.service;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgPriceDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgPriceDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.TjReq.TjOrgEqsReq;
import com.junmp.jyzb.api.bean.query.TjReq.TjOrgPriceReq;
import java.util.List;
public interface TjService {
List<TjOrgEqsDto> showOrgEqsList(InventoryReq req);
List<TjOrgEqsDto> test(InventoryReq req);
//装备统计报表
FinalTjOrgEqsDto TjOrgEqs(TjOrgEqsReq req);
List<InventorySumDto> TjOrgEqsDetail(TjOrgEqsReq req);
//财务统计报表
FinalTjOrgPriceDto TjOrgPrice(TjOrgPriceReq req);
List<TjOrgPriceDto> TjOrgPriceDetail(TjOrgPriceReq req);
}
package com.junmp.jyzb.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.junmp.jyzb.api.bean.dto.TriggerDto;
import com.junmp.jyzb.api.bean.dto.WarehouseAreaDto;
import com.junmp.jyzb.api.bean.query.QueryTriggerReq;
import com.junmp.jyzb.api.bean.query.WarehouseAreaReq;
import com.junmp.jyzb.api.bean.req.UpdateTriggerReq;
import com.junmp.jyzb.api.bean.req.UpdateWarehouseAreaReq;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.jyzb.entity.Trigger;
import com.junmp.jyzb.entity.User;
import com.junmp.v2.db.api.page.PageResult;
import java.util.List;
......
package com.junmp.jyzb.service.impl;
import com.junmp.jyzb.service.BaseSearchService;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* elasticsearch 搜索引擎
* @author zhoudong
* @version 0.1
* @date 2018/12/13 15:33
*/
@Service
public class BaseSearchServiceImpl<T> implements BaseSearchService<T> {
private Logger log = LoggerFactory.getLogger(getClass());
@Resource
private ElasticsearchRestTemplate elasticsearchTemplate;
@Override
public Object query(String keyword, Class<T> clazz) {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
Object querys= searchSourceBuilder.query(QueryBuilders.matchQuery(keyword, clazz))
.sort(SortBuilders.scoreSort().order(SortOrder.DESC));
return querys;
}
@Override
public List<Map<String, Object>> queryHit(String keyword, String indexName, String... fieldNames) {
return null;
}
/**
* 高亮显示
* @auther: zhoudong
* @date: 2018/12/13 21:22
*/
// @Override
// public List<Map<String,Object>> queryHit(String keyword, String indexName, String ... fieldNames) {
// // 构造查询条件,使用标准分词器.
// QueryBuilder matchQuery = createQueryBuilder(keyword,fieldNames);
//
// // 设置高亮,使用默认的highlighter高亮器
// HighlightBuilder highlightBuilder = createHighlightBuilder(fieldNames);
//
// // 设置查询字段
// SearchResponse response = elasticsearchTemplate.getClient().prepareSearch(indexName)
// .setQuery(matchQuery)
// .highlighter(highlightBuilder)
// .setSize(10000) // 设置一次返回的文档数量,最大值:10000
// .get();
//
// // 返回搜索结果
// SearchHits hits = response.getHits();
//
// return getHitList(hits);
// }
/**
* 构造查询条件
* @auther: zhoudong
* @date: 2018/12/18 10:42
*/
private QueryBuilder createQueryBuilder(String keyword, String... fieldNames){
// 构造查询条件,使用标准分词器.
return QueryBuilders.multiMatchQuery(keyword,fieldNames) // matchQuery(),单字段搜索
.analyzer("ik_max_word")
.operator(Operator.OR);
}
/**
* 构造高亮器
* @auther: zhoudong
* @date: 2018/12/18 10:44
*/
private HighlightBuilder createHighlightBuilder(String... fieldNames){
// 设置高亮,使用默认的highlighter高亮器
HighlightBuilder highlightBuilder = new HighlightBuilder()
// .field("productName")
.preTags("<span style='color:red'>")
.postTags("</span>");
// 设置高亮字段
for (String fieldName: fieldNames) highlightBuilder.field(fieldName);
return highlightBuilder;
}
/**
* 处理高亮结果
* @auther: zhoudong
* @date: 2018/12/18 10:48
*/
private List<Map<String,Object>> getHitList(SearchHits hits){
List<Map<String,Object>> list = new ArrayList<>();
Map<String,Object> map;
for(SearchHit searchHit : hits){
map = new HashMap<>();
// 处理源数据
map.put("source",searchHit.getSourceAsMap());
// 处理高亮数据
Map<String,Object> hitMap = new HashMap<>();
searchHit.getHighlightFields().forEach((k,v) -> {
String hight = "";
for(Text text : v.getFragments()) hight += text.string();
hitMap.put(v.getName(),hight);
});
map.put("highlight",hitMap);
list.add(map);
}
return list;
}
@Override
public void deleteIndex(String indexName) {
elasticsearchTemplate.deleteIndex(indexName);
}
}
......@@ -2,19 +2,28 @@ package com.junmp.jyzb.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.jyzb.api.bean.dto.BusFormDto;
import com.junmp.jyzb.api.bean.dto.GeneratePurchaseQuicklyDto;
import com.junmp.jyzb.api.bean.query.BussinessOrderDetialReq;
import com.junmp.jyzb.api.bean.query.InventorySumReq;
import com.junmp.jyzb.api.bean.query.QueryBusFormReq;
import com.junmp.jyzb.api.bean.req.GeneratePurchaseQuicklyReq;
import com.junmp.jyzb.api.bean.req.UpdateBusFormReq;
import com.junmp.jyzb.api.exception.enums.OrderExceptionEnum;
import com.junmp.jyzb.entity.BusForm;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.entity.OrderNum;
import com.junmp.jyzb.mapper.InventorySummaryMapper;
import com.junmp.jyzb.service.BusFormService;
import com.junmp.jyzb.mapper.BusFormMapper;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.jyzb.service.StocktakeService;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.common.exception.base.ServiceException;
......@@ -24,10 +33,13 @@ import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.sys.user.entity.SysUserOrg;
import com.junmp.v2.sys.user.service.SysUserOrgService;
import org.flowable.engine.TaskService;
import org.flowable.task.api.Task;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
......@@ -48,6 +60,14 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
@Resource
private SysUserOrgService sysUserOrgService;
@Resource
private InventorySummaryService inventorySummaryService;
@Resource
private InventorySummaryMapper inventorySummaryMapper;
@Resource
protected TaskService taskService;
/**
* 创建业务单
* @param req
......@@ -55,9 +75,23 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
*/
@Override
public String AddBussinessOrder(UpdateBusFormReq req) {
//判断是否有工作流id,如果有则将状态进行修改
if (ObjectUtil.isEmpty(req.getProcessDefinitionId()))
{
req.setExamineState("none");
}
else
{
req.setExamineState("working");
}
//判断该单据是否可以进行修改(如果审核中则不允许修改)
// if (req.getExamineState().equals("working")){
// throw new ServiceException(OrderExceptionEnum.ORDER_CAN_NOT_UPDATE);
// }
BusForm busForm = new BusForm();
BeanUtil.copyProperties(req,busForm);
//设置业务单的使用次数(默认是出库一次,入库一次)
busForm.setUseCount("bothUsing");
if (ObjectUtil.isNull(req.getId())){
String id= UUID.randomUUID().toString();
busForm.setId(id);
......@@ -80,45 +114,72 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
busForm.setCreateTime(DateTimeUtil.getCurrentDateTime());
}
String processInstanceId=null;
//执行工作流
if (req.getExamineState().equals("working"))
{
StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
startProcessInstanceDTO.setOrderId(busForm.getId());
startProcessInstanceDTO.setOrderType("workOrder");
startProcessInstanceDTO.setOrderType("bussinessOrder");
startProcessInstanceDTO.setUserId(req.getApplyUserId());
String ProcessInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
busForm.setProcessId(ProcessInstanceId);
//发物单位和收物单位
if (req.getBussinessType().equals("use")){
startProcessInstanceDTO.setStartOrgName(req.getOrgName());
} else if (req.getBussinessType().equals("purchase")) {
startProcessInstanceDTO.setStartOrgName(req.getSupplierName());
startProcessInstanceDTO.setEndOrgName(req.getOrgName());
} else if (req.getBussinessType().equals("allocate")) {
startProcessInstanceDTO.setStartOrgName(req.getStartOrgName());
startProcessInstanceDTO.setEndOrgName(req.getEndOrgName());
} else if (req.getBussinessType().equals("repair")) {
startProcessInstanceDTO.setStartOrgName(req.getOrgName());
startProcessInstanceDTO.setEndOrgName(req.getSupplierName());
}
else if (req.getBussinessType().equals("remove")) {
startProcessInstanceDTO.setStartOrgName(req.getOrgName());
}
else if (req.getBussinessType().equals("destruction")) {
startProcessInstanceDTO.setStartOrgName(req.getOrgName());
startProcessInstanceDTO.setEndOrgName(req.getSupplierName());
}
//装备列表
startProcessInstanceDTO.setInvList(req.getInvList());
//业务类型
startProcessInstanceDTO.setBussinessType(req.getBussinessType());
processInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
}
if(ObjectUtil.isNotNull(req.getId())){
//已经是一个草稿,在点击提交的时候只需要更新即可,因为数据库中已经存在该单据
updateById(busForm);
//判断当前审核是否跳过
if (processInstanceId!=null && processInstanceId.substring(0,4).equals("skip") ){
String substring = processInstanceId.substring(4);
busForm.setProcessId(substring);
if (ObjectUtil.isNotNull(req.getId()) && !req.getId().trim().isEmpty()) {
updateById(busForm);
} else {
//保存
this.save(busForm);
}
Task currentTask = taskService.createTaskQuery().processInstanceId(substring).singleResult();
// 直接完成当前任务
taskService.complete(currentTask.getId());
}else {
//保存
this.save(busForm);
busForm.setProcessId(processInstanceId);
String assigns= FlowInstanceService.GetNextAssign(processInstanceId);//这里需要手动更新审核人信息
busForm.setCurrentAssign(assigns);
if (ObjectUtil.isNotNull(req.getId()) && !req.getId().trim().isEmpty()) {
//已经是一个草稿,在点击提交的时候只需要更新即可,因为数据库中已经存在该单据
updateById(busForm);
} else {
//保存
this.save(busForm);
}
}
return busForm.getId();
}
/**
* 修改业务单
* @param req
* @return
*/
@Override
public boolean UpdateBussinessOrder(UpdateBusFormReq req) {
BusForm busForm = getById(req.getId());
if (!busForm.getExamineState().equals("none")){
throw new ServiceException(OrderExceptionEnum.ORDER_CAN_NOT_UPDATE);
}
BeanPlusUtil.copyProperties(req,busForm);
busForm.setUpdateTime(DateTimeUtil.getCurrentDateTime());
return updateById(busForm);
}
/**
* 查询业务单,(可以根据业务单进行修改)
......@@ -135,17 +196,7 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
req.setColumn(req.getColumn().replaceAll("[A-Z]", "_$0").toLowerCase());
req.setOrder(req.getOrder().toLowerCase());
}
LambdaQueryWrapper<BusForm> eq = new LambdaQueryWrapper<BusForm>()
//单据类型
.eq(ObjectUtil.isNotNull(req.getBussinessType()), BusForm::getBussinessType, req.getBussinessType())
//审核状态
.eq(ObjectUtil.isNotNull(req.getExamineState()) && !req.getExamineState().trim().isEmpty(), BusForm::getExamineState, req.getExamineState())
//仓库id
.eq(ObjectUtil.isNotNull(req.getWarehouseId()), BusForm::getWarehouseId, req.getWarehouseId())
.eq(ObjectUtil.isNotNull(req.getOrgId()),BusForm::getOrgId,req.getOrgId())
.ge(ObjectUtil.isNotNull(req.getStartTime()), BusForm::getCreateTime, req.getStartTime())
.le(ObjectUtil.isNotNull(req.getEndTime()), BusForm::getCreateTime, req.getEndTime())
.last("order by " + req.getColumn() + " " + req.getOrder());
LambdaQueryWrapper<BusForm> eq = createWrapper(req);
long size = list(eq).size();
Page<BusForm> page = page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
List<BusFormDto> collect = page.getRecords().stream().map(busForm -> {
......@@ -158,6 +209,137 @@ public class BusFormServiceImpl extends ServiceImpl<BusFormMapper, BusForm> impl
page1.setTotal(size);
return PageResultFactory.createPageResult(page1);
}
//根据调拨单,一键生成采购单
@Override
public List<GeneratePurchaseQuicklyDto> GeneratePurchaseQuickly(GeneratePurchaseQuicklyReq req) {
//先把所有发物单位是自己的业务单全部查询出来,然后一一进行比较到底那个是前端传递的数据
// List<BusForm> list = list(new LambdaQueryWrapper<BusForm>()
// .eq(BusForm::getOrgId, req.getOrgId())
// .eq(BusForm::getBussinessType, req.getBussinessType()));
//将所有调拨单中的装备添加到totalList,之后进行去重并且相应数量相加
List<BussinessOrderDetialReq> totalList=new ArrayList<>();
//将所有调拨单获取
List<UpdateBusFormReq> busFormList = req.getBusFormList();
for (UpdateBusFormReq updateBusFormReq:busFormList) {
String detailList = updateBusFormReq.getDetailList();
List<BussinessOrderDetialReq> list = JSONObject.parseArray(detailList, BussinessOrderDetialReq.class);
totalList.addAll(list);
}
//newList用来去重,把相同size和type的数量进行相加
List<BussinessOrderDetialReq> newList=new ArrayList<>();
for (BussinessOrderDetialReq item :totalList) {
boolean found=false;
if (newList.size()==0){
newList.add(item);
continue;
}
for (BussinessOrderDetialReq listItem:newList) {
if (listItem.getSizeId().equals(item.getSizeId()) && listItem.getTypeId().equals(item.getTypeId())) {
// 如果存在匹配的元素,则更新 num 值
listItem.setPlanNum(listItem.getPlanNum() + item.getPlanNum());
found = true;
break;
}
}
if (!found){
newList.add(item);
}
}
//创建list,返回给前端(只返回库存不足的装备和数量)
List<GeneratePurchaseQuicklyDto> returnList=new ArrayList<>();
//查询库存数量(将该组织机构下面的所有类型和号型的数量查询出来)
List<InventorySummary> sumList = inventorySummaryMapper.selectByEqs(req.getOrgId());
for (BussinessOrderDetialReq bussinessOrderDetial:newList) {
boolean flag=false;
for (InventorySummary inventorySummary:sumList) {
if (bussinessOrderDetial.getSizeId().equals(inventorySummary.getSizeId())
&& bussinessOrderDetial.getTypeId().equals(inventorySummary.getSizeId())){
//判断两个数量谁打谁小
if (bussinessOrderDetial.getPlanNum()-inventorySummary.getStockNumber()>0){
GeneratePurchaseQuicklyDto generatePurchaseQuicklyDto = new GeneratePurchaseQuicklyDto();
generatePurchaseQuicklyDto.setNumber(bussinessOrderDetial.getPlanNum()-inventorySummary.getStockNumber());
generatePurchaseQuicklyDto.setSizeId(bussinessOrderDetial.getSizeId());
generatePurchaseQuicklyDto.setSizeName(bussinessOrderDetial.getSizeName());
generatePurchaseQuicklyDto.setTypeId(bussinessOrderDetial.getTypeId());
generatePurchaseQuicklyDto.setTypeName(bussinessOrderDetial.getTypeName());
returnList.add(generatePurchaseQuicklyDto);
}
flag=true;
break;
}
}
if (!flag){
GeneratePurchaseQuicklyDto generatePurchaseQuicklyDto = new GeneratePurchaseQuicklyDto();
generatePurchaseQuicklyDto.setNumber(bussinessOrderDetial.getPlanNum());
generatePurchaseQuicklyDto.setSizeId(bussinessOrderDetial.getSizeId());
generatePurchaseQuicklyDto.setSizeName(bussinessOrderDetial.getSizeName());
generatePurchaseQuicklyDto.setTypeId(bussinessOrderDetial.getTypeId());
generatePurchaseQuicklyDto.setTypeName(bussinessOrderDetial.getTypeName());
returnList.add(generatePurchaseQuicklyDto);
}
}
return returnList;
}
private LambdaQueryWrapper<BusForm> createWrapper(QueryBusFormReq req) {
LambdaQueryWrapper<BusForm> eq = new LambdaQueryWrapper<BusForm>()
//组织机构
.eq(ObjectUtil.isNotNull(req.getOrgId()),BusForm::getOrgId,req.getOrgId())
//装备名称模糊查询
.like(ObjectUtil.isNotNull(req.getTypeName()),BusForm::getInvList,req.getTypeName())
//单号
.like(ObjectUtil.isNotNull(req.getBussinessCode()),BusForm::getBussinessCode,req.getBussinessCode())
//领用人
.like(ObjectUtil.isNotNull(req.getReturnUser()),BusForm::getReturnUser,req.getReturnUser())
//经办人
.like(ObjectUtil.isNotNull(req.getAgent()),BusForm::getAgent,req.getAgent())
//供应商名称
.like(ObjectUtil.isNotNull(req.getSupplierName()),BusForm::getSupplierName,req.getSupplierName())
//发物单位
.like(ObjectUtil.isNotNull(req.getStartOrgName()),BusForm::getStartOrgName,req.getStartOrgName())
//收物单位
.like(ObjectUtil.isNotNull(req.getEndOrgName()),BusForm::getEndOrgName,req.getEndOrgName())
//开始时间
.ge(ObjectUtil.isNotNull(req.getStartTime()), BusForm::getCreateTime, req.getStartTime())
//结束时间
.le(ObjectUtil.isNotNull(req.getEndTime()), BusForm::getCreateTime, req.getEndTime())
.last("order by " + req.getColumn() + " " + req.getOrder());
//业务单据审核状态
if (ObjectUtil.isNotNull(req.getExamineState()) && req.getExamineState().equals("unaudited")){
List<String> examineStateList=new ArrayList<>();
examineStateList.add("none");
examineStateList.add("working");
eq.in(ObjectUtil.isNotNull(req.getExamineState() ) && !req.getExamineState().trim().isEmpty(), BusForm::getExamineState,examineStateList);
} else if (ObjectUtil.isNotNull(req.getExamineState()) && req.getExamineState().equals("finished")) {
eq.eq(ObjectUtil.isNotNull(req.getExamineState() ) && !req.getExamineState().trim().isEmpty(), BusForm::getExamineState, req.getExamineState());
}
//报废、销毁的业务类型
if (ObjectUtil.isNotNull(req.getBussinessType()) && req.getBussinessType().equals("both")){
List<String> bussinessTypeList=new ArrayList<>();
bussinessTypeList.add("remove");
bussinessTypeList.add("destruction");
eq.in(ObjectUtil.isNotNull(req.getBussinessType() ) && !req.getBussinessType().trim().isEmpty(), BusForm::getBussinessType,bussinessTypeList);
}else {
eq.eq(ObjectUtil.isNotNull(req.getBussinessType()) && !req.getBussinessType().trim().isEmpty(), BusForm::getBussinessType, req.getBussinessType());
}
if (ObjectUtil.isNotNull(req.getUserId())){
//当前登录人
eq.and(wrapper-> wrapper.eq(BusForm::getAgent,req.getUserId()).or().eq(BusForm::getCurrentAssign,req.getUserId()));
}
return eq;
}
}
......
......@@ -292,7 +292,6 @@ public class CabinetServiceImpl extends ServiceImpl<CabinetMapper, Cabinet> impl
* @param req
* @return
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateCabinetInfo(UpdateCabinetReq req) {
//查询传入的组织机构id是否存在
......@@ -371,7 +370,6 @@ public class CabinetServiceImpl extends ServiceImpl<CabinetMapper, Cabinet> impl
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean ChangeCabinetState(UpdateCabinetReq req) {
//查询单警柜是否存在
CabinetExist(req.getId());
......@@ -407,7 +405,6 @@ public class CabinetServiceImpl extends ServiceImpl<CabinetMapper, Cabinet> impl
//设置单警柜库存数量信息
@Override
@Transactional(rollbackFor = Exception.class)
public boolean SetInventoryInfo(String id) {
//统计单警柜总数,在库总数,出库总数,装备总价格
cabinetMapper.SetInventoryInfo(id);
......
......@@ -72,7 +72,6 @@ public class DestoryUnitServiceImpl extends ServiceImpl<DestoryUnitMapper, Desto
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean delDestoryUnit(DestoryUnitReq req) {
//抛出异常,销毁、报废单位未选中
if (req.getDeleteList().size()==0){
......
......@@ -4,46 +4,73 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.Repository.SizeRepository;
import com.junmp.jyzb.api.bean.dto.EquipmentSizeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTypeDto;
import com.junmp.jyzb.api.bean.query.QueryEquipmentSizeReq;
import com.junmp.jyzb.api.bean.query.QueryEquipmentTypeReq;
import com.junmp.jyzb.api.bean.req.UpdateEquipmentSizeReq;
import com.junmp.jyzb.api.exception.enums.EquipmentExceptionEnum;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.entity.EquipmentSize;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.jyzb.entity.EquipmentType;
import com.junmp.jyzb.mapper.EquipmentTypeMapper;
import com.junmp.jyzb.service.EquipmentSizeService;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.jyzb.utils.HttpStatus;
import com.junmp.jyzb.utils.ResponseResult;
import com.junmp.jyzb.utils.ReturnMsg;
import com.junmp.jyzb.service.EquipmentTypeService;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import com.junmp.jyzb.mapper.EquipmentSizeMapper;
import java.util.*;
import static com.junmp.jyzb.utils.CheckBlank.checkNotBlank;
@Service
public class EquipmentSizeServiceImpl extends ServiceImpl<EquipmentSizeMapper, EquipmentSize> implements EquipmentSizeService {
@Resource
private EquipmentSizeMapper equipmentSizeMapper;
@Resource
private EquipmentTypeMapper equipmentTypeMapper;
@Resource
private EquipmentTypeService equipmentTypeService;
@Autowired
private SizeRepository sizeRepository;
@Override
public Object addEs() {
QueryEquipmentTypeReq req =new QueryEquipmentTypeReq();
req.setType(0);
List<EquipmentSize> esDto=this.list();
return sizeRepository.saveAll(esDto);
}
@Override
public String addSize(UpdateEquipmentSizeReq req) {
//判断输入的typeId是否存在,如果不存在抛出异常
EquipmentType one = equipmentTypeService.getById(req.getTypeId());
if (one==null){
throw new ServiceException(EquipmentExceptionEnum.EQUIPMENT_TYPE_NOT_EXIST);
}
//判断同一个typeId下面是否有相同的name和code,如果有则添加失败
List<EquipmentSize> list = list(new LambdaQueryWrapper<EquipmentSize>()
.eq(EquipmentSize::getCode, req.getCode())
.eq(EquipmentSize::getName, req.getName())
.eq(EquipmentSize::getTypeId,req.getTypeId()));
if (list.size()>0){
throw new ServiceException(EquipmentExceptionEnum.EQUIPMENT_NAME_CODE_EXIST);
}
EquipmentSize size = new EquipmentSize();
String sizeID=UUID.randomUUID().toString();
BeanPlusUtil.copyProperties(req, size);
size.setId(sizeID);
this.save(size);
sizeRepository.save(size);
return sizeID;
}
......@@ -54,14 +81,21 @@ public class EquipmentSizeServiceImpl extends ServiceImpl<EquipmentSizeMapper, E
@Override
public Boolean deleteSize(UpdateEquipmentSizeReq req) {
sizeRepository.deleteById(Long.valueOf(req.getId()));
return this.removeById(req.getId());
}
@Override
public Boolean updateSize(UpdateEquipmentSizeReq req) {
//判断输入的typeId是否存在,如果不存在抛出异常
EquipmentType one = equipmentTypeService.getById(req.getTypeId());
if (one==null){
throw new ServiceException(EquipmentExceptionEnum.EQUIPMENT_TYPE_NOT_EXIST);
}
EquipmentSize size = this.querySize(req);
BeanPlusUtil.copyProperties(req, size);
sizeRepository.save(size);
return this.updateById(size);
}
......@@ -69,6 +103,7 @@ public class EquipmentSizeServiceImpl extends ServiceImpl<EquipmentSizeMapper, E
public Boolean changeSizeState(UpdateEquipmentSizeReq req) {
EquipmentSize size = this.querySize(req);
size.setState(Integer.valueOf(req.getState()));
sizeRepository.save(size);
return this.updateById(size);
}
......@@ -98,6 +133,39 @@ public class EquipmentSizeServiceImpl extends ServiceImpl<EquipmentSizeMapper, E
}
//根据typeId返回号型名称
@Override
public List<String> getByTypeIds(QueryEquipmentSizeReq req) {
List<String> typeIdsList = req.getTypeIdsList();
List<String> idsList = selectByTypeIds(typeIdsList);
return equipmentSizeMapper.searchByTypeIds(idsList);
}
public List<String> selectByTypeIds(List<String> typeIdsList){
List<String> list1=new ArrayList<>();
List<String> list2=new ArrayList<>();
List<String> list3=new ArrayList<>();
List<String> list4=new ArrayList<>();
List<EquipmentType> list = equipmentTypeService.list(new LambdaQueryWrapper<EquipmentType>().in(EquipmentType::getId, typeIdsList));
for (EquipmentType equipmentType:list) {
//根据parentId判断他在第几层
String parentIds = equipmentType.getParentIds();
List<String> parentIdsList = Arrays.asList(parentIds.split(","));
//判断parentIdsList的长度,将他放在第几层的位置
if (parentIdsList.size()==1){
list1.add(equipmentType.getId());
} else if (parentIdsList.size()==2) {
list2.add(equipmentType.getId());
} else if (parentIdsList.size()==3) {
list3.add(equipmentType.getId());
}else {
list4.add(equipmentType.getId());
}
}
return equipmentTypeMapper.selectByItems(list1,list2,list3,list4);
}
private EquipmentSize querySize(UpdateEquipmentSizeReq req) {
EquipmentSize app = this.getById(req.getId());
......
......@@ -3,12 +3,14 @@ package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.Repository.TypeRepository;
import com.junmp.jyzb.api.bean.dto.ESTypeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTypeDto;
import com.junmp.jyzb.api.bean.dto.EquipmentTreeDto;
import com.junmp.jyzb.api.bean.query.QueryEquipmentTypeReq;
import com.junmp.jyzb.api.bean.req.UpdateEquipmentTypeReq;
import com.junmp.jyzb.api.exception.JYZBAppException;
import com.junmp.jyzb.api.exception.enums.EquipmentTypeExceptionEnum;
import com.junmp.jyzb.api.exception.enums.EquipmentExceptionEnum;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.service.EquipmentTypeService;
import com.junmp.jyzb.service.SupplierService;
......@@ -16,11 +18,14 @@ import com.junmp.jyzb.service.SupplierTypeService;
import com.junmp.jyzb.utils.*;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import com.junmp.jyzb.mapper.EquipmentTypeMapper;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
......@@ -29,23 +34,24 @@ import java.util.stream.Collectors;
public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, EquipmentType> implements EquipmentTypeService {
@Resource
private RedisUtils redisUtils;
private RestHighLevelClient client;
@Resource
private EquipmentTypeMapper equipmentTypeMapper;
@Autowired
private TypeRepository typeRepository;
@Resource
private SupplierService supplierService;
@Resource
private SupplierTypeService supplierTypeService;
private static final String REDIS_TYPE = "Type_";
private List<EquipmentTypeDto> typeDto;
private ArrayList<String> ids;
//查询出类别表中数据的所有装备信息(入库时调用)
public List<EquipmentTypeDto> getEquipmentList(QueryEquipmentTypeReq req) {
List<EquipmentType> list = list(new LambdaQueryWrapper<EquipmentType>()
.eq(EquipmentType::getType,req.getType()));
.eq(EquipmentType::getType,req.getType())
.eq(ObjectUtil.isNotNull(req.getParentId()),EquipmentType::getParentId,req.getParentId()));
List<EquipmentTypeDto> collect = list.stream().map(equipmentType -> {
EquipmentTypeDto org = new EquipmentTypeDto();
BeanPlusUtil.copyProperties(equipmentType, org);
......@@ -54,13 +60,29 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
return collect;
}
@Override
public Object addEs() {
QueryEquipmentTypeReq req =new QueryEquipmentTypeReq();
req.setType(0);
List<EquipmentType> esDto=this.list();
return typeRepository.saveAll(esDto);
}
@Transactional
@Override
public String addEquipment(UpdateEquipmentTypeReq req) {
EquipmentType type = new EquipmentType();
//判断数据库是否已经存在相同的name,如果有,则提示名称已存在
List<EquipmentType> list = list(new LambdaQueryWrapper<EquipmentType>()
.eq(EquipmentType::getMaxCode, req.getName()));
if (list.size()>0 ){
throw new ServiceException(EquipmentExceptionEnum.EQUIPMENT_NAME_EXIST);
}
List<String> chekResult = supplierService.CheckSupplierList(req.getSupplierList());
if (chekResult.size() == 0) {
//判断parentIds是否符合规则,唯一解决办法就是不管他最后输入什么值或者没有传递,我直接对他进行正确的赋值
//先增加code码
BeanPlusUtil.copyProperties(req, type);
......@@ -90,7 +112,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
return String.valueOf(newcode);
} else {
String msg="以下供应商不存在:" +String.join(",", chekResult);
throw new JYZBAppException(EquipmentTypeExceptionEnum.SUPPLIER_NOT_EXIST, msg);
throw new JYZBAppException(EquipmentExceptionEnum.SUPPLIER_NOT_EXIST, msg);
}
}
......@@ -102,7 +124,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
wrapper.eq(ObjectUtil.isNotEmpty(req.getId()), EquipmentType::getParentId, req.getParentId());
List<EquipmentType> eqList = list(wrapper);
if (eqList.size() > 0) {
throw new ServiceException(EquipmentTypeExceptionEnum.EQUIPMENT_CHILDREN_EXIST);
throw new ServiceException(EquipmentExceptionEnum.EQUIPMENT_CHILDREN_EXIST);
} else {
this.removeById(req.getId());
}
......@@ -162,10 +184,11 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
.collect(Collectors.toList()));
}
// 保存type
type.setUpdateTime(DateTimeUtil.getCurrentDateTime());
return this.updateById(type);
} else {
String msg="以下供应商不存在:" +String.join(",", chekResult);
throw new JYZBAppException(EquipmentTypeExceptionEnum.SUPPLIER_NOT_EXIST, msg);
throw new JYZBAppException(EquipmentExceptionEnum.SUPPLIER_NOT_EXIST, msg);
}
}
......@@ -173,7 +196,7 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
EquipmentType type = this.getById(req.getId());
if (ObjectUtil.isNull(type)) {
throw new ServiceException(EquipmentTypeExceptionEnum.EQUIPMENT_TYPE_NOT_EXIST);
throw new ServiceException(EquipmentExceptionEnum.EQUIPMENT_TYPE_NOT_EXIST);
}
return type;
}
......@@ -257,6 +280,115 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS);
}
public ESTypeDto getTypeTreeByEs(QueryEquipmentTypeReq req) throws IOException {
ElasticsearchUtil es=new ElasticsearchUtil<>(client);
// 先从ES中拿到检索数据
List<EquipmentType> searchResults = es.searchEntities("type_pinyin","name",0, 50, req.getTypeName(),EquipmentType.class);
LambdaQueryWrapper<EquipmentType> wp = this.createWrapper(req);
// 获取所有组织机构数据
List<EquipmentType> allTypes = this.list(wp);
List<EquipmentTypeDto> treeResult= buildTypeTree(searchResults,allTypes);
ESTypeDto resultDto=new ESTypeDto();
resultDto.setTypeDto(treeResult);
SetIds(treeResult);
resultDto.setIds(ids);
return resultDto;
}
public void SetIds(List<EquipmentTypeDto> treeResult) {
ids = new ArrayList<>();
if (treeResult != null) {
for (EquipmentTypeDto equipmentTypeDto : treeResult) {
setIdsRecursive(equipmentTypeDto);
}
}
}
private void setIdsRecursive(EquipmentTypeDto equipmentTypeDto) {
if (equipmentTypeDto != null) {
// 添加当前节点的 id
ids.add(equipmentTypeDto.getId());
// 递归处理子节点
if (equipmentTypeDto.getChildren() != null) {
for (EquipmentTypeDto child : equipmentTypeDto.getChildren()) {
setIdsRecursive(child);
}
}
}
}
public List<EquipmentTypeDto> buildTypeTree(List<EquipmentType> searchResults, List<EquipmentType> allTypes) {
Map<String, EquipmentTypeDto> typeDtoMap = new HashMap<>();
// 将所有设备类型转换为EquipmentTypeDto并放入map中,同时计算子节点数量
for (EquipmentType type : allTypes) {
EquipmentTypeDto typeDto = new EquipmentTypeDto();
BeanPlusUtil.copyProperties(type, typeDto);
// 其他字段的映射...
// 计算子节点数量
int childCount = 0;
for (EquipmentType childType : allTypes) {
if (childType.getParentId().equals(type.getId())) {
childCount++;
}
}
typeDto.setChildCount(childCount);
if (childCount<=0)
{
typeDto.setIsLeaf(true);
}
else
{
typeDto.setIsLeaf(false);
}
// 将EquipmentTypeDto放入map中,以id为键
typeDtoMap.put(typeDto.getId(), typeDto);
}
List<EquipmentTypeDto> tree = new ArrayList<>();
// 遍历所有搜索到的设备类型数据,构建树
for (EquipmentType searchResult : searchResults) {
EquipmentTypeDto typeDto = typeDtoMap.get(searchResult.getId());
// 如果找到对应的EquipmentTypeDto
if (typeDto != null && !tree.contains(typeDto)) {
// 从当前节点开始,依次向上查找上级节点,直到最顶层
String parentId = typeDto.getParentId();
// 将当前节点及其相关节点加入树中
while (parentId != null) {
EquipmentTypeDto parentDto = typeDtoMap.get(parentId);
if (parentDto != null) {
// 将当前节点添加到上级节点的children中,确保不重复添加
if (!parentDto.getChildren().contains(typeDto)) {
parentDto.getChildren().add(typeDto);
}
// 如果上级节点是最顶层,将上级节点添加到树中,确保不重复添加
if (parentDto.getParentId().equals("00000000-0000-0000-0000-000000000000")
&& !parentDto.getId().equals("00000000-0000-0000-0000-000000000000") && !tree.contains(parentDto)) {
tree.add(parentDto);
}
// 将上级节点设为当前节点,继续向上查找
typeDto = parentDto;
parentId = typeDto.getParentId();
} else {
parentId = null; // 上级节点不存在,跳出循环
}
}
}
}
return tree;
}
//获取整棵type树
public List<EquipmentTreeDto> GetTypeTree() {
List<EquipmentType> list = list(new LambdaQueryWrapper<EquipmentType>()
......
......@@ -138,30 +138,11 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
}else {
brokenNumberDays=Integer.parseInt(sysDictItem.getItemValue());
}
//先查询inventory_summary表中的物资阈值字段是否为空,如果为空则默认他是默认值,如果不是默认值,将其存储,再重新统计后进行赋值
// List<InventorySummary> list = inventorySummaryService.list(new LambdaQueryWrapper<InventorySummary>()
// .isNotNull(InventorySummary::getThreshold)
// .eq(InventorySummary::getLocationType,0));
//清空数据库中已存在的信息
inventoryMapper.deleteAllMsg();
//放入单警柜信息汇总
boolean b = inventoryMapper.SetCabinetInventory(brokenNumberDays);
//放入仓库区域信息汇总
boolean b1 = inventoryMapper.SetWarehouseInventory(brokenNumberDays);
// boolean b2=true;
// if (list.size()>0){
// for (InventorySummary inventorySummary:list) {
// InventorySummary one = inventorySummaryService.getOne(new LambdaQueryWrapper<InventorySummary>()
// .eq(InventorySummary::getLocationId, inventorySummary.getLocationId())
// .eq(InventorySummary::getLocationType, 0)
// .eq(InventorySummary::getSizeId, inventorySummary.getSizeId())
// .eq(InventorySummary::getTypeId, inventorySummary.getTypeId())
// .eq(InventorySummary::getOrgId, inventorySummary.getOrgId()));
// one.setThreshold(inventorySummary.getThreshold());
// b2 = inventorySummaryService.updateById(one);
// }
// }
//放入单警柜信息汇总
boolean b = inventoryMapper.SetCabinetInventory(brokenNumberDays);
return (b && b1);
}
......@@ -185,7 +166,6 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
//装备绑定箱门
@Override
@Transactional(rollbackFor = Exception.class)
public boolean InventoryBind(EquipmentBindReq req) {
//判断箱门是否存在
CabinetBox cabinetBox = cabinetBoxService.CabinetBoxExist(req.getCabinetBoxId());
......@@ -214,22 +194,8 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
if (epcList.size()==0){
throw new ServiceException(CabinetExceptionEnum.PARAMETER_ERROR);
}
List<InventoryDto> inventoryDtoList=new ArrayList<>();
List<Inventory> inventoryList = list(new LambdaQueryWrapper<Inventory>().in(Inventory::getEpc, epcList));
for (Inventory inventory:inventoryList) {
InventoryDto inventoryDto = new InventoryDto();
BeanPlusUtil.copyProperties(inventory, inventoryDto);
//设置型号名称,类别名称,供应商名称
String sizeName = equipmentSizeService.getById(inventory.getSizeId()).getName();
String typeName = equipmentTypeService.getById(inventory.getTypeId()).getName();
if (inventory.getSupplierId() != null) {
String supplierName = supplierService.getById(inventory.getSupplierId()).getName();
inventoryDto.setSupplierName(supplierName);
}
inventoryDto.setSizeName(sizeName);
inventoryDto.setTypeName(typeName);
inventoryDtoList.add(inventoryDto);
}
List<InventoryDto> inventoryDtoList=inventoryMapper.GetInvInfoByEpc(epcList);
return inventoryDtoList;
}
......@@ -339,7 +305,9 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
inventoryDto.setOrgName(orgName);
//查询图片并返回
String photo = equipmentSizeService.getById(inventory.getSizeId()).getPhoto();
inventoryDto.setPhoto(photo);
if (photo != null){
inventoryDto.setPhoto(photo);
}
return inventoryDto;
}).collect(Collectors.toList());
Page<InventoryDto> page1 = PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize());
......@@ -390,6 +358,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
}
}
//修改库存信息汇总
@Transactional(rollbackFor = Exception.class)
public boolean setInventorySummary(BatchEditingInvsReq req){
......@@ -560,54 +529,6 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
}
//根据单据查询出入库记录
@Override
public PageResult<LogSummary> ShowInOutRecordsByOrder(LogSummaryReq req) {
Page<LogSummary> page = PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize());
IPage<LogSummary> ipage=logSummaryMapper.ShowInOutRecordsByOrder(page,req);
List<LogSummary> logSummaryList=new ArrayList<>();
ipage.getRecords().forEach(logSummary -> {
List<LogDetail> list = logDetailService.list(new LambdaQueryWrapper<LogDetail>()
.eq(LogDetail::getSummaryId, logSummary.getId()));
logSummary.setLogDetailList(list);
logSummaryList.add(logSummary);
});
page.setRecords(logSummaryList);
return PageResultFactory.createPageResult(page);
}
//根据条件查询出入库记录
@Override
public PageResult<LogSummary> ShowInOutRecordsByItems(LogSummaryReq req) {
Page<LogSummary> page = PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize());
List<LogSummary> logSummaryList=new ArrayList<>();
IPage<LogSummary> ipage;
if (req.getLocationType()==0){
ipage = logSummaryMapper.ShowInOutRecordsByWarehouse(page, req);
}else {
ipage=logSummaryMapper.ShowInOutRecordsByCabinet(page,req);
}
ipage.getRecords().forEach(logSummary -> {
List<LogDetail> list = logDetailService.list(new LambdaQueryWrapper<LogDetail>()
.eq(LogDetail::getSummaryId, logSummary.getId()));
logSummary.setLogDetailList(list);
logSummaryList.add(logSummary);
});
page.setRecords(logSummaryList);
return PageResultFactory.createPageResult(page);
}
//获取装备的出入库信息(根据装备id获取该装备的出入库记录)
@Override
public PageResult<LogDetail> getInOutRecords(InventoryReq req) {
//通过装备id获取出入库记录(判断id是否存在)
InventoryExist(req.getId());
LambdaQueryWrapper<LogDetail> eq = new LambdaQueryWrapper<LogDetail>().eq(LogDetail::getInventoryId,req.getId());
Page<LogDetail> page = logDetailService.page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
return PageResultFactory.createPageResult(page);
}
//查询装备数量报表
@Override
public List<EqsSumDto> GetListEquipment(InventoryReq req) {
......@@ -636,7 +557,7 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
String typeName = equipmentTypeService.getOne(new LambdaQueryWrapper<EquipmentType>()
.eq(EquipmentType::getId, typeId)).getName();
//如果有供应商id的前提下,设置supplierName
if (ObjectUtil.isNotNull(supplierId)){
if (ObjectUtil.isNotNull(supplierId) && !supplierId.trim().isEmpty()){
String supplierName = supplierService.getOne(new LambdaQueryWrapper<Supplier>()
.eq(Supplier::getId, supplierId)).getName();
map.put("supplierName",supplierName);
......@@ -660,26 +581,16 @@ public class InventoryServiceImpl extends ServiceImpl<InventoryMapper, Inventory
}
//判断epc是否存在
@Override
public boolean test(RabbitMqOrderReq req) {
String exchangeName="hahaha";
//需要判断是入库单还是出库单,入库单传收物单位id,出库单传发物单位id
if(req.getOrderMainReq().getOrderType().equals("in")){
org.springframework.amqp.core.Queue queue=new org.springframework.amqp.core.Queue( "11111",true,false,false);
Exchange exchange = new DirectExchange(exchangeName, true, false);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getOrderMainReq().getEndOrgId().toString()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getOrderMainReq().getEndOrgId().toString(), req);
}else {
org.springframework.amqp.core.Queue queue = new Queue("11111", true, false, false);
Exchange exchange = new DirectExchange(exchangeName, true, false);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getOrderMainReq().getStartOrgId().toString()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getOrderMainReq().getStartOrgId().toString(), req);
}
return true;
public List<String> checkEPCList(EpcCheckReq req) {
return inventoryMapper.checkEPCList(req.getEpcList());
}
//根据条件查询满足条件的数据(用于快速移库修改装备仓库id)
@Override
public List<Inventory> selectEqsByItem(List<Object[]> searchCriteria) {
return inventoryMapper.selectEqsByItem(searchCriteria);
}
......
......@@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.NormalInOutDto;
import com.junmp.jyzb.api.bean.dto.WarehouseDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.InventorySumReq;
import com.junmp.jyzb.api.bean.req.CabinetInOutRecordsReq;
import com.junmp.jyzb.api.bean.req.RabbitMqOrderReq;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.mapper.PriceSumSummaryMapper;
import com.junmp.jyzb.service.*;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
......@@ -25,9 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.stream.Collectors;
@Service
......@@ -65,8 +65,18 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
@Resource
private SysDictItemService sysDictItemService;
@Resource
private PriceSumSummaryMapper PriceSumSummaryMapper;
@Override
public void MonthStartSum() {
PriceSumSummaryMapper.MonthStart();
}
@Override
public void MonthEndSum() {
PriceSumSummaryMapper.MonthEnd();
PriceSumSummaryMapper.MonthDifference();
}
//根据条件查询库存汇总信息
@Override
public PageResult<InventorySummary> getEquipmentInfo(InventorySumReq req) {
......@@ -84,26 +94,19 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
req.setOrder(req.getOrder().toLowerCase());
}
LambdaQueryWrapper<InventorySummary> wp = createWrapper(req);//取出仓库中总数并计算
List<InventorySummary> list = list(wp);
long size = list(wp).size();
Page<InventorySummary> sumList= this.page(PageFactory.getDefaultPage(req.getPageNo(),req.getPageSize()),wp);
List<InventorySummary> records = sumList.getRecords();
List<InventorySummary> collect = records.stream().map(data -> {
Inventory inventory = inventoryService.list(new LambdaQueryWrapper<Inventory>()
.eq(Inventory::getOrgId, data.getOrgId())
.eq(Inventory::getSizeId, data.getSizeId())
.eq(Inventory::getTypeId, data.getTypeId())).get(0);
String instructions = equipmentSizeService.getOne(new LambdaQueryWrapper<EquipmentSize>()
.eq(EquipmentSize::getId, data.getSizeId())).getInstructions();
data.setInstructions(instructions);
data.setWarrantyPeriod(inventory.getWarrantyPeriod());
data.setMaintenancePeriod(inventory.getMaintenancePeriod());
String photo = equipmentSizeService.getOne(new LambdaQueryWrapper<EquipmentSize>().eq(EquipmentSize::getId,inventory.getSizeId())).getPhoto();
data.setPhoto(photo);
return data;
}).collect(Collectors.toList());
//对该装备typeId进行排序
Collections.sort(list, new Comparator<InventorySummary>() {
@Override
public int compare(InventorySummary o1, InventorySummary o2) {
return o1.getTypeId().compareTo(o2.getTypeId());
}
});
Page<InventorySummary> page1 = PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize());
page1.setRecords(collect);
page1.setRecords(list);
page1.setTotal(size);
return PageResultFactory.createPageResult(page1);
}
......@@ -118,134 +121,18 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
return inventorySummaryMapper.GetInventorySumInfo(req);
}
//处理本地主机返回单据结果
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean processInventoryRecords(RabbitMqOrderReq req) {
//将主单据信息复制进行更新
OrderMain orderMain = new OrderMain();
BeanPlusUtil.copyProperties(req.getOrderMainReq(),orderMain);
orderMainService.updateById(orderMain);
//将子单据信息复制进行更新
OrderDetail orderDetail = new OrderDetail();
BeanPlusUtil.copyProperties(req.getOrderDetailReq(),orderDetail);
orderDetailService.updateById(orderDetail);
////对装备表进行更新或者添加
//新增列表
List<Inventory> addList = new ArrayList<>();
//更新列表
List<Inventory> updateList = new ArrayList<>();
//出库out,入库in
String orderType=orderMain.getOrderType();
//组织机构
Long orgId;
if (orderType.equals("in")){
orgId=orderMain.getEndOrgId();
}else {
orgId=orderMain.getStartOrgId();
}
//将具体Epc进行处理(判断装备是否具有id,如果没有id表示新增一条数据在数据库中--采购)
req.getInventoryReqList().forEach(inventoryReq -> {
Inventory inventory = new Inventory();
BeanPlusUtil.copyProperties(inventoryReq,inventory);
inventory.setOrgId(orgId);
//新增装备
if (ObjectUtil.isNull(inventory.getId())){
//修改状态
inventory.setId(UUID.randomUUID().toString());
inventory.setLocationState(orderMain.getOrderType());
inventory.setBussinessState("normal");
inventory.setState("normal");
addList.add(inventory);
}else {
//修改状态
inventory.setLocationState(orderMain.getOrderType());
//修改业务状态
if (orderType.equals("in")){
inventory.setBussinessState("normal");
inventory.setState("normal");
}else if (orderType.equals("out") && orderMain.getBussinessType().equals("repair")){
inventory.setBussinessState(orderMain.getBussinessType());
inventory.setState("fix");
}else if (orderType.equals("out") && orderMain.getBussinessType().equals("remove")){
inventory.setBussinessState(orderMain.getBussinessType());
inventory.setState("destory");
}else {
inventory.setBussinessState(orderMain.getBussinessType());
inventory.setState("normal");
}
updateList.add(inventory);
}
});
boolean b=false;
if (ObjectUtil.isNotNull(addList) && addList.size()>0){
b = inventoryService.saveBatch(addList);
}
if (ObjectUtil.isNotNull(updateList) && updateList.size()>0){
b = inventoryService.updateBatchById(updateList);
}
//对装备进行记录,存入log表形成出入库记录
Boolean c = insertLog(req,orderMain,addList,updateList);
Boolean d = updateSummaryInsByOrder(orgId);
return (b && c && d );
public InventorySummary getOne(InventorySumReq req) {
LambdaQueryWrapper<InventorySummary> eq = new LambdaQueryWrapper<InventorySummary>()
.eq(ObjectUtil.isNotEmpty(req.getOrgId()), InventorySummary::getOrgId, req.getOrgId())
.eq(ObjectUtil.isNotEmpty(req.getLocationId()), InventorySummary::getLocationId, req.getLocationId())
.eq(ObjectUtil.isNotEmpty(req.getTypeId()), InventorySummary::getTypeId, req.getTypeId())
.eq(ObjectUtil.isNotEmpty(req.getSizeId()), InventorySummary::getSizeId, req.getSizeId())
.eq(ObjectUtil.isNotEmpty(req.getUnitPrice()), InventorySummary::getUnitPrice, req.getUnitPrice());
InventorySummary one = getOne(eq);
return one;
}
//对装备进行记录,存入log表形成出入库记录
@Transactional(rollbackFor = Exception.class)
public Boolean insertLog(RabbitMqOrderReq req,OrderMain orderMain,List<Inventory> addList,List<Inventory> updateList ){
//插入log_summary
LogSummary logSummary = new LogSummary();
logSummary.setDevice(req.getDevice());
logSummary.setDeviceType(req.getDeviceType());
logSummary.setLocationType(0);
logSummary.setUserName(req.getUserName());
logSummary.setUseTime(req.getUseTime());
if (orderMain.getOrderType().equals("in")){
logSummary.setOutInState("in");
logSummary.setOrgId(orderMain.getEndOrgId());
logSummary.setOrgName(orderMain.getEndOrgName());
}else {
logSummary.setOutInState("out");
logSummary.setOrgId(orderMain.getStartOrgId());
logSummary.setOrgName(orderMain.getStartOrgName());
}
logSummary.setOrderMainId(orderMain.getId());
logSummary.setOrderCode(orderMain.getOrderCode());
logSummary.setBussinessType(orderMain.getBussinessType());
boolean a = logSummaryService.save(logSummary);
//存入log_detail表中
List<LogDetail> logDetailList=new ArrayList<>();
//判断是哪个列表不为空,进行出入库记录
if (addList.size()!=0 && ObjectUtil.isNotNull(addList)){
for (Inventory inventory:addList) {
LogDetail logDetail = new LogDetail();
BeanPlusUtil.copyProperties(inventory,logDetail);
logDetail.setInventoryId(inventory.getId());
logDetail.setBussinessType(orderMain.getBussinessType());
logDetail.setOutInState(orderMain.getOrderType());
logDetail.setOrderCode(orderMain.getOrderCode());
logDetail.setSummaryId(logSummary.getId());
logDetail.setOrderMainId(orderMain.getId());
logDetail.setErrorState(0);
logDetailList.add(logDetail);
}
}
if (updateList.size()!=0 && ObjectUtil.isNotNull(updateList)){
for (Inventory inventory:updateList) {
LogDetail logDetail = new LogDetail();
BeanPlusUtil.copyProperties(inventory,logDetail);
logDetail.setOutInState(orderMain.getOrderType());
logDetail.setSummaryId(logSummary.getId());
logDetail.setOrderMainId(orderMain.getId());
logDetailList.add(logDetail);
}
}
boolean b = logDetailService.saveBatch(logDetailList);
return (a && b);
}
//对summary表中数据进行重新计算装备信息汇总
public Boolean updateSummaryInsByOrder(Long orgId){
......@@ -286,10 +173,10 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
}
}
//修改summary表中数据
boolean b = updateSummaryInsByCabinet(req.getLocationId());
// boolean b = updateSummaryInsByCabinet(req.getLocationId());
//添加日志记录、
Boolean c = insertCabinetLog(req,inventoryLogsList);
return (a && b && c);
return (a && c);
}
......@@ -357,6 +244,25 @@ public class InventorySummaryServiceImpl extends ServiceImpl<InventorySummaryMa
return inventorySummaryList;
}
//出入库时无单据查询库存汇总并统计更新或者记账时根据单据查询库存汇总并统计更新
@Override
public List<InventorySummary> selectSumByItems(List<Object[]> searchCriteria) {
return inventorySummaryMapper.selectSumByItems(searchCriteria);
}
@Override
public boolean insertToSummary() {
String summaryTableName="base_inventory_summary_type2";
String sourceTableName="base_inventory_copy1";
//临近报废设置配置值
//应该要去数据库进行查询,但是现在目前写死15天
Integer warrantyThreshold=15;
inventorySummaryMapper.insertToSummary(summaryTableName,sourceTableName,warrantyThreshold);
return true;
}
private LambdaQueryWrapper<InventorySummary> createWrapper(InventorySumReq req) {
LambdaQueryWrapper<InventorySummary> wrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isEmpty(req)) {
......
package com.junmp.jyzb.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.LogDetailDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.LogDetailReq;
import com.junmp.jyzb.api.bean.query.LogSummaryReq;
import com.junmp.jyzb.entity.LogDetail;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.service.InventoryService;
import com.junmp.jyzb.service.LogDetailService;
import com.junmp.jyzb.mapper.LogDetailMapper;
import com.junmp.jyzb.service.OrderMainService;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author lxh专属坐骑
* @description 针对表【base_log_detail】的数据库操作Service实现
......@@ -15,6 +30,43 @@ import org.springframework.stereotype.Service;
public class LogDetailServiceImpl extends ServiceImpl<LogDetailMapper, LogDetail>
implements LogDetailService{
@Resource
private LogDetailService logDetailService;
@Resource
private InventoryService inventoryService;
@Resource
private LogDetailMapper logDetailMapper;
@Resource
private OrderMainService orderMainService;
//根据logSumId查询详情
@Override
public List<LogDetailDto> GetDetailByLogSumId(LogDetailReq req) {
List<LogDetailDto> list = logDetailMapper.GetDetailByLogSumId(req.getSummaryId());
return list;
}
//根据单据查询出入库记录
@Override
public List<LogDetailDto> ShowInOutRecordsByOrder(LogSummaryReq req) {
List<LogDetailDto> list = logDetailMapper.ShowInOutRecordsByOrder(req.getOrderMainId());
return list;
}
//获取装备的出入库信息(根据装备id获取该装备的出入库记录)
@Override
public PageResult<LogDetail> getInOutRecords(InventoryReq req) {
//通过装备id获取出入库记录(判断id是否存在)
inventoryService.InventoryExist(req.getId());
LambdaQueryWrapper<LogDetail> eq = new LambdaQueryWrapper<LogDetail>().eq(LogDetail::getInventoryId,req.getId());
Page<LogDetail> page = logDetailService.page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
return PageResultFactory.createPageResult(page);
}
}
......
package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.entity.LogSummary;
import com.junmp.jyzb.service.LogSummaryService;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.NormalInOutDto;
import com.junmp.jyzb.api.bean.query.InAndOutRecordReq.*;
import com.junmp.jyzb.api.bean.query.LogSummaryReq;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.mapper.InventorySummaryMapper;
import com.junmp.jyzb.service.*;
import com.junmp.jyzb.mapper.LogSummaryMapper;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lxh专属坐骑
......@@ -15,6 +35,254 @@ import org.springframework.stereotype.Service;
public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSummary>
implements LogSummaryService{
@Resource
private LogSummaryService logSummaryService;
@Resource
private InventoryService inventoryService;
@Resource
private OrderMainService orderMainService;
@Resource
private OrderDetailService orderDetailService;
@Resource
private LogDetailService logDetailService;
@Resource
private InventorySummaryService inventorySummaryService;
@Resource
private InventorySummaryMapper inventorySummaryMapper;
//根据条件查询出入库记录
@Override
public PageResult<LogSummary> ShowInOutRecordsByItems(LogSummaryReq req) {
//(如果传其他不是数据库字段参数或者排序规则不是deac或者asc可能会出现错误)
if (ObjectUtil.isNotNull(req.getColumn()) && !req.getColumn().trim().isEmpty() &&
(req.getOrder().equalsIgnoreCase("asc")|| req.getOrder().equalsIgnoreCase("desc")) &&
ObjectUtil.isNotNull(req.getOrder()) && !req.getOrder().trim().isEmpty()) {
//修改字段,和数据库字段进行统一
req.setColumn(req.getColumn().replaceAll("[A-Z]", "_$0").toLowerCase());
req.setOrder(req.getOrder().toLowerCase());
}
LambdaQueryWrapper<LogSummary> eq = new LambdaQueryWrapper<LogSummary>()
.eq(LogSummary::getOrgId,req.getOrgId())
.eq(LogSummary::getLocationType,req.getLocationType())
.eq(ObjectUtil.isNotNull(req.getBussinessType()) && !req.getBussinessType().trim().isEmpty(),LogSummary::getBussinessType,req.getBussinessType())
.eq(ObjectUtil.isNotNull(req.getOutInState()) && !req.getOutInState().trim().isEmpty(),LogSummary::getOutInState,req.getOutInState())
.eq(ObjectUtil.isNotNull(req.getLocationId()),LogSummary::getLocationId,req.getLocationId())
.eq(ObjectUtil.isNotNull(req.getUserName()),LogSummary::getUserName,req.getUserName())
.ge(ObjectUtil.isNotNull(req.getStartTime()),LogSummary::getUseTime,req.getStartTime())
.le(ObjectUtil.isNotNull(req.getEndTime()),LogSummary::getUseTime,req.getEndTime())
.like(ObjectUtil.isNotNull(req.getEquipmentList()),LogSummary::getEquipmentList,req.getEquipmentList())
.last("order by " + req.getColumn() + " " + req.getOrder());
Page<LogSummary> page = logSummaryService.page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
return PageResultFactory.createPageResult(page);
}
//本地主机返回出入库结果
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean processInventoryRecords(OutInLogsReq req) {
//1.判断业务类型,如果是采购,更新装备库存表
boolean a=false;
if (req.getBussinessType().equals("purchase")){
List<PurchaseEqsReq> purchaseList = req.getOrderMain().getPurchaseList();
List<Inventory> collect = purchaseList.stream().map(purchaseEqsReq -> {
Inventory inventory = new Inventory();
BeanPlusUtil.copyProperties(purchaseEqsReq, inventory);
return inventory;
}).collect(Collectors.toList());
a=inventoryService.saveBatch(collect);
}
//2.如果有单据,更新单据
boolean b=false;
boolean c=false;
if (ObjectUtil.isNotNull(req.getOrderMain())){
OrderReq orderMain = req.getOrderMain();
List<DetailOrderReq> orderDetailList = orderMain.getOrderDetail();
OrderMain one = orderMainService.getOne(new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getId, orderMain.getId()));
one.setPrice(orderMain.getPrice());
one.setActualQuantity(orderMain.getActualQuantity());
one.setOrderState(one.getOrderState());
b=orderMainService.updateById(one);
List<OrderDetail> collect = orderDetailList.stream().map(detailOrderReq -> {
OrderDetail orderDetail = new OrderDetail();
BeanPlusUtil.copyProperties(detailOrderReq, orderDetail);
//记账数量默认时识别数量
orderDetail.setModifyQuantity(detailOrderReq.getActualNum());
return orderDetail;
}).collect(Collectors.toList());
c=orderDetailService.updateBatchById(collect);
}
//3.对出入库记录进行存储
List<NormalInOutDto> inventorySumDtos = saveInOutRecords(req);
//4.如果没有单据当作日常出入库或者采购时,需要对库存汇总表进行更新
boolean d=false;
if (req.getBussinessType().equals("normal")|| req.getBussinessType().equals("purchase")){
//获取到组织机构和仓库,将出入库的装备进行分组统计,并且对inventorysummary进行更新操作
d = updateNumToSum(req.getOutInState(), inventorySumDtos, req.getOutInState());
}
return (a && b && c && d);
}
//对库存汇总表进行更新(只限于日常出入库)
public boolean updateNumToSum(String outInState,List<NormalInOutDto> inventorySumDtos,String OutInState) {
List<NormalInOutDto> groupedResult = inventorySumDtos.stream()
.collect(Collectors.groupingBy(dto -> dto.getOrgId() + "_" + dto.getLocationId() + "_" +
dto.getSizeId() + "_" + dto.getTypeId() + "_" + dto.getPrice(),
Collectors.collectingAndThen(Collectors.toList(), group -> {
NormalInOutDto result = new NormalInOutDto();
result.setOrgId(group.get(0).getOrgId());
result.setLocationId(group.get(0).getLocationId());
result.setSizeId(group.get(0).getSizeId());
result.setTypeId(group.get(0).getTypeId());
result.setPrice(group.get(0).getPrice());
result.setNumber(group.stream().mapToInt(NormalInOutDto::getNumber).sum());
return result;
})))
.values().stream()
.collect(Collectors.toList());
//将查询条件存入searchCriteria中一次性查询出满足条件的数据
List<Object[]> searchCriteria = new ArrayList<>();
for (NormalInOutDto groupedDto : groupedResult) {
Object[] criteria = new Object[]{groupedDto.getOrgId(), groupedDto.getLocationId(),
groupedDto.getTypeId(),groupedDto.getSizeId(), groupedDto.getPrice()};
searchCriteria.add(criteria);
}
//满足条件的数据
List<InventorySummary> inventorySummaryList = inventorySummaryMapper.selectSumByItems(searchCriteria);
List<InventorySummary> addList=new ArrayList<>();
List<InventorySummary> updateList=new ArrayList<>();
//遍历两者,判断数据库中是否全部存在,如果不存在,则进行增加数据操作,如果存在,则更新数据即可
for (NormalInOutDto outDto:groupedResult) {
boolean flag=false;
for (InventorySummary is:inventorySummaryList) {
if (outDto.getOrgId()==is.getOrgId() && outDto.getLocationId().equals(is.getLocationId())
&& outDto.getSizeId().equals(is.getSizeId()) && outDto.getTypeId().equals(is.getTypeId())
&& outDto.getPrice().compareTo(is.getUnitPrice())==0){
if (outInState.equals("in")){
is.setOutboundNumber(is.getOutboundNumber()-outDto.getNumber());
is.setStockNumber(is.getStockNumber()+outDto.getNumber());
is.setPrice(is.getPrice().add(BigDecimal.valueOf(outDto.getNumber()).multiply(outDto.getPrice())) );
}else {
is.setOutboundNumber(is.getOutboundNumber()+outDto.getNumber());
is.setStockNumber(is.getStockNumber()-outDto.getNumber());
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(outDto.getNumber()).multiply(outDto.getPrice())) );
}
updateList.add(is);
flag=true;
break;
}
}
if (!flag){
InventorySummary inventorySummary = new InventorySummary();
BeanPlusUtil.copyProperties(outDto,inventorySummary);
inventorySummary.setPrice(BigDecimal.valueOf(outDto.getNumber()).multiply(outDto.getPrice()));
inventorySummary.setUnitPrice(outDto.getPrice());
inventorySummary.setBrokenNumber(0);
inventorySummary.setExpireNumber(0);
inventorySummary.setDestructionNumber(0);
inventorySummary.setNearBrokenNumber(0);
inventorySummary.setCreateTime(DateTimeUtil.getCurrentDateTime());
if (outInState.equals("in")){
inventorySummary.setOutboundNumber(0);
inventorySummary.setUseNumber(0);
inventorySummary.setStockNumber(outDto.getNumber());
}
addList.add(inventorySummary);
}
}
boolean a=true;
if (addList.size()>0){
boolean b = inventorySummaryService.saveBatch(addList);
a = b;
}
if (updateList.size()>0){
boolean b = inventorySummaryService.updateBatchById(updateList);
a = a && b;
}
return a;
}
//对出入库记录进行存储
public List<NormalInOutDto> saveInOutRecords(OutInLogsReq req) {
//返回结果,用于日常出入库时计算更新库存汇总表
List<NormalInOutDto> returnList=new ArrayList<>();
List<LogDetail> logDetailList=new ArrayList<>();
List<SummaryLogReq> logSummaryList = req.getLogSummaryList();
//如果是日常出入库,那么将这些出入库数据进行计算,最终更新库存汇总表中的数据
if (req.getBussinessType().equals("normal")){
for (SummaryLogReq summaryLogReq:logSummaryList) {
LogSummary logSummary = new LogSummary();
BeanPlusUtil.copyProperties(summaryLogReq,logSummary);
logSummary.setOutInState(req.getOutInState());
logSummary.setCreateTime(DateTimeUtil.getCurrentDateTime());
logSummary.setUpdateTime(DateTimeUtil.getCurrentDateTime());
logSummary.setBussinessType(req.getBussinessType());
logSummary.setOrgId(req.getOrgId());
logSummary.setOrgName(req.getOrgName());
logSummaryService.save(logSummary);
List<DetailLogReq> logList = summaryLogReq.getLogDetailList();
//出入库list
List<LogDetail> collect=new ArrayList<>();
//用于装备汇总list
List<NormalInOutDto> list=new ArrayList<>();
for (DetailLogReq detailLogReq: logList) {
//将所有装备信息进行存放(为后面计算汇总信息)
NormalInOutDto normalInOutDto = new NormalInOutDto();
BeanPlusUtil.copyProperties(detailLogReq,normalInOutDto);
normalInOutDto.setLocationId(logSummary.getLocationId());
normalInOutDto.setLocationName(logSummary.getLocationName());
normalInOutDto.setOrgId(logSummary.getOrgId());
normalInOutDto.setOrgName(logSummary.getOrgName());
normalInOutDto.setNumber(1);
list.add(normalInOutDto);
//存放logdetail信息
LogDetail logDetail = new LogDetail();
BeanPlusUtil.copyProperties(detailLogReq, logDetail);
logDetail.setSummaryId(logSummary.getId());
collect.add(logDetail);
}
logDetailList.addAll(collect);
returnList.addAll(list);
}
logDetailService.saveBatch(logDetailList);
return returnList;
}else {
//外层的logSummary只能逐个进行插入,logDetail可以批量进行插入
for (SummaryLogReq summaryLogReq:logSummaryList) {
LogSummary logSummary = new LogSummary();
BeanPlusUtil.copyProperties(summaryLogReq,logSummary);
logSummary.setOutInState(req.getOutInState());
logSummary.setCreateTime(DateTimeUtil.getCurrentDateTime());
logSummary.setUpdateTime(DateTimeUtil.getCurrentDateTime());
logSummary.setBussinessType(req.getBussinessType());
logSummary.setOrgId(req.getOrgId());
logSummary.setOrgName(req.getOrgName());
logSummaryService.save(logSummary);
List<LogDetail> collect = summaryLogReq.getLogDetailList().stream().map(detailLogReq -> {
LogDetail logDetail = new LogDetail();
NormalInOutDto inventorySumDto = new NormalInOutDto();
BeanPlusUtil.copyProperties(detailLogReq,inventorySumDto);
BeanPlusUtil.copyProperties(detailLogReq, logDetail);
logDetail.setSummaryId(logSummary.getId());
return logDetail;
}).collect(Collectors.toList());
logDetailList.addAll(collect);
}
logDetailService.saveBatch(logDetailList);
return returnList;
}
}
}
......
......@@ -69,7 +69,6 @@ public class ManufacturerServiceImpl extends ServiceImpl<ManufacturerMapper, Man
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean delManufacturer(ManufacturerReq req) {
//抛出异常,生产厂商未选中
if (req.getDeleteList().size()==0){
......
package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.jyzb.api.bean.dto.OrderDetailDto;
import com.junmp.jyzb.api.bean.dto.OrderDto;
import com.junmp.jyzb.api.bean.dto.OrderMainDto;
import com.junmp.jyzb.api.bean.query.OrderDetailReq;
import com.junmp.jyzb.api.bean.query.OrderMainReq;
import com.junmp.jyzb.api.bean.query.OrderUploadReq;
import com.junmp.jyzb.api.bean.dto.*;
import com.junmp.jyzb.api.bean.query.*;
import com.junmp.jyzb.api.bean.query.InAndOutRecordReq.OutInLogsReq;
import com.junmp.jyzb.api.bean.req.UpdateOrderDetailReq;
import com.junmp.jyzb.api.bean.query.QueryOrderLogReq;
import com.junmp.jyzb.api.bean.req.UpdateOrderReq;
import com.junmp.jyzb.api.bean.vo.InOrderInfo;
import com.junmp.jyzb.api.exception.enums.CabinetExceptionEnum;
......@@ -31,10 +29,14 @@ import com.junmp.v2.common.util.HttpServletUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.dict.entity.SysDict;
import com.junmp.v2.dict.entity.SysDictItem;
import com.junmp.v2.dict.service.SysDictItemService;
import com.junmp.v2.dict.service.SysDictService;
import com.junmp.v2.office.api.OfficeExcelApi;
import com.junmp.v2.office.api.bean.ExcelExportParam;
import org.flowable.engine.TaskService;
import org.flowable.task.api.Task;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
......@@ -49,6 +51,7 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
......@@ -84,92 +87,46 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
private InventorySummaryService inventorySummaryService;
@Resource
private InventoryService inventoryService;
@Resource
private WarehouseService warehouseService;
@Resource
private BusFormService busFormService;
@Resource
private StocktakeService stocktakeService;
@Resource
private ReassignmentService reassignmentService;
@Resource
private PoliceEquipmentService policeEquipmentService;
@Resource
private SysDictService sysDictService;
@Resource
protected TaskService taskService;
//新增任务单
// @Transactional(rollbackFor = Exception.class)
// @Override
// public List<String> AddOrder(UpdateOrderReq req) {
// //先判断该单据是否存在,如果存在,进行更新操作即可
//
// List<String> list=new ArrayList<>();
// OrderMain order = new OrderMain();
// BeanPlusUtil.copyProperties(req, order);
// //设置单据单号
// if (ObjectUtil.isNull(order.getOrderCode())){
// OrderNum orderNum = setOrderCode(req);
// String codeValue=String.format("%04d",orderNum.getNum());
// order.setOrderCode(orderNum.getBussinessType()+orderNum.getYear()+
// String.format("%02d",LocalDateTime.now().getMonth().getValue())+String.format("%02d",LocalDateTime.now().getDayOfMonth())+codeValue);
// }
// //设置总价格和应出入库数量
// //设置id
// String id=UUID.randomUUID().toString();
// order.setId(id);
// Integer sumNum=0;
// BigDecimal priceTotal=new BigDecimal(0);
// List<OrderDetail> detailList = new ArrayList<>();
// //通过遍历批量保存详细信息
// for (UpdateOrderDetailReq listReq:req.getDetailList()) {
// OrderDetail detail=new OrderDetail();
// BeanPlusUtil.copyProperties(listReq, detail);
// detail.setOrderId(order.getId());
// //设置单据类型
// detail.setType(order.getOrderType());
// //将数量和价格进行累加
// sumNum += detail.getPlanNum();
// priceTotal = priceTotal.add(BigDecimal.valueOf(detail.getPlanNum()).multiply(detail.getPrice())) ;
// detail.setCreateTime(DateTimeUtil.getCurrentDateTime());
// detailList.add(detail);
// }
// if (ObjectUtil.isNotNull(req.getId())){
// //删除子单据
// orderDetailService.remove(new LambdaQueryWrapper<OrderDetail>()
// .eq(ObjectUtil.isNotNull(req.getId()),OrderDetail::getOrderId,req.getId()));
// }
// orderDetailService.saveBatch(detailList);
// //设置总价格和总数量
// order.setPrice(priceTotal);
// order.setInventoryQuantity(sumNum);
// order.setCreateTime(DateTimeUtil.getCurrentDateTime());
// //执行工作流
//
// if (req.getExamineState().equals("working"))
// {
// StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
// startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
// startProcessInstanceDTO.setOrderId(id);
// startProcessInstanceDTO.setOrderType("workOrder");
// startProcessInstanceDTO.setUserId(req.getUserId());
// String ProcessInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
// order.setProcessId(ProcessInstanceId);
// //保存
// this.save(order);
// }
// if (req.getExamineState().equals("none")){//如果是草稿
// if(ObjectUtil.isNotNull(req.getId())){
// //已经是一个草稿,在点击提交的时候只需要更新即可,因为数据库中已经存在该单据
// updateById(order);
// }else {
// //保存
// this.save(order);
// }
// }
// list.add(order.getId());
// for (OrderDetail orderDetail:detailList) {
// list.add(Long.toString(orderDetail.getId()));
// }
// return list;
// }
@Transactional(rollbackFor = Exception.class)
@Override
public List<String> AddOrder(UpdateOrderReq req) {
//判断是否有工作流id,如果有则将状态进行修改
if (ObjectUtil.isEmpty(req.getProcessDefinitionId())) {
req.setExamineState("none");
} else {
req.setExamineState("working");
}
//判断该单据是否可以进行修改(如果审核中则不允许修改)
if (req.getExamineState().equals("working")){
throw new ServiceException(OrderExceptionEnum.ORDER_CAN_NOT_UPDATE);
}
OrderMain order = new OrderMain();
BeanPlusUtil.copyProperties(req, order);
//先判断该单据id是否存在,如果存在,进行更新操作即可
if (ObjectUtil.isNotNull(req.getId())){
if (ObjectUtil.isNotNull(req.getId()) && ! req.getId().trim().isEmpty()){
//删除子单据
orderDetailService.remove(new LambdaQueryWrapper<OrderDetail>()
.eq(ObjectUtil.isNotNull(req.getId()),OrderDetail::getOrderId,req.getId()));
......@@ -207,25 +164,47 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
order.setInventoryQuantity(sumNum);
order.setCreateTime(DateTimeUtil.getCurrentDateTime());
//执行工作流
if (req.getExamineState().equals("working"))
String processInstanceId = null;
StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
//业务单走审核流
startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
startProcessInstanceDTO.setOrderId(order.getId());
startProcessInstanceDTO.setUserId(req.getUserId());
if (!req.getBussinessType().equals("quick") && req.getExamineState().equals("working"))//其他出入库单
{
StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
startProcessInstanceDTO.setOrderId(order.getId());
startProcessInstanceDTO.setOrderType("workOrder");
startProcessInstanceDTO.setUserId(req.getUserId());
String ProcessInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
order.setProcessId(ProcessInstanceId);
processInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
}else if (req.getBussinessType().equals("quick") && req.getExamineState().equals("working")){//快速移库单
startProcessInstanceDTO.setOrderType("quickOrder");
processInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
}
if (ObjectUtil.isNotNull(req.getId())){
updateById(order);
}else {
//保存
this.save(order);
}
//list返回数据
List<String> list=new ArrayList<>();
//当前审核是否跳过
if (processInstanceId!=null && processInstanceId.substring(0,4).equals("skip") ){
String substring = processInstanceId.substring(4);
order.setProcessId(substring);
if (ObjectUtil.isNotNull(req.getId()) && !req.getId().trim().isEmpty()) {
updateById(order);
} else {
//保存
this.save(order);
}
Task currentTask = taskService.createTaskQuery().processInstanceId(substring).singleResult();
// 直接完成当前任务
taskService.complete(currentTask.getId());
}else {
order.setProcessId(processInstanceId);
if (ObjectUtil.isNotNull(req.getId()) && !req.getId().trim().isEmpty()) {
updateById(order);
} else {
//保存
this.save(order);
}
}
list.add(order.getId());
for (OrderDetail orderDetail:detailList) {
list.add(Long.toString(orderDetail.getId()));
......@@ -241,8 +220,11 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
//获取年,月,日,获取业务出入状态,获取组织机构id,获取业务类型
orderNum.setYear(LocalDateTime.now().getYear());
//将业务类型转为中文简写(CK出库,RK入库)
String itemValue = sysDictItemService.list(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getItemText, req.getOrderType())).get(0).getItemValue();
Long sysDictId = sysDictService.getOne(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getDictCode, "order_chinese_setting")).getDictId();
String itemValue = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getItemText, req.getOrderType())
.eq(SysDictItem::getDictId,sysDictId)).getItemValue();
orderNum.setBussinessType(itemValue);
//出入业务状态
orderNum.setOutInType(req.getOrderType());
......@@ -278,18 +260,29 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
}
//新增默认审核通过的任务单
//新增默认审核通过的任务单(可以没有工作流)
@Transactional(rollbackFor = Exception.class)
@Override
public String AddFinishOrder(UpdateOrderReq req) {
//添加到数据库中
List<String> strings = AddOrder(req);
req.setId(strings.get(0));
List<UpdateOrderDetailReq> detailList = req.getDetailList();
//将子单据id传递
for (int i=1;i<strings.size();i++){
detailList.get(i-1).setId(Long.parseLong(strings.get(i)));
//添加到数据库中(如果该单据没有审批流,那么就直接存入数据库)
if (ObjectUtil.isNull(req.getProcessDefinitionId()) && ObjectUtil.isNull(req.getProcessId())){
List<String> strings = AddOrder(req);
OrderMain orderMain = getById(strings.get(0));
List<OrderDetail> list = orderDetailService.list(new LambdaQueryWrapper<OrderDetail>()
.eq(OrderDetail::getOrderId, strings.get(0)));
BeanPlusUtil.copyProperties(orderMain,req);
req.setExamineState("finished");
orderMain.setExamineState("finished");
updateById(orderMain);
List<UpdateOrderDetailReq> collect = list.stream().map(orderDetail -> {
UpdateOrderDetailReq orderDetailReq = new UpdateOrderDetailReq();
BeanPlusUtil.copyProperties(orderDetail, orderDetailReq);
return orderDetailReq;
}).collect(Collectors.toList());
req.setDetailList(collect);
}
//将完成的任务单直接推送到消息队列rabbitmq中(需要判断是入库单还是出库单,入库单传发物单位id,出库单传收物单位id)
//方法1:一个交换机,一个队列。通过中间对象,object存储对象,type表标识
......@@ -316,43 +309,45 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(req.getStartOrgId().toString()).noargs());
rabbitTemplate.convertAndSend(exchangeName, req.getStartOrgId().toString(), req);
}
return strings.get(0);
return req.getId();
}
//更新任务单(进入工作流中之后不能进行更改)
@Transactional(rollbackFor = Exception.class)
@Override
public Boolean updateOrder(UpdateOrderReq req) {
OrderMain order = orderMainExist(req.getId());
if (!order.getExamineState().equals("none"))
{
throw new ServiceException(OrderExceptionEnum.ORDER_CAN_NOT_UPDATE);
}
//(直接删除并重新插入数据)----------------------------------------------
orderDetailService.remove(new LambdaQueryWrapper<OrderDetail>().eq(OrderDetail::getOrderId, req.getId()));
Integer sumNum=0;
BigDecimal priceTotal=new BigDecimal(0);
List<OrderDetail> detailList = new ArrayList<>();
for (UpdateOrderDetailReq listReq:req.getDetailList()) {
OrderDetail detail=new OrderDetail();
BeanPlusUtil.copyProperties(listReq, detail);
detail.setOrderId(order.getId());
//设置单据类型
detail.setType(order.getOrderType());
//将数量和价格进行累加
sumNum += detail.getPlanNum();
priceTotal = priceTotal.add(BigDecimal.valueOf(detail.getPlanNum()).multiply(detail.getPrice())) ;
detail.setCreateTime(DateTimeUtil.getCurrentDateTime());
detailList.add(detail);
}
orderDetailService.saveBatch(detailList);
//设置总价格和总数量
order.setPrice(priceTotal);
order.setInventoryQuantity(sumNum);
order.setCreateTime(DateTimeUtil.getCurrentDateTime());
return this.updateById(order);
}
// @Transactional(rollbackFor = Exception.class)
// @Override
// public Boolean updateOrder(UpdateOrderReq req) {
// OrderMain order = orderMainExist(req.getId());
// if (!order.getExamineState().equals("none"))
// {
// throw new ServiceException(OrderExceptionEnum.ORDER_CAN_NOT_UPDATE);
// }
// //(直接删除并重新插入数据)----------------------------------------------
// orderDetailService.remove(new LambdaQueryWrapper<OrderDetail>().eq(OrderDetail::getOrderId, req.getId()));
// Integer sumNum=0;
// BigDecimal priceTotal=new BigDecimal(0);
// List<OrderDetail> detailList = new ArrayList<>();
// for (UpdateOrderDetailReq listReq:req.getDetailList()) {
// OrderDetail detail=new OrderDetail();
// BeanPlusUtil.copyProperties(listReq, detail);
// detail.setOrderId(order.getId());
// //设置单据类型
// detail.setType(order.getOrderType());
// //将数量和价格进行累加
// sumNum += detail.getPlanNum();
// priceTotal = priceTotal.add(BigDecimal.valueOf(detail.getPlanNum()).multiply(detail.getPrice())) ;
// detail.setCreateTime(DateTimeUtil.getCurrentDateTime());
// detailList.add(detail);
// }
// orderDetailService.saveBatch(detailList);
// //设置总价格和总数量
// order.setPrice(priceTotal);
// order.setInventoryQuantity(sumNum);
// order.setCreateTime(DateTimeUtil.getCurrentDateTime());
// return this.updateById(order);
// }
//
//更新任务单(进入工作流中之后不能进行更改)
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -430,14 +425,14 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
for (OrderDetail orderDetail:list) {
OrderDetailDto orderDetailDto = new OrderDetailDto();
BeanPlusUtil.copyProperties(orderDetail,orderDetailDto);
if (orderMain.getOrderType().equals("out")){
InventorySummary one = inventorySummaryService.getOne(new LambdaQueryWrapper<InventorySummary>()
.eq(InventorySummary::getLocationId, orderDetail.getWarehouseId())
.eq(InventorySummary::getSizeId, orderDetail.getSizeId())
.eq(InventorySummary::getTypeId, orderDetail.getTypeId())
.eq(InventorySummary::getUnitPrice, orderDetail.getPrice()));
orderDetailDto.setStockNumber(one.getStockNumber());
}
// if (orderMain.getOrderType().equals("out")){
// InventorySummary one = inventorySummaryService.getOne(new LambdaQueryWrapper<InventorySummary>()
// .eq(InventorySummary::getLocationId, orderDetail.getWarehouseId())
// .eq(InventorySummary::getSizeId, orderDetail.getSizeId())
// .eq(InventorySummary::getTypeId, orderDetail.getTypeId())
// .eq(InventorySummary::getUnitPrice, orderDetail.getPrice()));
// orderDetailDto.setStockNumber(one.getStockNumber());
// }
orderDetailDtoList.add(orderDetailDto);
}
orderDto.setDetailList(orderDetailDtoList);
......@@ -473,7 +468,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
return true;
}
//记账
//(只对summary表进行操作)
@Transactional(rollbackFor = Exception.class)
@Override
public boolean Accounting(UpdateOrderReq req) {
......@@ -496,23 +491,28 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
Set<Long> collect = req.getDetailList().stream().map(UpdateOrderDetailReq::getId).collect(Collectors.toSet());
//获取所有数据库的子单据id
Set<Long> existingIds = list.stream().map(OrderDetail::getId).collect(Collectors.toSet());
//创建一个操作记录
StringBuilder stringBuilder = new StringBuilder();
//创建一个操作记录(用于在记账log表中记录)
// StringBuilder stringBuilder = new StringBuilder();
//存放更新数据库中的子单据
List<OrderDetail> orderDetailList=new ArrayList<>();
//创建一个列表用于修改summary数据库表中数据。
List<UpdateOrderDetailReq> orderDetailReqList=new ArrayList<>();
List<AccountingDto> accountingDtoList=new ArrayList<>();
//比较两个子单id完全一致,判断传递的子单据id在数据库中是否存在,如果不存在则抛出子单据不存在异常
if (collect.size() == existingIds.size() && collect.containsAll(existingIds) && existingIds.containsAll(collect)){
for (UpdateOrderDetailReq uploadDetailReq : reqList) {
OrderDetail orderDetail = new OrderDetail();
BeanPlusUtil.copyProperties(uploadDetailReq,orderDetail);
//获取修改后的数量并且记录(如果modifyQuantity不为空并且于实际入库数量不一致则表示该子单据进行了修改)
if (ObjectUtil.isNotNull(uploadDetailReq.getModifyQuantity()) && uploadDetailReq.getModifyQuantity() != uploadDetailReq.getActualNum()){
String log = "将"+uploadDetailReq.getTypeName()+":"+
uploadDetailReq.getSizeName()+"的物资数量从"+uploadDetailReq.getActualNum()+"修改为"+uploadDetailReq.getModifyQuantity()+";";
stringBuilder.append(log);
//获取修改后的数量并且记录(modifyQuantity表示有记账数量)
if (uploadDetailReq.getModifyQuantity() >= 0 ){
// String log = "将"+uploadDetailReq.getTypeName()+"号型为"+
// uploadDetailReq.getSizeName()+"单价为"+uploadDetailReq.getPrice()+"的物资数量记为"+uploadDetailReq.getModifyQuantity()+";";
// stringBuilder.append(log);
AccountingDto accountingDto = new AccountingDto();
BeanPlusUtil.copyProperties(uploadDetailReq,accountingDto);
accountingDtoList.add(accountingDto);
//修改单子数量数据,价格
orderDetail.setActualNum(uploadDetailReq.getModifyQuantity());
orderDetail.setModifyQuantity(uploadDetailReq.getModifyQuantity());
orderDetail.setUpdateTime(DateTimeUtil.getCurrentDateTime());
orderDetailList.add(orderDetail);
orderDetailReqList.add(uploadDetailReq);
......@@ -520,23 +520,29 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
updateQuantity+=uploadDetailReq.getModifyQuantity();
priceTotal=priceTotal.add(BigDecimal.valueOf(uploadDetailReq.getModifyQuantity()).multiply(uploadDetailReq.getPrice()));
}else {
//修改后数量
updateQuantity+=uploadDetailReq.getActualNum();
priceTotal=priceTotal.add(BigDecimal.valueOf(uploadDetailReq.getActualNum()).multiply(uploadDetailReq.getPrice()));
throw new ServiceException(OrderExceptionEnum.ORDERDETAIL_ERROR);
}
}
}else {
throw new ServiceException(OrderExceptionEnum.ORDERDETAIL_ERROR);
}
//批量更新子单据数量
boolean a=false;
if (orderDetailList.size()!=0){
orderDetailService.updateBatchById(orderDetailList);
a = orderDetailService.updateBatchById(orderDetailList);
}
//更新主单据的数量和价格
orderMain.setActualQuantity(updateQuantity);
orderMain.setPrice(priceTotal);
orderMain.setOrderState("finished");
//修改记账状态,0未记账,1已记账
orderMain.setManualState(1);
orderMain.setUpdateTime(DateTimeUtil.getCurrentDateTime());
boolean b = updateById(orderMain);
//将修改内容存储记录(历史操作,数量,单据,价格,组织机构)
//创建记账操作记录并且记录到数据表order_log中
saveAccountingLog(req,stringBuilder,updateQuantity);
// boolean b = saveAccountingLog(req, stringBuilder, updateQuantity);
boolean c = saveAccountingLog(req, accountingDtoList, updateQuantity);
//修改装备汇总表中的数据 inventory_summary
Long orgId;
......@@ -546,99 +552,133 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
else {
orgId=orderMain.getStartOrgId();
}
updateSummaryInfo(req,orderDetailReqList,orgId);
boolean d = updateSummaryInfo(req, orderDetailReqList, orgId);
//修改仓库表中的数量汇总信息(warehouse)
// updateWarehouseInfo(req,orderDetailReqList,orgId);
//如果是领用,警员绑定装备
boolean e=true;
if (req.getBussinessType().equals("use")){
//更新主单据的数量和价格
orderMain.setActualQuantity(updateQuantity);
orderMain.setPrice(priceTotal);
orderMain.setOrderState("finished");
//修改记账状态,0未记账,1已记账
// orderMain.setManualState(1);
orderMain.setUpdateTime(DateTimeUtil.getCurrentDateTime());
e = policeBindEqs(req, reqList, orgId);
}
//如果是快速移库,记账完成之后新增入库单并且该单据不走审核流,但是审核状态和入库状态显示已完成
boolean f=true;
if (req.getBussinessType().equals("quick")){
f = addQuickOrder(orderMain);
}
//更新主单据
return (a && b && c && d && e && f );
}
public boolean policeBindEqs(UpdateOrderReq req,List<UpdateOrderDetailReq> reqList,Long orgId){
//如果是领用出库,那记账结束以后将装备挂到警员名下(存储到policemanEquipment表中)
//更新主单据
return updateById(orderMain);
if (req.getBussinessType().equals("use")){
List<PoliceEquipment> collect1 = reqList.stream().map(updateOrderDetailReq -> {
PoliceEquipment policeEquipment = new PoliceEquipment();
policeEquipment.setPoliceId(req.getReturnUserId());
policeEquipment.setSizeId(updateOrderDetailReq.getSizeId());
policeEquipment.setSizeName(updateOrderDetailReq.getSizeName());
policeEquipment.setTypeId(updateOrderDetailReq.getTypeId());
policeEquipment.setTypeName(updateOrderDetailReq.getTypeName());
policeEquipment.setNum(updateOrderDetailReq.getModifyQuantity());
policeEquipment.setOrgId(orgId);
policeEquipment.setCreateTime(DateTimeUtil.getCurrentDateTime());
return policeEquipment;
}).collect(Collectors.toList());
return policeEquipmentService.saveBatch(collect1);
}else {
return true;
}
}
//将修改内容存储记录(历史操作,数量,单据,价格,组织机构)
//创建记账操作记录并且记录到数据表order_log中
public void saveAccountingLog (UpdateOrderReq req,StringBuilder stringBuilder,Integer updateQuantity){
public boolean saveAccountingLog (UpdateOrderReq req,List<AccountingDto> accountingDtoList,Integer updateQuantity){
OrderLog orderLog = new OrderLog();
BeanPlusUtil.copyProperties(req,orderLog);
orderLog.setId(UUID.randomUUID().toString());
orderLog.setHistoryMsg(stringBuilder.toString());
// orderLog.setHistoryMsg(stringBuilder.toString());
orderLog.setHistoryMsg(JSON.toJSONString(accountingDtoList));
orderLog.setUpdateQuantity(updateQuantity);
if (req.getOrderType().equals("in")){
orderLog.setOrgId(req.getEndOrgId());
orderLog.setOrgName(req.getEndOrgName());
}else {
orderLog.setOrgId(req.getStartOrgId());
orderLog.setOrgId(Long.parseLong(req.getStartOrgId()));
orderLog.setOrgName(req.getStartOrgName());
}
orderLog.setOrderId(req.getId());
orderLog.setCreateTime(DateTimeUtil.getCurrentDateTime());
//将记账记录保存
orderLogService.save(orderLog);
return orderLogService.save(orderLog);
}
//修改装备汇总表中的数据inventory_summary
public void updateSummaryInfo(UpdateOrderReq req,List<UpdateOrderDetailReq> orderDetailReqList,Long orgId){
//根据遍历该子单据,将summary中的对应数据进行修改
List<InventorySummary> collect = orderDetailReqList.stream()
.map(orderDetailReq -> {
InventorySummary one = inventorySummaryService.getOne(new LambdaQueryWrapper<InventorySummary>()
.eq(InventorySummary::getOrgId, orgId)
.eq(InventorySummary::getSizeId, orderDetailReq.getSizeId())
.eq(InventorySummary::getTypeId, orderDetailReq.getTypeId())
.eq(InventorySummary::getLocationId, orderDetailReq.getWarehouseId())
.eq(InventorySummary::getPrice, orderDetailReq.getPrice()));
//如果one为空,则添加一条数据?????存疑
//更新数量和总价格,在库数和出库数也需要对应进行修改
//修改的数量和价格
BigDecimal totalPrice = one.getPrice().subtract(BigDecimal.valueOf(orderDetailReq.getActualNum()).multiply(orderDetailReq.getPrice()))
.add(BigDecimal.valueOf(orderDetailReq.getModifyQuantity()).multiply(orderDetailReq.getPrice()));
Integer totalNUmber = one.getNumber()-orderDetailReq.getActualNum()+orderDetailReq.getModifyQuantity();
one.setPrice(totalPrice);
one.setNumber(totalNUmber);
//判断单据是in还是out,对出库数量和在库数量进行修改
if (req.getOrderType().equals("in")){
one.setStockNumber(one.getStockNumber()-orderDetailReq.getActualNum()+orderDetailReq.getModifyQuantity());
}else {
one.setOutboundNumber(one.getOutboundNumber()-orderDetailReq.getActualNum()+orderDetailReq.getModifyQuantity());
public boolean updateSummaryInfo(UpdateOrderReq req,List<UpdateOrderDetailReq> orderDetailReqList,Long orgId){
//将库存summary表中数据进行查询出来一一进行比较,如果说sizeId,typeId,warehouseId相同则对该数据进行修改,如果说该数据不存在的话则在summary表中添加一条数据
List<Object[]> searchCriteria=new ArrayList<>();
for (UpdateOrderDetailReq upReq: orderDetailReqList) {
Object[] criteria=new Object[]{orgId,upReq.getWarehouseId(),upReq.getTypeId(),upReq.getSizeId(),upReq.getPrice()};
searchCriteria.add(criteria);
}
List<InventorySummary> inventorySummaryList = inventorySummaryService.selectSumByItems(searchCriteria);
List<InventorySummary> addList=new ArrayList<>();
List<InventorySummary> updateList=new ArrayList<>();
for (UpdateOrderDetailReq upReq: orderDetailReqList) {
boolean flag=false;
for (InventorySummary is:inventorySummaryList) {
if (upReq.getWarehouseId().equals(is.getLocationId()) && upReq.getSizeId().equals(is.getSizeId())
&& upReq.getTypeId().equals(is.getTypeId()) && upReq.getPrice().compareTo(is.getUnitPrice())==0){
//修改各种数量和价格
if (req.getOrderType().equals("in")){//入库没有关系
is.setOutboundNumber(is.getOutboundNumber()-upReq.getModifyQuantity());
is.setStockNumber(is.getStockNumber()+upReq.getModifyQuantity());
is.setPrice(is.getPrice().add(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
}else if (req.getOrderType().equals("out") && req.getBussinessType().equals("destruction")){//销毁出库直接减库存,减金额
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())));
is.setNumber(is.getNumber()-upReq.getModifyQuantity());
is.setDestructionNumber(is.getDestructionNumber()+upReq.getModifyQuantity());
}else {//其他出库就直接正常计算
is.setOutboundNumber(is.getOutboundNumber()+upReq.getModifyQuantity());
is.setStockNumber(is.getStockNumber()-upReq.getModifyQuantity());
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
}
return one;
})
.collect(Collectors.toList());
inventorySummaryService.updateBatchById(collect);
}
//修改仓库表中的数量汇总信息
public void updateWarehouseInfo(UpdateOrderReq req,List<UpdateOrderDetailReq> orderDetailReqList,Long orgId){
for (UpdateOrderDetailReq orderDetailReq:orderDetailReqList) {
Warehouse one = warehouseService.getOne(new LambdaQueryWrapper<Warehouse>()
.eq(Warehouse::getOrgId, orgId)
.eq(Warehouse::getId, orderDetailReq.getWarehouseId()));
//修改总数量和总价格,并且判断单据类型来修改出库数量或者在库数量
Integer totalNUmber = one.getSum()-orderDetailReq.getActualNum()+orderDetailReq.getModifyQuantity();
BigDecimal totalPrice = one.getPriceTotal().subtract(BigDecimal.valueOf(orderDetailReq.getActualNum()).multiply(orderDetailReq.getPrice()))
.add(BigDecimal.valueOf(orderDetailReq.getModifyQuantity()).multiply(orderDetailReq.getPrice()));
one.setPriceTotal(totalPrice);
one.setSum(totalNUmber);
//判断单据是in还是out,对出库数量和在库数量进行修改
if (req.getOrderType().equals("in")){
one.setInSum(one.getInSum()-orderDetailReq.getActualNum()+orderDetailReq.getModifyQuantity());
}else {
one.setOutSum(one.getOutSum()-orderDetailReq.getActualNum()+orderDetailReq.getModifyQuantity());
updateList.add(is);
flag=true;
break;
}
}
warehouseService.updateById(one);
//表示库存中没有,那么插入数据
if (!flag){
InventorySummary inventorySummary = new InventorySummary();
inventorySummary.setUnitPrice(upReq.getPrice());
inventorySummary.setPrice(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice()));
inventorySummary.setBrokenNumber(0);
inventorySummary.setExpireNumber(0);
inventorySummary.setDestructionNumber(0);
inventorySummary.setNearBrokenNumber(0);
inventorySummary.setCreateTime(DateTimeUtil.getCurrentDateTime());
if (req.getOrderType().equals("in")){
inventorySummary.setOutboundNumber(0);
inventorySummary.setUseNumber(0);
inventorySummary.setStockNumber(upReq.getModifyQuantity());
}
addList.add(inventorySummary);
}
}
boolean a=true;
if (addList.size()>0){
boolean b = inventorySummaryService.saveBatch(addList);
a = b;
}
if (updateList.size()>0){
boolean b = inventorySummaryService.updateBatchById(updateList);
a = a && b;
}
return a;
}
/**
* 查看记账列表
* @param req
......@@ -649,7 +689,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
LambdaQueryWrapper<OrderLog> eq = new LambdaQueryWrapper<OrderLog>()
.eq(ObjectUtil.isNotNull(req.getBussinessType()), OrderLog::getBussinessType, req.getBussinessType())
.eq(ObjectUtil.isNotNull(req.getOrderType()), OrderLog::getOrderType, req.getOrderType())
// .eq(ObjectUtil.isNotNull(req.getOrderId()), OrderLog::getOrgId, req.getOrgId())
.eq(ObjectUtil.isNotNull(req.getOrderId()), OrderLog::getOrgId, req.getOrgId())
.ge(ObjectUtil.isNotNull(req.getStartTime()), OrderLog::getCreateTime, req.getStartTime())
.le(ObjectUtil.isNotNull(req.getEndTime()), OrderLog::getCreateTime, req.getEndTime());
Page<OrderLog> page = orderLogService.page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
......@@ -771,5 +811,265 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
}
/**
* 根据流程id和单据类型查询出该单子据的信息
* @param req
* @return
*/
@Override
public ProcessOrderDto GetByProcessId(OrderMainReq req) {
ProcessOrderDto processOrderDto = new ProcessOrderDto();
System.out.println("req = " + req.getOrderType());
if (req.getOrderType().equals("null")|| ObjectUtil.isNull(req.getOrderType())) {
return processOrderDto;
}
if (req.getOrderType().equals("workOrder")){
OrderDto orderDto = new OrderDto();
OrderMain one = getOne(new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getProcessId, req.getProcessInstanceId()));
if (ObjectUtil.isNull(one)){
return processOrderDto;
}
BeanPlusUtil.copyProperties(one,orderDto);
List<OrderDetailDto> collect = orderDetailService.list(new LambdaQueryWrapper<OrderDetail>()
.eq(OrderDetail::getOrderId, one.getId())).stream().map(orderDetail -> {
OrderDetailDto orderDetailDto = new OrderDetailDto();
BeanPlusUtil.copyProperties(orderDetail, orderDetailDto);
return orderDetailDto;
}).collect(Collectors.toList());
orderDto.setDetailList(collect);
processOrderDto.setOrderDto(orderDto);
} else if (req.getOrderType().equals("bussinessOrder")) {
BusFormDto busFormDto = new BusFormDto();
BusForm one = busFormService.getOne(new LambdaQueryWrapper<BusForm>()
.eq(BusForm::getProcessId, req.getProcessInstanceId()));
BeanPlusUtil.copyProperties(one,busFormDto);
processOrderDto.setBusFormDto(busFormDto);
} else if (req.getOrderType().equals("stacktakeOrder")) {
StocktakeDto stocktakeDto = new StocktakeDto();
Stocktake one = stocktakeService.getOne(new LambdaQueryWrapper<Stocktake>()
.eq(Stocktake::getProcessId, req.getProcessInstanceId()));
BeanPlusUtil.copyProperties(one,stocktakeDto);
processOrderDto.setStocktakeDto(stocktakeDto);
} else if (req.getOrderType().equals("reassigment")) {
ReassignmentDto reassignmentDto = new ReassignmentDto();
Reassignment one = reassignmentService.getOne(new LambdaQueryWrapper<Reassignment>()
.eq(Reassignment::getProcessId, req.getProcessInstanceId()));
BeanPlusUtil.copyProperties(one,reassignmentDto);
processOrderDto.setReassignmentDto(reassignmentDto);
}
return processOrderDto;
}
public boolean addQuickOrder(OrderMain existOrder) {
//创建新的orderMain入库单
OrderMain orderMain = new OrderMain();
BeanPlusUtil.copyProperties(existOrder,orderMain);
orderMain.setEndOrgId(existOrder.getStartOrgId());
orderMain.setEndOrgName(existOrder.getStartOrgName());
orderMain.setOrderType("in");
orderMain.setId(UUID.randomUUID().toString());
//工作流流程设为空
orderMain.setProcessId(null);
//修改订单编号,设置为入库的单号
UpdateOrderReq req = new UpdateOrderReq();
BeanPlusUtil.copyProperties(orderMain,req);
OrderNum orderNum = setOrderCode(req);
String codeValue=String.format("%04d",orderNum.getNum());
orderMain.setOrderCode(orderNum.getBussinessType()+orderNum.getYear()+
String.format("%02d",LocalDateTime.now().getMonth().getValue())+
String.format("%02d",LocalDateTime.now().getDayOfMonth())+codeValue);
//保存入库单
save(orderMain);
//查询出库子单用于赋值到入库单中
List<OrderDetail> list = orderDetailService.list(new LambdaQueryWrapper<OrderDetail>()
.eq(OrderDetail::getOrderId, existOrder.getId()));
//查询条件,将所有查询条件放在searchCriteria中,用于修改库存表中的装备的仓库位置
//原来出库单的查询条件list(根据条件查询库存汇总表中包含有相同条件的数据)
List<Object[]> searchCriteria=new ArrayList<>();
//新建的入库单查询条件list(根据条件查询库存汇总表中是否包含有相同条件的数据)
List<Object[]> updateCriteria=new ArrayList<>();
//仓库id
String locationId = orderMain.getLocationId();
String locationName = orderMain.getLocationName();
//创建入库单子单
List<OrderDetail> collect = list.stream().map(orderDetail -> {
OrderDetail orderDetail1 = new OrderDetail();
BeanPlusUtil.copyProperties(orderDetail, orderDetail1);
//修改主单据id
orderDetail1.setOrderId(orderMain.getId());
//修改单据出入状态
orderDetail1.setType("in");
//修改仓库id
orderDetail1.setWarehouseId(locationId);
orderDetail1.setWarehouseName(locationName);
Object[] criteria=new Object[]{existOrder.getStartOrgId(),orderDetail.getWarehouseId(),orderDetail.getTypeId(),orderDetail.getSizeId(),orderDetail.getPrice()};
searchCriteria.add(criteria);
Object[] update=new Object[]{orderMain.getEndOrgId(),locationId,orderDetail1.getTypeId(),orderDetail1.getSizeId(),orderDetail1.getPrice()};
updateCriteria.add(update);
return orderDetail1;
}).collect(Collectors.toList());
orderDetailService.saveBatch(collect);
//将summary汇总表中数据进行修改(修改该组织机构下的装备汇总信息将库存信息的在库数,库存总数,总价还有其他数据数量进行修改)
//那么首先将原来的仓库下的装备汇总信息进行查询出来,对其进行修改
List<InventorySummary> oldSummaryList = inventorySummaryService.selectSumByItems(searchCriteria);
//其次查询出修改后的仓库下面的汇总信息,判断该仓库下是否已经存在该号型、类型、单价相同的装备数据
List<InventorySummary> newSummaryList = inventorySummaryService.selectSumByItems(updateCriteria);
//第一步:判断是否将报废区的数据也同样进行移库(flag=true表示将报废区的数量进行一起移动)
boolean flag = oldSummaryList.stream()
.filter(oldsum -> oldsum.getBrokenNumber() > 0)
.anyMatch(oldsum -> list.stream()
.anyMatch(orderDetail -> orderDetail.getSizeId().equals(oldsum.getSizeId())
&& orderDetail.getTypeId().equals(oldsum.getTypeId())
&& orderDetail.getPrice().compareTo(oldsum.getUnitPrice()) == 0
&& oldsum.getBrokenNumber() + orderDetail.getPlanNum() == oldsum.getStockNumber())
);
//创建删除列表用于将没用的数据汇总信息进行删除
List<InventorySummary> deleteList=new ArrayList<>();
//将修改的信息直接保存(需要的只是各种数量方便计算)
List<InventorySummary> saveList=new ArrayList<>();
//如果整个报废区进行移动,那么将各个数量进行修改
if (flag){
for (OrderDetail orderDetail: list ) {
for (InventorySummary oldSum : oldSummaryList) {
//如果组织机构、仓库id、sizeId、typeId、unitPrice相同,那么修改其各项数值(不会存在两个列表长度不对等的情况,一定是一对一的,只不过是顺序问题,所以需要进行遍历)
if (orderDetail.getSizeId().equals(oldSum.getSizeId())
&& orderDetail.getTypeId().equals(oldSum.getTypeId())
&& orderDetail.getPrice().compareTo(oldSum.getUnitPrice()) == 0) {
InventorySummary inventorySummary = new InventorySummary();
BeanPlusUtil.copyProperties(oldSum,inventorySummary);
inventorySummary.setLocationId(locationId);
inventorySummary.setLocationName(locationName);
inventorySummary.setNumber(orderDetail.getPlanNum()+oldSum.getOutboundNumber());
inventorySummary.setPrice(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getPlanNum())));
inventorySummary.setStockNumber(orderDetail.getPlanNum());
inventorySummary.setDestructionNumber(0);
//销毁金额也为0
inventorySummary.setDestructionPrice(BigDecimal.ZERO);
saveList.add(inventorySummary);
//如果存在删减数量完成之后所有的数量值都是0的情况,那么将这一条数据进行删除操作
if (oldSum.getDestructionNumber() == 0) {
deleteList.add(oldSum);
}else {
oldSum.setBrokenNumber(0);
oldSum.setNumber(0);
oldSum.setPrice(BigDecimal.ZERO);
oldSum.setStockNumber(0);
oldSum.setOutboundNumber(0);
oldSum.setUseNumber(0);
oldSum.setExpireNumber(0);
oldSum.setNearBrokenNumber(0);
}
break;//查询到直接跳过该循环进入下一循环
}
}
}
}else {
for (OrderDetail orderDetail: list ) {
for (InventorySummary oldSum : oldSummaryList) {
//如果组织机构、仓库id、sizeId、typeId、unitPrice相同,那么修改其各项数值(不会存在两个列表长度不对等的情况,一定是一对一的,只不过是顺序问题,所以需要进行遍历)
if (orderDetail.getSizeId().equals(oldSum.getSizeId())
&& orderDetail.getTypeId().equals(oldSum.getTypeId())
&& orderDetail.getPrice().compareTo(oldSum.getUnitPrice()) == 0) {
InventorySummary inventorySummary = new InventorySummary();
BeanPlusUtil.copyProperties(oldSum,inventorySummary);
inventorySummary.setLocationId(locationId);
inventorySummary.setLocationName(locationName);
//在库数量进行修改并且报废数设为0
inventorySummary.setBrokenNumber(0);
inventorySummary.setNumber(orderDetail.getPlanNum()+oldSum.getOutboundNumber());
inventorySummary.setPrice(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getPlanNum()+oldSum.getOutboundNumber())));
inventorySummary.setStockNumber(orderDetail.getPlanNum());
inventorySummary.setDestructionNumber(0);
inventorySummary.setDestructionPrice(BigDecimal.ZERO);
saveList.add(inventorySummary);
oldSum.setNumber(oldSum.getNumber()-orderDetail.getPlanNum());
oldSum.setPrice(oldSum.getPrice().subtract(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getPlanNum()))));
oldSum.setOutboundNumber(0);
oldSum.setStockNumber(oldSum.getNumber()-orderDetail.getPlanNum());
oldSum.setNearBrokenNumber(0);
oldSum.setExpireNumber(0);
oldSum.setUseNumber(0);
//如果存在删减数量完成之后所有的数量值都是0的情况,那么将这一条数据进行删除操作
if (oldSum.getBrokenNumber()==0&& oldSum.getDestructionNumber() == 0) {
deleteList.add(oldSum);
}
break;//查询到直接跳过该循环进入下一循环
}
}
}
}
//判断查询到的newList是否有值,如果有值直接进行修改即可,但是如果不存在,则默认新增一条数据
if (newSummaryList.size()>0){
for (InventorySummary save: saveList) {
for (InventorySummary newsum:newSummaryList) {
if (save.getSizeId().equals(newsum.getSizeId())
&& save.getTypeId().equals(newsum.getTypeId())
&& save.getPrice().compareTo(newsum.getUnitPrice()) == 0){
newsum.setBrokenNumber(save.getBrokenNumber()+newsum.getBrokenNumber());
newsum.setNumber(save.getNumber()+newsum.getNumber());
newsum.setStockNumber(save.getStockNumber()+newsum.getStockNumber());
newsum.setPrice(newsum.getPrice().multiply(BigDecimal.valueOf(newsum.getStockNumber())));
newsum.setOutboundNumber(save.getOutboundNumber()+newsum.getOutboundNumber());
newsum.setExpireNumber(save.getExpireNumber()+newsum.getExpireNumber());
newsum.setNearBrokenNumber(save.getNearBrokenNumber()+newsum.getNearBrokenNumber());
newsum.setUseNumber(save.getUseNumber()+newsum.getUseNumber());
saveList.remove(save);
break;
}
}
}
}
//如果saveList不为空则save
boolean a=true;
if(saveList.size()>0){
a=inventorySummaryService.saveBatch(saveList);
}
//如果删除list不为空,那么进行批量删除
boolean b=true;
if (deleteList.size()>0){
b=inventorySummaryService.removeBatchByIds(deleteList);
}
//将orderSum和newSum两个列表进行拼接,最终得到一个更新的list进行更新
List<InventorySummary> totalSumList=new ArrayList<>();
totalSumList.addAll(oldSummaryList);
totalSumList.addAll(newSummaryList);
boolean c =inventorySummaryService.updateBatchById(totalSumList);
//将库存表inventory中的装备的仓库id进行修改
//需要判断是否将报废区的数据进行移库,如果移动,那么所有的装备修改仓库id
//如果保留报废区,那么将报废区的数量不进行修改,其余数据进行修改
List<Inventory> eqsList = inventoryService.selectEqsByItem(searchCriteria);
for (Inventory inventory : eqsList) {
for (OrderDetail detail2 : collect) {
if (inventory.getOrgId().equals(existOrder.getStartOrgId())
&& inventory.getSizeId().equals(detail2.getSizeId())
&& inventory.getTypeId().equals(detail2.getTypeId())
&& inventory.getPrice().equals(detail2.getPrice())) {
// 修改 仓库id
inventory.setLocationId(detail2.getWarehouseId());
break; // 找到匹配的对象后跳出内循环
}
}
}
boolean d=inventoryService.updateBatchById(eqsList);
return true;
}
}
......@@ -22,19 +22,7 @@ public class PoliceEquipmentServiceImpl extends ServiceImpl<PoliceEquipmentMappe
@Resource
private PolicemanService policemanService;
/**
* 借用时将装备进行添加借用装备信息
* @param req
* @return
*/
@Override
public boolean AddPoliceEqs(FormEqsReq req) {
PoliceEquipment policeEquipment = new PoliceEquipment();
//判断警员是否存在
policemanService.PoliceExist(req.getPoliceId());
BeanPlusUtil.copyProperties(req,policeEquipment);
return save(policeEquipment);
}
}
......
package com.junmp.jyzb.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.entity.PoliceFace;
import com.junmp.jyzb.service.PoliceFaceService;
import com.junmp.jyzb.mapper.PoliceFaceMapper;
import org.springframework.stereotype.Service;
/**
* @author lxh专属坐骑
* @description 针对表【base_police_face】的数据库操作Service实现
* @createDate 2023-10-31 14:18:50
*/
@Service
public class PoliceFaceServiceImpl extends ServiceImpl<PoliceFaceMapper, PoliceFace>
implements PoliceFaceService{
}
......@@ -3,20 +3,23 @@ package com.junmp.jyzb.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.exception.WorkFlowException;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.jyzb.api.bean.dto.PoliceFingerDto;
import com.junmp.jyzb.api.bean.dto.PolicemanDto;
import com.junmp.jyzb.api.bean.dto.ReassignmentDto;
import com.junmp.jyzb.api.bean.dto.UserRoleDto;
import com.junmp.jyzb.api.bean.query.CabinetReq;
import com.junmp.jyzb.api.bean.query.PoliceReassignmentReq;
import com.junmp.jyzb.api.bean.query.PolicemanReq;
import com.junmp.jyzb.api.bean.query.QueryReassignmentReq;
import com.junmp.jyzb.api.bean.req.FormEqsReq;
import com.junmp.jyzb.api.bean.req.UpdatePolicemanReq;
import com.junmp.jyzb.api.bean.req.UpdateReassignmentReq;
......@@ -41,9 +44,11 @@ import com.junmp.v2.sys.api.bean.user.req.SysUserReq;
import com.junmp.v2.sys.api.bean.user.req.UserOrgReq;
import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.entity.SysUserOrg;
import com.junmp.v2.sys.user.entity.SysUserRole;
import com.junmp.v2.sys.user.factory.SysUserCreateFactory;
import com.junmp.v2.sys.user.mapper.SysUserMapper;
import com.junmp.v2.sys.user.service.SysUserOrgService;
import com.junmp.v2.sys.user.service.SysUserRoleService;
import com.junmp.v2.sys.user.service.SysUserService;
import liquibase.pro.packaged.L;
import liquibase.pro.packaged.O;
......@@ -56,6 +61,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
......@@ -98,10 +104,25 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
@Resource
private SysUserOrgService sysUserOrgService;
@Resource
private SysUserRoleService sysUserRoleService;
@Resource
private PoliceFaceService policeFaceService;
@Resource
private StocktakeService stocktakeService;
private static final String REDIS_POLICE = "Policeman_";
private static final String REDIS_ORG = "Organization_";
@Override
public Object addEs() {
return null;
}
/**
* 添加警员信息
*
......@@ -111,14 +132,28 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
@Override
@Transactional(rollbackFor = Exception.class)
public String AddPoliceman(UpdatePolicemanReq req) {
//判断传入的用户名是否存在
SysUser one = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getAccount, req.getAccount()));
if (one!=null){
throw new ServiceException(UserExceptionEnum.USER_IS_EXIST);
}
//查询传入的组织机构id是否存在
pubOrgService.PubOrgExist(req.getOrgId());
//绑定账号
SysUser sysUser = add(req);
//判断是否添加角色,进行绑定
if (req.getRolesList().size()==0){
List<SysUserRole> sysUserRoleList=new ArrayList<>() ;
if (req.getRolesList().size()>0 ){
for (Long roleId: req.getRolesList()) {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(roleId);
sysUserRole.setUserId(sysUser.getUserId());
sysUserRole.setCreateTime(DateTimeUtil.getCurrentDateTime());
sysUserRole.setCreateUser(req.getCreateUser());
sysUserRoleList.add(sysUserRole);
}
}
sysUserRoleService.saveBatch(sysUserRoleList);
Policeman policeman = new Policeman();
BeanPlusUtil.copyProperties(req, policeman);
policeman.setPassword(sysUser.getPassword());
......@@ -214,6 +249,24 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
fingerDtoList.add(policeFingerDto);
}
policemanDto.setFingersList(fingerDtoList);
//将账号名称返回
policemanDto.setAccount(sysUserService.getById(policemanDto.getUserId()).getAccount());
//通过警员信息将该警员的角色id返回
List<SysUserRole> list = sysUserRoleService.list(new LambdaQueryWrapper<SysUserRole>()
.eq(SysUserRole::getUserId, policemanDto.getUserId()));
List<Long> collect = list.stream().map(sysUserRole -> {
Long roleId = sysUserRole.getRoleId();
return roleId;
}).collect(Collectors.toList());
policemanDto.setRolesList(collect);
List<PoliceFace> paceList = policeFaceService.list(new LambdaQueryWrapper<PoliceFace>()
.eq(PoliceFace::getPoliceId, req.getId()));
List<String> faceList=new ArrayList<>();
for (PoliceFace policeFace:paceList) {
faceList.add(policeFace.getFaceInfo());
}
policemanDto.setFaceInfoList(faceList);
return policemanDto;
}
......@@ -549,9 +602,9 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
//警员调岗
@Override
@Transactional(rollbackFor = Exception.class)
public boolean changePoliceOrg(PoliceReassignmentReq req) {
public boolean changePoliceOrg(UpdateReassignmentReq req) {
//通过警员id查询出该警员的基本信息
Policeman policeman = getById(req.getId());
Policeman policeman = getById(req.getPoliceId());
//将其组织机构号设为空
policeman.setOrgId(null);
//如果警员绑定账号,将警员的账号进行删除
......@@ -560,44 +613,66 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
policeman.setPassword(null);
sysUserService.removeById(policeman.getUserId());
}
//角色账号信息也进行删除
sysUserRoleService.delByUserId(policeman.getUserId());
//修改警员的个人信息(删除指纹信息)
List<PoliceFinger> list = policeFingerService.list(new LambdaQueryWrapper<PoliceFinger>()
List<PoliceFinger> fingerList = policeFingerService.list(new LambdaQueryWrapper<PoliceFinger>()
.eq(PoliceFinger::getPoliceId, policeman.getId()));
if (list.size()!=0){
policeFingerService.removeBatchByIds(list);
if (fingerList.size()!=0){
policeFingerService.removeBatchByIds(fingerList);
}
//人脸信息删除
List<PoliceFace> faceInfoList=policeFaceService.list(new LambdaQueryWrapper<PoliceFace>()
.eq(PoliceFace::getName,policeman.getId()));
if (faceInfoList.size()!=0){
policeFingerService.removeBatchByIds(faceInfoList);
}
//如果绑定箱门,进行解绑
if (ObjectUtil.isNotNull(policeman.getCabinetBoxId())){
policeman.setCabinetBoxId(null);
}
//对装备进行相关操作
//判断前端传递的装备列表是否为空,如果为空则表示该警员不拿走任何装备信息
if (req.getEqsReqList().size()==0){
LambdaQueryWrapper<PoliceEquipment> eq = new LambdaQueryWrapper<PoliceEquipment>()
.eq(PoliceEquipment::getPoliceId, policeman.getId());
//查询该警员是否存在装备信息,如果存在则进行删除
List<PoliceEquipment> list1 = policeEquipmentService.list(eq);
if (list1.size()!=0){
policeEquipmentService.remove(eq);
//查询出该警员的所有装备信息
LambdaQueryWrapper<PoliceEquipment> eq = new LambdaQueryWrapper<PoliceEquipment>()
.eq(PoliceEquipment::getPoliceId, policeman.getId());
//查询该警员是否存在装备信息,如果存在则进行删除
List<PoliceEquipment> list1 = policeEquipmentService.list(eq);
//判断前端传递的装备列表字段是否为空,如果为空则表示该警员不拿走任何装备信息
if (ObjectUtil.isNull(req.getEqsList()) && req.getEqsList().trim().isEmpty()){
policeEquipmentService.remove(eq);
}else {//将该警员拿走的装备的组织机构设置为空,并且其他装备进行删除
List<PoliceEquipment> removeList=new ArrayList<>();
List<PoliceEquipment> updateList=new ArrayList<>();
List<PoliceEquipment> policeEquipments = JSON.parseArray(req.getEqsList(), PoliceEquipment.class);
for (PoliceEquipment policeEquipment:list1) {
boolean flag=false;
for (PoliceEquipment one:policeEquipments) {
if (policeEquipment.getSizeId().equals(one.getSizeId())
&& policeEquipment.getTypeId().equals(one.getTypeId())){
policeEquipment.setNum(one.getNum());
updateList.add(policeEquipment);
flag=true;
break;
}
}
if (!flag){
removeList.add(policeEquipment);
}
}
}else{
//警员带走的装备(如果没有全部拿走,那么剩下的装备信息删除)那么他带走的装备怎么处理呢,应该是inventory这张表中的数据进行操作,但是具体是哪几件装备修改信息呢?应该是具体到epc的吧
for (FormEqsReq eqsReq:req.getEqsReqList()) {
policeEquipmentService.updateBatchById(updateList);
policeEquipmentService.removeBatchByIds(removeList);
}
}
return updateById(policeman);
}
//获取警员下面的装备
@Override
public PageResult<PoliceEquipment> GetPoliceEqs(PolicemanReq req) {
public List<PoliceEquipment> GetPoliceEqs(QueryReassignmentReq req) {
LambdaQueryWrapper<PoliceEquipment> eq = new LambdaQueryWrapper<PoliceEquipment>()
.eq(PoliceEquipment::getPoliceId, req.getId());
Page<PoliceEquipment> page = policeEquipmentService
.page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
return PageResultFactory.createPageResult(page);
.eq(PoliceEquipment::getPoliceId, req.getPoliceId());
return policeEquipmentService.list(eq);
}
......@@ -634,26 +709,52 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
//警员调岗申请
@Override
public String PoliceReassignment(UpdateReassignmentReq req) {
//判断是否有工作流id,如果有则将状态进行修改
if (ObjectUtil.isEmpty(req.getProcessDefinitionId())) {
req.setExamineState("none");
} else {
req.setExamineState("working");
}
Reassignment reassignment = new Reassignment();
BeanPlusUtil.copyProperties(req,reassignment);
reassignmentService.save(reassignment);
//先判断该单据id是否存在,如果存在,进行更新操作即可
if (ObjectUtil.isNotNull(req.getId()) && ! req.getId().trim().isEmpty() && ObjectUtil.isNull(req.getProcessDefinitionId())){
reassignment.setUpdateTime(DateTimeUtil.getCurrentDateTime());
reassignmentService.updateById(reassignment);
return reassignment.getId();
}
reassignment.setCreateTime(DateTimeUtil.getCurrentDateTime());
if (ObjectUtil.isNull(req.getId()) || req.getId().isEmpty()){
OrderNum orderNum = stocktakeService.setOrderCode("", req.getOrgId());
String codeValue=String.format("%04d",orderNum.getNum());
reassignment.setOrderCode(orderNum.getBussinessType()+orderNum.getYear()+
String.format("%02d", LocalDateTime.now().getMonth().getValue())+
String.format("%02d",LocalDateTime.now().getDayOfMonth())+codeValue);
reassignmentService.save(reassignment);
}
//执行工作流
if (req.getExamineState().equals("working"))
{
StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
startProcessInstanceDTO.setOrderId(reassignment.getId());
startProcessInstanceDTO.setOrderType("workOrder");
startProcessInstanceDTO.setOrderType("reassigment");
startProcessInstanceDTO.setUserId(req.getUserId());
startProcessInstanceDTO.setBussinessType("transfer");
String ProcessInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
reassignment.setProcessId(ProcessInstanceId);
String assigns= FlowInstanceService.GetNextAssign(ProcessInstanceId);//这里需要手动更新审核人信息
reassignment.setCurrentAssign(assigns);
reassignmentService.updateById(reassignment);
}
return reassignment.getId();
}
//查看警员调岗申请单
@Override
public PageResult<Reassignment> ShowReassignmentPage(UpdateReassignmentReq req) {
public PageResult<ReassignmentDto> ShowReassignmentPage(QueryReassignmentReq req) {
//(如果传其他不是数据库字段参数或者排序规则不是deac或者asc可能会出现错误)
if (ObjectUtil.isNotNull(req.getColumn()) && !req.getColumn().trim().isEmpty() &&
(req.getOrder().equalsIgnoreCase("asc")|| req.getOrder().equalsIgnoreCase("desc")) &&
......@@ -664,14 +765,22 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
}
LambdaQueryWrapper<Reassignment> eq = new LambdaQueryWrapper<Reassignment>()
.eq(ObjectUtil.isNotNull(req.getOrgId()), Reassignment::getOrgId, req.getOrgId())
.eq(ObjectUtil.isNotNull(req.getTargetOrgId()), Reassignment::getTargetOrgId, req.getTargetOrgId())
.eq(ObjectUtil.isNotNull(req.getExamineState()), Reassignment::getExamineState, req.getExamineState())
.eq(ObjectUtil.isNotNull(req.getExamineState()) && !req.getExamineState().trim().isEmpty(), Reassignment::getExamineState, req.getExamineState())
.like(ObjectUtil.isNotNull(req.getPoliceName()), Reassignment::getPoliceName, req.getPoliceName())
.ge(ObjectUtil.isNotNull(req.getStartTime()), Reassignment::getApplyTime, req.getStartTime())
.le(ObjectUtil.isNotNull(req.getEndTime()), Reassignment::getApplyTime, req.getEndTime())
.last("order by " + req.getColumn() + " " + req.getOrder());
long size = reassignmentService.list(eq).size();
Page<Reassignment> page = reassignmentService.page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
return PageResultFactory.createPageResult(page);
List<ReassignmentDto> collect = page.getRecords().stream().map(reassignment -> {
ReassignmentDto reassignmentDto = new ReassignmentDto();
BeanPlusUtil.copyProperties(reassignment, reassignmentDto);
return reassignmentDto;
}).collect(Collectors.toList());
Page<ReassignmentDto> page1 = new Page<>(req.getPageNo(), req.getPageSize());
page1.setTotal(size);
page1.setRecords(collect);
return PageResultFactory.createPageResult(page1);
}
//查询组织机构下的用户以及角色信息(也可以根据别的查询条件查询)
......@@ -723,4 +832,111 @@ public class PolicemanServiceImpl extends ServiceImpl<PolicemanMapper, Policeman
return PageResultFactory.createPageResult(page);
}
//获取所有没有组织机构的警员信息
@Override
public List<Policeman> GetPoliceWithoutOrg() {
return list(new LambdaQueryWrapper<Policeman>().isNull(Policeman::getOrgId));
}
//添加人脸和指纹照片或修改
@Override
public boolean addFaceAndfinger(UpdatePolicemanReq req) {
List<PoliceFace> addFaceInfoList=new ArrayList<>();
List<PoliceFace> delFaceInfoList=new ArrayList<>();
//库中存储的照片信息
List<PoliceFace> faceList = policeFaceService.list(new LambdaQueryWrapper<PoliceFace>()
.eq(PoliceFace::getPoliceId, req.getId()));
List<String> faceInfoList = req.getFaceInfoList();
Set<String> set = new HashSet<>();
for (PoliceFace face : faceList) {
set.add(face.getFaceInfo());
}
if (faceList.size()>0){
if (faceInfoList.size()>0){
for (String face : faceInfoList) {
if (!set.contains(face)) {
PoliceFace policeFace = new PoliceFace();
policeFace.setFaceInfo(face);
policeFace.setPoliceId(req.getId());
policeFace.setCreateTime(DateTimeUtil.getCurrentDateTime());
addFaceInfoList.add(policeFace);
}
}
for (PoliceFace face : faceList) {
if (!faceInfoList.contains(face.getFaceInfo())) {
delFaceInfoList.add(face);
}
}
}
}else {
if (faceInfoList.size()>0){
for (String face:faceInfoList) {
PoliceFace policeFace = new PoliceFace();
policeFace.setFaceInfo(face);
policeFace.setPoliceId(req.getId());
policeFace.setCreateTime(DateTimeUtil.getCurrentDateTime());
addFaceInfoList.add(policeFace);
}
}
}
boolean a=true;
if (addFaceInfoList.size()>0){
a=policeFaceService.saveBatch(addFaceInfoList);
}
boolean b=true;
if (delFaceInfoList.size()>0){
b=policeFaceService.removeByIds(delFaceInfoList);
}
List<PoliceFinger> addFingerList=new ArrayList<>();
List<PoliceFinger> delFingerList=new ArrayList<>();
//库中存储的指纹信息
List<PoliceFinger> fingerList = policeFingerService.list(new LambdaQueryWrapper<PoliceFinger>()
.eq(PoliceFinger::getPoliceId, req.getId()));
List<String> fingerInfoList = req.getFingerList();
Set<String> set1 = new HashSet<>();
for (PoliceFinger finger : fingerList) {
set1.add(finger.getFingerInfo());
}
if (fingerList.size()>0){
if (fingerInfoList.size()>0){
for (String finger : fingerInfoList) {
if (!set1.contains(finger)) {
PoliceFinger finger1 = new PoliceFinger();
finger1.setFingerInfo(finger);
finger1.setPoliceId(req.getId());
finger1.setCreateTime(DateTimeUtil.getCurrentDateTime());
addFingerList.add(finger1);
}
}
for (PoliceFinger finger : fingerList) {
if (!fingerInfoList.contains(finger.getFingerInfo())) {
delFingerList.add(finger);
}
}
}
}else {
if (fingerInfoList.size()>0){
for (String finger:fingerInfoList) {
PoliceFinger finger1 = new PoliceFinger();
finger1.setFingerInfo(finger);
finger1.setPoliceId(req.getId());
finger1.setCreateTime(DateTimeUtil.getCurrentDateTime());
addFingerList.add(finger1);
}
}
}
boolean c=true;
if (addFingerList.size()>0){
c=policeFingerService.saveBatch(addFingerList);
}
boolean d=true;
if (delFingerList.size()>0){
policeFingerService.removeByIds(delFingerList);
}
return (a && b && c && d);
}
}
package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.ProductBatchDto;
import com.junmp.jyzb.api.bean.dto.ProductProcessDto;
import com.junmp.jyzb.api.bean.query.ProductBatchReq;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.api.util.GenCodeUtil;
import com.junmp.jyzb.entity.ProductBatch;
import com.junmp.jyzb.mapper.ProductBatchMapper;
import com.junmp.jyzb.service.ProductBatchService;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.exception.enums.DefaultBizExceptionEnum;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:47
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Service
@Slf4j
public class ProductBatchServiceImpl extends ServiceImpl<ProductBatchMapper, ProductBatch> implements ProductBatchService {
@Override
public boolean addProductBatch(ProductBatchReq req) {
ProductBatch batch = new ProductBatch();
BeanPlusUtil.copyProperties(req, batch);
batch.setHasFinish(false);
batch.setHasInit(false);
Integer maxSn = baseMapper.getMaxSn();
Integer sn = maxSn + 1;
batch.setSn(sn);
String batchNo = GenCodeUtil.genBatchNo(sn);
batch.setBatchNo(batchNo);
return this.save(batch);
}
@Override
public boolean editProductBatch(ProductBatchReq req) {
ProductBatch batch = queryBatch(req);
//如果修改了生产数量大于开始的数量
if(batch.getHasInit() && (req.getTotal() < batch.getTotal())){
throw new ServiceException(ProductExceptionEnum.MODIFY_NUM_ERROR);
}
if (req.getTotal() > batch.getTotal()) {
batch.setHasInit(false);
}
BeanPlusUtil.copyProperties(req, batch);
return this.updateById(batch);
}
@Override
public boolean del(ProductBatchReq req) {
if (null != req && ObjectUtil.isNotNull(req.getBatchId())) {
ProductBatchDto batch = baseMapper.getBatchProcess(req.getBatchId());
if (ObjectUtil.isNull(batch)) {
//批次不存在
throw new ServiceException(ProductExceptionEnum.BATCH_NOT_EXIST);
} else {
if (!batch.getHasFinish() && (batch.getDoneNum() < 1)) {
return this.removeById(req.getBatchId());
} else {
throw new ServiceException(ProductExceptionEnum.BATCH_PROCESSED);
//生产中不能删除
}
}
} else {
//参数错误
throw new ServiceException(DefaultBizExceptionEnum.VALID_PARAMS_ERROR);
}
}
@Override
public List<ProductBatch> findList(ProductBatchReq req) {
return this.list(createWrapper(req));
}
@Override
public PageResult<ProductBatchDto> findPage(ProductBatchReq req) {
Page<ProductBatchDto> page = baseMapper.getBatchPage(PageFactory.getDefaultPage(req), req);
return PageResultFactory.createPageResult(page);
}
@Override
public PageResult<ProductProcessDto> findProcessPage(ProductBatchReq req) {
Page<ProductProcessDto> page = baseMapper.getBatchProcessPage(PageFactory.getDefaultPage(req), req);
return PageResultFactory.createPageResult(page);
}
@Override
public ProductBatchDto getBatchDetail(Long batchId) {
ProductBatchDto dto = baseMapper.getBatchProcess(batchId);
if (ObjectUtil.isNull(dto)) {
throw new ServiceException(ProductExceptionEnum.BATCH_NOT_EXIST);
}
return dto;
}
private ProductBatch queryBatch(ProductBatchReq req) {
ProductBatch app = this.getById(req.getBatchId());
if (ObjectUtil.isNull(app)) {
throw new ServiceException(ProductExceptionEnum.BATCH_NOT_EXIST);
}
return app;
}
private LambdaQueryWrapper<ProductBatch> createWrapper(ProductBatchReq req) {
LambdaQueryWrapper<ProductBatch> wrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isEmpty(req)) {
return wrapper;
}
//根据业务编码查询
wrapper.like(ObjectUtil.isNotEmpty(req.getBatchNo()), ProductBatch::getBatchNo, req.getBatchNo());
//根据企业名称模糊查询
wrapper.eq(ObjectUtil.isNotEmpty(req.getProductId()), ProductBatch::getProductId, req.getProductId());
wrapper.eq(ObjectUtil.isNotEmpty(req.getSpecId()), ProductBatch::getSpecId, req.getSpecId());
wrapper.orderByDesc(ProductBatch::getCreateTime);
return wrapper;
}
}
package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.query.ProductReq;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.api.util.GenCodeUtil;
import com.junmp.jyzb.entity.Product;
import com.junmp.jyzb.mapper.ProductMapper;
import com.junmp.jyzb.service.ProductService;
import com.junmp.jyzb.service.ProductSkuService;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/30 13:46
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Service
@Slf4j
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
@Resource
private ProductSkuService productSkuService;
@Override
public boolean addProduct(ProductReq req) {
Product product = new Product();
BeanPlusUtil.copyProperties(req, product);
Integer maxSn = baseMapper.getMaxSn();
//1-获取当前序号
Integer sn = maxSn + 1;
product.setSn(sn);
//2-获取当前编码
String code = GenCodeUtil.genProductCode(sn);
product.setProductCode(code);
return this.save(product);
}
@Override
public boolean editProduct(ProductReq req) {
Product product = this.queryProduct(req);
BeanPlusUtil.copyProperties(req, product);
return this.updateById(product);
}
@Override
@Transactional
public boolean del(ProductReq req) {
Product product = queryProduct(req);
this.removeById(req.getProductId());
//删除关联信息
productSkuService.delByProductId(product.getProductId());
return true;
}
@Override
public List<Product> findList(ProductReq req) {
LambdaQueryWrapper<Product> wrapper = createWrapper(req);
return this.list(wrapper);
}
@Override
public PageResult<Product> findPage(ProductReq req) {
LambdaQueryWrapper<Product> wrapper = createWrapper(req);
Page<Product> page = this.page(PageFactory.getDefaultPage(req.getPageNo(),req.getPageSize()), wrapper);
return PageResultFactory.createPageResult(page);
}
private Product queryProduct(ProductReq req) {
Product app = this.getById(req.getProductId());
if (ObjectUtil.isNull(app)) {
throw new ServiceException(ProductExceptionEnum.PRODUCT_NOT_EXIST);
}
return app;
}
private LambdaQueryWrapper<Product> createWrapper(ProductReq req) {
LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isEmpty(req)) {
return wrapper;
}
//根据业务编码查询
wrapper.like(ObjectUtil.isNotEmpty(req.getProductCode()), Product::getProductCode, req.getProductCode());
//根据企业名称模糊查询
wrapper.like(ObjectUtil.isNotEmpty(req.getName()), Product::getName, req.getName());
wrapper.orderByDesc(Product::getCreateTime);
return wrapper;
}
}
package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.query.ProductSkuReq;
import com.junmp.jyzb.api.exception.JYZBAppException;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.api.util.GenCodeUtil;
import com.junmp.jyzb.entity.Product;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.jyzb.mapper.ProductSkuMapper;
import com.junmp.jyzb.service.ProductService;
import com.junmp.jyzb.service.ProductSkuService;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/7/29 16:26
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Slf4j
@Service
public class ProductSkuServiceImpl extends ServiceImpl<ProductSkuMapper, ProductSku> implements ProductSkuService {
@Resource
private ProductService productService;
@Override
public boolean addProductSku(ProductSkuReq req) {
ProductSku entity = new ProductSku();
BeanPlusUtil.copyProperties(req, entity);
Integer maxSn = baseMapper.getMaxSn(req.getProductId());
//1-获取当前序号
Integer sn = maxSn + 1;
entity.setSn(sn);
//2- 设置号型编号
String hxCode = GenCodeUtil.genSpecCode(sn);
entity.setSpecCode(hxCode);
//3-设置SKU代码
Product product = productService.getById(req.getProductId());
if (ObjectUtil.isNotNull(product)) {
entity.setSkuCode(GenCodeUtil.genSkuCode(product.getProductCode(), hxCode));
return this.save(entity);
} else {
log.warn(StrUtil.format("该产品不存在,编号为:{}", req.getProductId()));
throw new JYZBAppException(ProductExceptionEnum.PRODUCT_NOT_EXIST);
}
}
@Override
public boolean editProductSku(ProductSkuReq req) {
ProductSku entity = queryProductSku(req);
BeanPlusUtil.copyProperties(req, entity);
return this.updateById(entity);
}
@Override
public boolean del(ProductSkuReq req) {
ProductSku sku = queryProductSku(req);
return removeById(sku.getSpecId());
}
@Override
public boolean delByProductId(Long productId) {
return baseMapper.delByProductId(productId);
}
@Override
public List<ProductSku> findList(ProductSkuReq req) {
LambdaQueryWrapper<ProductSku> wp = createWrapper(req);
return this.list(wp);
}
@Override
public PageResult<ProductSku> findPage(ProductSkuReq req) {
LambdaQueryWrapper<ProductSku> wrapper = createWrapper(req);
Page<ProductSku> page = this.page(PageFactory.getDefaultPage(req.getPageNo(),req.getPageSize()), wrapper);
return PageResultFactory.createPageResult(page);
}
private ProductSku queryProductSku(ProductSkuReq req) {
ProductSku app = this.getById(req.getSpecId());
if (ObjectUtil.isNull(app)) {
throw new ServiceException(ProductExceptionEnum.PRODUCT_SKU_NOT_EXIST);
}
return app;
}
private LambdaQueryWrapper<ProductSku> createWrapper(ProductSkuReq req) {
LambdaQueryWrapper<ProductSku> wrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isEmpty(req)) {
return wrapper;
}
//根据业务编码查询
wrapper.like(ObjectUtil.isNotEmpty(req.getSkuCode()), ProductSku::getSkuCode, req.getSkuCode());
//根据企业名称模糊查询
wrapper.eq(ObjectUtil.isNotEmpty(req.getProductId()), ProductSku::getProductId, req.getProductId());
wrapper.orderByDesc(ProductSku::getSn);
return wrapper;
}
}
package com.junmp.jyzb.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.ProductTagDto;
import com.junmp.jyzb.api.bean.dto.SimpleTagDto;
import com.junmp.jyzb.api.bean.query.ProductTagReq;
import com.junmp.jyzb.api.exception.enums.ProductExceptionEnum;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.jyzb.mapper.ProductTagMapper;
import com.junmp.jyzb.service.ProductTagService;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* <pre>
*
* 描述:
* 版本:1.0.0
* 日期:2022/8/1 09:36
* 作者:ningzp@junmp.com.cn
* <br>修改记录
* <br>修改日期 修改人 修改内容
*
* </pre>
*/
@Service
@Slf4j
public class ProductTagServiceImpl extends ServiceImpl<ProductTagMapper, ProductTag> implements ProductTagService {
@Override
public boolean addTagInfo(ProductTagReq req) {
ProductTag tag = new ProductTag();
BeanPlusUtil.copyProperties(req, tag);
tag.setProduceTime(new Date());
tag.setHasChecked(false);
return this.save(tag);
}
@Override
public boolean editTagInfo(ProductTagReq req) {
return false;
}
@Override
public boolean del(ProductTagReq req) {
return false;
}
@Override
public ProductTag checkTagUid(ProductTagReq req) {
//1-查找TagUid是否绑定
ProductTag tag = findByUid(req.getTagUid());
if (ObjectUtil.isNull(tag)) {
//未绑定
SimpleTagDto dto = baseMapper.getInitTagInfo(req.getBatchId());
if (ObjectUtil.isNull(dto)) {
throw new ServiceException(ProductExceptionEnum.TAG_INFO_INIT_DONE);
}
tag = new ProductTag();
tag.setTagId(dto.getTagId());
tag.setProductCode(dto.getProductCode());
return tag;
} else {
//已绑定
//2-验证批次是否一致
if (StrUtil.equalsIgnoreCase(String.valueOf(req.getBatchId()),
String.valueOf(tag.getBatchId()))) {
return tag;
} else {
//抛出异常,标签已经绑定了
throw new ServiceException(ProductExceptionEnum.TAG_INFO_HAD_BINDING);
}
}
}
@Override
public ProductTag findByUid(String tagUid) {
ProductTagReq tmp = new ProductTagReq();
tmp.setTagUid(tagUid);
LambdaQueryWrapper<ProductTag> wp = createWrapper(tmp);
List<ProductTag> list = list(wp);
if (CollectionUtil.isNotEmpty(list)) {
return list.get(0);
} else {
return null;
}
}
@Override
public ProductTagDto getTagInfo(Long tagId) {
ProductTagDto dto = baseMapper.getTagInfoByTagId(tagId);
if (ObjectUtil.isNull(dto)) {
throw new ServiceException(ProductExceptionEnum.TAG_INFO_NOT_EXISTS);
}
return dto;
}
@Override
public List<ProductTag> findList(ProductTagReq req) {
LambdaQueryWrapper<ProductTag> wp = createWrapper(req);
return this.list(wp);
}
@Override
public PageResult<ProductTag> findPage(ProductTagReq req) {
LambdaQueryWrapper<ProductTag> wrapper = createWrapper(req);
Page<ProductTag> page = this.page(PageFactory.getDefaultPage(req.getPageNo(),req.getPageSize()), wrapper);
return PageResultFactory.createPageResult(page);
}
private LambdaQueryWrapper<ProductTag> createWrapper(ProductTagReq req) {
LambdaQueryWrapper<ProductTag> wrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isEmpty(req)) {
return wrapper;
}
//根据业务编码查询
wrapper.eq(ObjectUtil.isNotEmpty(req.getProductCode()), ProductTag::getProductCode, req.getProductCode());
wrapper.eq(ObjectUtil.isNotEmpty(req.getTagUid()), ProductTag::getTagUid, req.getTagUid());
wrapper.eq(ObjectUtil.isNotEmpty(req.getBatchId()), ProductTag::getBatchId, req.getBatchId());
wrapper.eq(ObjectUtil.isNotEmpty(req.getTagId()), ProductTag::getTagId, req.getTagId());
wrapper.eq(ProductTag::getHasInit, true);
wrapper.orderByDesc(ProductTag::getCheckTime);
return wrapper;
}
}
......@@ -3,24 +3,27 @@ package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.EquipmentTypeDto;
import com.junmp.jyzb.api.bean.dto.OrgDto;
import com.junmp.jyzb.api.bean.dto.OrgTreeDto;
import com.junmp.jyzb.Repository.PubOrgRepository;
import com.junmp.jyzb.api.bean.dto.*;
import com.junmp.jyzb.api.bean.query.QueryOrgReq;
import com.junmp.jyzb.api.bean.req.UpdateOrgReq;
import com.junmp.jyzb.api.exception.JYZBAppException;
import com.junmp.jyzb.api.exception.enums.EquipmentTypeExceptionEnum;
import com.junmp.jyzb.api.exception.enums.OrgExceptionEnum;
import com.junmp.jyzb.api.exception.enums.PubOrgExceptionEnum;
import com.junmp.jyzb.entity.EquipmentType;
import com.junmp.jyzb.entity.PubOrg;
import com.junmp.jyzb.entity.Supplier;
import com.junmp.jyzb.utils.HttpStatus;
import com.junmp.jyzb.utils.RedisUtils;
import com.junmp.jyzb.utils.ResponseResult;
import com.junmp.jyzb.utils.ReturnMsg;
import com.junmp.jyzb.utils.*;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
......@@ -28,7 +31,9 @@ import com.junmp.jyzb.mapper.PubOrgMapper;
import com.junmp.jyzb.service.PubOrgService;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
......@@ -37,12 +42,15 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
@Resource
private PubOrgMapper pubOrgMapper;
@Resource
private RestHighLevelClient client;
@Autowired
private RedisUtils redisUtils;
@Autowired
private PubOrgRepository pubOrgRepository;
private List<OrgDto> OrgDto;
private ArrayList<String> ids;
//例:传入abc,OrderMQReceiver ==>bc 删掉开头的字符串,不是就不删除
public static String removePrefix(String name, String deleteName) {
if (name.startsWith(deleteName)) {
......@@ -129,6 +137,12 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
}
@Override
public Object AddToEs() {
List<PubOrg> listOrg= this.list();
return pubOrgRepository.saveAll(listOrg);
}
@Override
public ResponseResult setShortName(Map<String, Object> orgId) {
List<PubOrg> menuList = pubOrgMapper.selectAllOrg();
......@@ -275,28 +289,295 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
public OrgDto getOrgHierarchy(QueryOrgReq req) {
req.setDelFlag(1);
// req.setDelFlag(1);
LambdaQueryWrapper<PubOrg> wp = this.createWrapper(req);
// LambdaQueryWrapper<PubOrg> one = this.createWrapper(req);
List<PubOrg> list = this.list(wp);
OrgDto orgSet=new OrgDto();
PubOrg OrgOne= this.getById(req.getOrgId());
BeanPlusUtil.copyProperties(OrgOne, orgSet);
orgSet.setIsLeaf(true);
List<PubOrg> list2 = list(new LambdaQueryWrapper<PubOrg>().eq(PubOrg::getOrgParentId, orgSet.getOrgId()));
if (list2.size()==0 || list2.isEmpty()){
orgSet.setIsLeaf(true);
}else {
orgSet.setIsLeaf(false);
}
// Convert PubOrg list to OrgDto list
List<OrgDto> orgs = new ArrayList<>();
list.forEach(p -> {
OrgDto org = new OrgDto();
BeanPlusUtil.copyProperties(p, org);
org.setIsLeaf(false);
if (p.getOrgParentId().equals(orgSet.getOrgParentId())){
List<PubOrg> list1 = list(new LambdaQueryWrapper<PubOrg>().eq(PubOrg::getOrgParentId, p.getOrgId()));
if (list1.size()==0 || list1.isEmpty()){
org.setIsLeaf(true);
}
}
orgs.add(org);
});
return getMaximumParent(orgs,orgSet);
}
/**
* 搜索条件
* @return
* @throws IOException
*/
public List<PubOrg> searchAll() throws IOException {
SearchRequest request = new SearchRequest("org_pinyin");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.matchAllQuery()) // 匹配所有文档
.filter(QueryBuilders.termQuery("delFlag", 1)); // 过滤 delFlag 为 1 的文档
builder.query(boolQueryBuilder);
builder.size(5000); // 设置每页大小
request.source(builder);
request.scroll(TimeValue.timeValueMinutes(1L)); // 设置滚动时间
SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
List<PubOrg> pubOrgList = new ArrayList<>();
while (true) {
for (SearchHit documentFields : searchResponse.getHits().getHits()) {
Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
PubOrg pubOrg = this.fromMap(sourceAsMap);
pubOrgList.add(pubOrg);
}
SearchScrollRequest scrollRequest = new SearchScrollRequest(searchResponse.getScrollId());
scrollRequest.scroll(TimeValue.timeValueMinutes(1L));
searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
if (searchResponse.getHits().getHits().length == 0) {
break; // 所有结果已经检索完成
}
}
// 清除滚动上下文
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(searchResponse.getScrollId());
client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
return pubOrgList;
}
/**
* 搜索条件
* @param pageNum
* @param pageSize
* @param keyword
* @return
* @throws IOException
*/
public List<PubOrg> searchOrg(Integer pageNum, Integer pageSize, String keyword) throws IOException {
if (pageNum < 0) pageNum = 0;
SearchRequest request = new SearchRequest("org_pinyin");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.from(pageNum);
builder.size(pageSize);
// 添加 MatchQueryBuilder 作为 must 条件
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("dName", keyword).operator(Operator.AND);
// MatchQueryBuilder matchQueryBuilder2 = QueryBuilders.matchQuery("dName.pinyin", keyword).operator(Operator.AND);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(matchQueryBuilder);
// boolQueryBuilder.should(matchQueryBuilder2);
// 添加过滤条件,只获取 delFlag 为 1 的数据
builder.postFilter(QueryBuilders.termQuery("delFlag", 1));
builder.query(boolQueryBuilder);
builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
request.source(builder);
SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
List<PubOrg> pubOrgList = new ArrayList<>();
for (SearchHit documentFields : searchResponse.getHits().getHits()) {
Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
PubOrg pubOrg = this.fromMap(sourceAsMap);
// 添加到结果列表
pubOrgList.add(pubOrg);
}
return pubOrgList;
}
public List<OrgDto> buildTree(List<PubOrg> searchResults, List<PubOrg> allOrgs) {
Map<Long, OrgDto> orgDtoMap = new HashMap<>();
// 将所有组织机构转换为OrgDto并放入map中,同时计算子节点数量
for (PubOrg org : allOrgs) {
OrgDto orgDto = new OrgDto();
// 这里根据你的实际字段进行映射
orgDto.setOrgId(org.getOrgId());
orgDto.setOrgName(org.getOrgName());
orgDto.setOrgCode(org.getOrgCode());
orgDto.setIsDepartment(org.getIsDepartment());
orgDto.setOrgParentId(org.getOrgParentId());
orgDto.setAreaName(org.getAreaName());
orgDto.setLevelFlag(String.valueOf(org.getLevelFlag()));
orgDto.setStatusFlag(org.getStatusFlag());
orgDto.setDName(org.getDName());
orgDto.setOrgParentIds(org.getOrgParentIds());
// 计算子节点数量
int childCount = 0;
for (PubOrg childOrg : allOrgs) {
if (childOrg.getOrgParentId().equals(org.getOrgId())) {
childCount++;
}
}
orgDto.setChildCount(childCount);
if (childCount<=0)
{
orgDto.setIsLeaf(true);
}
else
{
orgDto.setIsLeaf(false);
}
// 将OrgDto放入map中,以orgId为键
orgDtoMap.put(org.getOrgId(), orgDto);
}
List<OrgDto> tree = new ArrayList<>();
// 遍历所有搜索到的组织机构数据,构建树
for (PubOrg searchResult : searchResults) {
OrgDto orgDto = orgDtoMap.get(searchResult.getOrgId());
// 如果找到对应的OrgDto
if (orgDto != null && !tree.contains(orgDto)) {
// 从当前节点开始,依次向上查找上级节点,直到最顶层
Long parentId = orgDto.getOrgParentId();
// 将当前节点及其相关节点加入树中
while (parentId != null) {
OrgDto parentDto = orgDtoMap.get(parentId);
if (parentDto != null) {
// 将当前节点添加到上级节点的children中,确保不重复添加
if (!parentDto.getChildren().contains(orgDto)) {
parentDto.getChildren().add(orgDto);
}
// 如果上级节点是最顶层,将上级节点添加到树中,确保不重复添加
if (parentDto.getOrgParentId() == -1 && !tree.contains(parentDto)) {
tree.add(parentDto);
}
// 将上级节点设为当前节点,继续向上查找
orgDto = parentDto;
parentId = parentDto.getOrgParentId();
} else {
parentId = null; // 上级节点不存在,跳出循环
}
}
}
}
return tree;
}
// 从 Map 中构建 PubOrg 对象的方法
public static PubOrg fromMap(Map<String, Object> map) {
PubOrg pubOrg = new PubOrg();
BeanPlusUtil.copyProperties(map, pubOrg);
// pubOrg.setOrgName((String) map.get("orgName"));
// 可以设置其他字段...
return pubOrg;
}
///通过ES获取数据
@Override
public ESOrgDto getOrgTreeByEs(QueryOrgReq req) throws IOException {
// 先进行搜索,获取前20条数据
List<PubOrg> searchResults = searchOrg(0, 10, req.getOrgName());
req.setDelFlag(1);
LambdaQueryWrapper<PubOrg> wp = this.createWrapper(req);
// 获取所有组织机构数据
List<PubOrg> allOrgs = this.list(wp);
List<OrgDto> treeResult= buildTree(searchResults,allOrgs);
ESOrgDto resultDto =new ESOrgDto();
resultDto.setOrgDto(treeResult);
SetIds(treeResult);
resultDto.setIds(ids);
return resultDto;
}
public void SetIds(List<OrgDto> treeResult) {
ids = new ArrayList<>();
if (treeResult != null) {
for (OrgDto orgDto : treeResult) {
setIdsRecursive(orgDto);
}
}
}
private void setIdsRecursive(OrgDto orgDto) {
if (orgDto != null) {
// 添加当前节点的 id
ids.add(String.valueOf(orgDto.getOrgId()));
// 递归处理子节点
if (orgDto.getChildren() != null) {
for (OrgDto child : orgDto.getChildren()) {
setIdsRecursive(child);
}
}
}
}
private OrgDto convertToDto(PubOrg org, List<PubOrg> allOrgs) {
OrgDto orgDto = new OrgDto();
// 这里根据你的实际字段进行映射
orgDto.setOrgId(org.getOrgId());
orgDto.setOrgName(org.getOrgName());
orgDto.setOrgCode(org.getOrgCode());
orgDto.setIsDepartment(org.getIsDepartment());
orgDto.setOrgParentId(org.getOrgParentId());
orgDto.setAreaName(org.getAreaName());
orgDto.setLevelFlag(String.valueOf(org.getLevelFlag()));
orgDto.setStatusFlag(org.getStatusFlag());
orgDto.setOrgParentId(org.getOrgParentId());
orgDto.setDName(org.getDName());
// 其他字段的映射...
// 查找当前节点的子节点
List<PubOrg> children = allOrgs.stream()
.filter(childOrg -> org.getOrgId().equals(childOrg.getOrgParentId()))
.collect(Collectors.toList());
// 如果子节点不为空,递归调用 convertToDto 处理子节点
if (!children.isEmpty()) {
List<OrgDto> childrenDto = new ArrayList<>();
for (PubOrg child : children) {
childrenDto.add(convertToDto(child, allOrgs));
}
orgDto.setChildren(childrenDto);
}
return orgDto;
}
public OrgDto getMaximumParent(List<OrgDto> orgs, OrgDto org) {
OrgDto dept = null;
String parentId = org.getOrgParentId().toString();
......@@ -360,6 +641,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
LambdaQueryWrapper<PubOrg> wp= this.createWrapper(req);
List<PubOrg> list = this.list(wp);
List<OrgDto> orgs=new ArrayList<>();
Comparator<PubOrg> orgComparator = (org1, org2) -> {
String orgCode1 = org1.getOrgCode();
......@@ -459,7 +741,7 @@ public class PubOrgServiceImpl extends ServiceImpl<PubOrgMapper, PubOrg> implem
//根据组织机构id查询出组织机构是否存在
@Override
public PubOrg PubOrgExist(Long id) {
PubOrg puborg = getById(id);
PubOrg puborg = getOne(new LambdaQueryWrapper<PubOrg>().eq(PubOrg::getOrgId, id));
if (ObjectUtil.isEmpty(puborg)) {
//抛出组织机构不存在异常
throw new ServiceException(PubOrgExceptionEnum.PUBORG_NOT_EXIST);
......
......@@ -10,6 +10,7 @@ import com.junmp.jyzb.api.bean.dto.StocktakeDto;
import com.junmp.jyzb.api.bean.query.StocktakeReq;
import com.junmp.jyzb.api.bean.req.UpdateStocktakeReq;
import com.junmp.jyzb.api.exception.enums.OrderExceptionEnum;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.entity.OrderNum;
import com.junmp.jyzb.entity.Stocktake;
import com.junmp.jyzb.service.OrderNumService;
......@@ -21,14 +22,18 @@ import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import com.junmp.v2.dict.entity.SysDict;
import com.junmp.v2.dict.entity.SysDictItem;
import com.junmp.v2.dict.service.SysDictItemService;
import com.junmp.v2.dict.service.SysDictService;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lxh专属坐骑
......@@ -48,6 +53,9 @@ public class StocktakeServiceImpl extends ServiceImpl<StocktakeMapper, Stocktake
@Resource
private IFlowInstanceService FlowInstanceService;
@Resource
private SysDictService sysDictService;
//盘库申请
@Override
@Transactional(rollbackFor = Exception.class)
......@@ -71,10 +79,15 @@ public class StocktakeServiceImpl extends ServiceImpl<StocktakeMapper, Stocktake
StartProcessInstanceDTO startProcessInstanceDTO=new StartProcessInstanceDTO();
startProcessInstanceDTO.setProcessDefinitionId(req.getProcessDefinitionId());
startProcessInstanceDTO.setOrderId(stocktake.getId());
startProcessInstanceDTO.setOrderType("workOrder");
startProcessInstanceDTO.setOrderType("stocktakeOrder");
startProcessInstanceDTO.setUserId(req.getUserId());
String ProcessInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
stocktake.setProcessId(ProcessInstanceId);
String assigns= FlowInstanceService.GetNextAssign(ProcessInstanceId);//这里需要手动更新审核人信息
stocktake.setCurrentAssign(assigns);
updateById(stocktake);
}
this.save(stocktake);
return stocktake.getId();
......@@ -82,7 +95,7 @@ public class StocktakeServiceImpl extends ServiceImpl<StocktakeMapper, Stocktake
//盘库单据查询
@Override
public PageResult<Stocktake> ShowStocktakeOrderPage(StocktakeReq req) {
public PageResult<StocktakeDto> ShowStocktakeOrderPage(StocktakeReq req) {
//(如果传其他不是数据库字段参数或者排序规则不是deac或者asc可能会出现错误)
if (ObjectUtil.isNotNull(req.getColumn()) && !req.getColumn().trim().isEmpty() &&
(req.getOrder().equalsIgnoreCase("desc") || req.getOrder().equalsIgnoreCase("asc"))
......@@ -97,8 +110,17 @@ public class StocktakeServiceImpl extends ServiceImpl<StocktakeMapper, Stocktake
.ge(ObjectUtil.isNotNull(req.getStartTime()),Stocktake::getCreateTime,req.getStartTime())
.le(ObjectUtil.isNotNull(req.getEndTime()),Stocktake::getCreateTime,req.getEndTime())
.last("order by "+req.getColumn()+" "+req.getOrder());
long size = list(eq).size();
Page<Stocktake> page = page(PageFactory.getDefaultPage(req.getPageNo(), req.getPageSize()), eq);
return PageResultFactory.createPageResult(page);
List<StocktakeDto> collect = page.getRecords().stream().map(stocktake -> {
StocktakeDto stocktakeDto = new StocktakeDto();
BeanPlusUtil.copyProperties(stocktake, stocktakeDto);
return stocktakeDto;
}).collect(Collectors.toList());
Page<StocktakeDto> page1 = new Page<>(req.getPageNo(), req.getPageSize());
page1.setTotal(size);
page1.setRecords(collect);
return PageResultFactory.createPageResult(page1);
}
......@@ -128,8 +150,12 @@ public class StocktakeServiceImpl extends ServiceImpl<StocktakeMapper, Stocktake
orderNum.setBussinessType(bussinessType);
orderNum.setOrgId(orgId);
//将业务类型转为中文简写
String itemValue = sysDictItemService.list(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getItemText, bussinessType)).get(0).getItemValue();
Long sysDictId = sysDictService.getOne(new LambdaQueryWrapper<SysDict>()
.eq(SysDict::getDictCode, "busstype_chinese")).getDictId();
String itemValue = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getItemText, bussinessType)
.eq(SysDictItem::getDictId,sysDictId)).getItemValue();
orderNum.setBussinessType(itemValue);
OrderNum one = orderNumService.getOne(new LambdaQueryWrapper<OrderNum>()
.eq(OrderNum::getOrgId, orderNum.getOrgId())
......
......@@ -7,8 +7,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.SupplierDto;
import com.junmp.jyzb.api.bean.query.QuerySupplierReq;
import com.junmp.jyzb.api.bean.req.UpdateSupplierReq;
import com.junmp.jyzb.api.exception.JYZBAppException;
import com.junmp.jyzb.api.exception.enums.EquipmentTypeExceptionEnum;
import com.junmp.jyzb.api.exception.enums.SupplierExceptionEnum;
import com.junmp.jyzb.entity.Supplier;
import com.junmp.jyzb.service.OrderMainService;
......
......@@ -18,15 +18,18 @@ public class TestServiceImpl implements TestService {
private RabbitTemplate rabbitTemplate;
@Resource
private RabbitAdmin rabbitAdmin;
@Override
public Boolean uploadResult(RabbitMqOrderReq req) {
public boolean test(RabbitMqOrderReq req) {
String exchangeName="OrderResultExchange";
Queue queue=new Queue( "orderResult",true,false,false);
Exchange exchange = new DirectExchange(exchangeName, true, false);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with("123456").noargs());
rabbitTemplate.convertAndSend(exchangeName,"123456", req);
//需要判断是入库单还是出库单,入库单传收物单位id,出库单传发物单位id
Queue queue=new Queue( "orderResult",true,false,false);
Exchange exchange = new DirectExchange(exchangeName, true, false);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareExchange(exchange);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with("123456").noargs());
rabbitTemplate.convertAndSend(exchangeName,"123456", req);
return true;
}
}
package com.junmp.jyzb.service.impl;
import com.junmp.jyzb.api.bean.dto.EqsSumDto;
import com.junmp.jyzb.api.bean.dto.InventorySumDto;
import com.junmp.jyzb.api.bean.dto.OrgDto;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgPriceDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto;
import com.junmp.jyzb.api.bean.dto.TjDto.TjOrgPriceDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.query.TjReq.TjOrgEqsReq;
import com.junmp.jyzb.api.bean.query.TjReq.TjOrgPriceReq;
import com.junmp.jyzb.entity.PubOrg;
import com.junmp.jyzb.mapper.*;
import com.junmp.jyzb.service.EquipmentSizeService;
import com.junmp.jyzb.service.PubOrgService;
import com.junmp.jyzb.service.TjService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class TjServiceImpl implements TjService {
@Resource
private PubOrgMapper pubOrgMapper;
@Resource
private PubOrgService pubOrgService;
@Resource
private InventorySummaryMapper inventorySummaryMapper;
@Resource
private EquipmentSizeService equipmentSizeService;
@Resource
private PriceSumSummaryMapper priceSumSummaryMapper;
//装备统计报表
@Override
public List<TjOrgEqsDto> showOrgEqsList(InventoryReq req) {
//我先查询出他组织机构id中的数据,然后放在list的第一个,然后将他的下一层全部查询出来以后,根据组织机构编号进行比较,最终输出一个有序的list返回
List<TjOrgEqsDto> list= inventorySummaryMapper.getByOrgId(req.getOrgId());
List<Long> collect1 = list.stream().map(tjOrgEqsDto -> {
Long orgId=tjOrgEqsDto.getOrgId();
return orgId;
}).collect(Collectors.toList());
//将组织机构下库存信息信息查询出来
List<EqsSumDto> childrenList=inventorySummaryMapper.getEqsByOrgId(collect1,req.getTypeId(),req.getSizeId());
Map<Long, List<EqsSumDto>> eqsSumDtoMap = new HashMap<>();
for (EqsSumDto eqsSumDto : childrenList) {
Long orgId = eqsSumDto.getOrgId();
if (eqsSumDtoMap.containsKey(orgId)) {
List<EqsSumDto> eqsSumDtoList = eqsSumDtoMap.get(orgId);
eqsSumDtoList.add(eqsSumDto);
} else {
List<EqsSumDto> eqsSumDtoList = new ArrayList<>();
eqsSumDtoList.add(eqsSumDto);
eqsSumDtoMap.put(orgId, eqsSumDtoList);
}
}
for (TjOrgEqsDto tjOrgEqsDto : list) {
Long orgId = tjOrgEqsDto.getOrgId();
if (eqsSumDtoMap.containsKey(orgId)) {
List<EqsSumDto> eqsSumDtoList = eqsSumDtoMap.get(orgId);
}
}
//对查询的组织机构进行有序排列
List<TjOrgEqsDto> collect = list.stream()
.sorted((o1, o2) -> {
String orgCode1 = o1.getOrgCode();
String orgCode2 = o2.getOrgCode();
// Check if either orgCode contains letters
boolean hasLetter1 = orgCode1.matches(".*[a-zA-Z].*");
boolean hasLetter2 = orgCode2.matches(".*[a-zA-Z].*");
if (hasLetter1 && hasLetter2) {
return orgCode1.compareTo(orgCode2); // Alphabetical order
} else if (hasLetter1) {
return 1; // o2 with letters should come first
} else if (hasLetter2) {
return -1; // o1 with letters should come first
} else {
return orgCode1.compareTo(orgCode2); // Numeric order
}
})
.collect(Collectors.toList());
return collect;
}
@Override
public List<TjOrgEqsDto> test(InventoryReq req) {
List<TjOrgEqsDto> tJOrgEqsDtoList = inventorySummaryMapper.test(req);
List<TjOrgEqsDto> dynamicViewList = inventorySummaryMapper.selectDynamicView();
return dynamicViewList;
}
@Override
public FinalTjOrgEqsDto TjOrgEqs(TjOrgEqsReq req) {
//我得先将typeid传递的最下层的装备idlist拿到
List<String> typeIdsList = equipmentSizeService.selectByTypeIds(req.getTypeIdsList());
List<String> sizeNameList = req.getSizeNameList();
//将前端传递的值进行处理并且执行存储过程
String sql="and (org_id="+req.getOrgId()+"or org_parent_id = "+req.getOrgId()+")";
if (typeIdsList.size()>0){
sql+="and type_id in (";
for (String typeId:typeIdsList) {
sql+=typeId+",";
}
sql = sql.substring(0, sql.length() - 1);
sql+=")";
}
if (sizeNameList.size()>0){
sql+="and size_name in (";
for (String sizeName:sizeNameList) {
sql+=sizeName+",";
}
sql = sql.substring(0, sql.length() - 1);
sql+=")";
}
System.out.println("sql = " + sql);
//执行存储过程
inventorySummaryMapper.useViewOrgeqs(sql);
//查询视图
List<TjOrgEqsDto> tjOrgEqsDtoList = inventorySummaryMapper.selectViewOrgeqsSum();
//查询出来的组织机构进行判断,如果该组织机构下的装备装备总数为0,那么将该组织机构从list中移除
tjOrgEqsDtoList.removeIf(tjOrgEqsDto -> tjOrgEqsDto.getTotalNumber() == 0);
//将组织机构进行排序后再进行返回
Comparator<TjOrgEqsDto> orgComparator = createOrgComparator();
Collections.sort(tjOrgEqsDtoList, orgComparator);
//在内存foreach还是去数据库再去查询一次
FinalTjOrgEqsDto finalTjOrgEqsDto=inventorySummaryMapper.getSumByViewOrgeqsSum();
finalTjOrgEqsDto.setTjOrgEqsDto(tjOrgEqsDtoList);
return finalTjOrgEqsDto;
}
//查看装备统计详情
@Override
public List<InventorySumDto> TjOrgEqsDetail(TjOrgEqsReq req) {
List<String> typeIdsList = equipmentSizeService.selectByTypeIds(req.getTypeIdsList());
List<String> sizeNameList = req.getSizeNameList();
List<InventorySumDto> returnList=inventorySummaryMapper.TjOrgEqsDetail(req.getOrgId(),typeIdsList,sizeNameList);
return returnList;
}
//财务统计报表
@Override
public FinalTjOrgPriceDto TjOrgPrice(TjOrgPriceReq req) {
//获取所有最下层的typeId
List<String> typeIdsList = equipmentSizeService.selectByTypeIds(req.getTypeIdsList());
List<String> sizeNameList = req.getSizeNameList();
//根据条件查询财务汇总表
List<TjOrgPriceDto> tjOrgPriceDtoList=priceSumSummaryMapper.TjOrgPrice(req.getOrgId(), req.getYear(), typeIdsList,sizeNameList);
//对组织机构进行排序
Comparator<TjOrgPriceDto> orgComparator = createOrgComparator();
Collections.sort(tjOrgPriceDtoList, orgComparator);
FinalTjOrgPriceDto finalTjOrgPriceDto = new FinalTjOrgPriceDto();
finalTjOrgPriceDto.setTjOrgPriceDto(tjOrgPriceDtoList);
//遍历查询到的信息并且得到汇总信息
Integer addNum=0;
Integer endNum=0;
Integer destoryNum=0;
BigDecimal startPrice=BigDecimal.ZERO;
BigDecimal endPrice=BigDecimal.ZERO;
for (TjOrgPriceDto tjOrgPriceDto:tjOrgPriceDtoList) {
addNum+=tjOrgPriceDto.getAddNum();
endNum+=tjOrgPriceDto.getEndNum();
destoryNum+= tjOrgPriceDto.getDestoryNum();
startPrice.add(tjOrgPriceDto.getStartPrice());
endPrice.add(tjOrgPriceDto.getEndPrice());
}
finalTjOrgPriceDto.setAddNum(addNum);
finalTjOrgPriceDto.setStartPrice(startPrice);
finalTjOrgPriceDto.setEndNum(endNum);
finalTjOrgPriceDto.setEndPrice(endPrice);
finalTjOrgPriceDto.setDestoryNum(destoryNum);
return finalTjOrgPriceDto;
}
//查看财务统计详情
@Override
public List<TjOrgPriceDto> TjOrgPriceDetail(TjOrgPriceReq req) {
List<String> typeIdsList = equipmentSizeService.selectByTypeIds(req.getTypeIdsList());
List<String> sizeNameList = req.getSizeNameList();
List<TjOrgPriceDto> tjOrgPriceDtoList=priceSumSummaryMapper.TjOrgPriceDetail(req.getOrgId(),req.getYear(),typeIdsList,sizeNameList);
return tjOrgPriceDtoList;
}
public <T> Comparator<T> createOrgComparator() {
return (org1,org2) ->{
try {
String orgCode1 = (String) org1.getClass().getMethod("getOrgCode").invoke(org1);
String orgCode2 = (String) org2.getClass().getMethod("getOrgCode").invoke(org2);
// 判断是否包含字母
boolean hasLetter1 = orgCode1.matches(".*[a-zA-Z]+.*");
boolean hasLetter2 = orgCode2.matches(".*[a-zA-Z]+.*");
// 如果其中一个包含字母,则将其放到排序的最后
if (hasLetter1 && !hasLetter2) {
return 1; // orgCode1包含字母,orgCode2不包含字母,orgCode1排在orgCode2后面
} else if (!hasLetter1 && hasLetter2) {
return -1; // orgCode1不包含字母,orgCode2包含字母,orgCode1排在orgCode2前面
}
// 如果两个orgCode都不含有字母,则按照每两位进行排序
String[] orgCodeArray1 = orgCode1.split("(?<=\\G..)");
String[] orgCodeArray2 = orgCode2.split("(?<=\\G..)");
// 从最后一组(即最后两位)开始比较数字大小
int index1 = orgCodeArray1.length - 1;
int index2 = orgCodeArray2.length - 1;
while (index1 >= 0 && index2 >= 0) {
String codeValue1 = orgCodeArray1[index1];
String codeValue2 = orgCodeArray2[index2];
// 判断是否可以转换为整数,如果不能,则说明包含字母,直接返回结果
try {
int intValue1 = Integer.parseInt(codeValue1, 10);
int intValue2 = Integer.parseInt(codeValue2, 10);
int compareResult = Integer.compare(intValue1, intValue2);
if (compareResult != 0) {
return compareResult;
}
} catch (NumberFormatException e) {
// orgCode包含字母,直接返回结果
return codeValue1.compareTo(codeValue2);
}
index1--;
index2--;
}
// 如果orgCode长度不同,那么较长的orgCode排在后面
return Integer.compare(orgCodeArray1.length, orgCodeArray2.length);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
};
}
}
......@@ -2,29 +2,15 @@ package com.junmp.jyzb.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.TriggerDto;
import com.junmp.jyzb.api.bean.query.ProductTagReq;
import com.junmp.jyzb.api.bean.query.QueryTriggerReq;
import com.junmp.jyzb.api.bean.req.UpdateSupplierReq;
import com.junmp.jyzb.api.bean.req.UpdateTriggerReq;
import com.junmp.jyzb.api.exception.enums.SupplierExceptionEnum;
import com.junmp.jyzb.api.exception.enums.TriggerExceptionEnum;
import com.junmp.jyzb.api.exception.enums.WarehouseAreaExceptionEnum;
import com.junmp.jyzb.entity.ProductTag;
import com.junmp.jyzb.entity.Supplier;
import com.junmp.jyzb.entity.Trigger;
import com.junmp.jyzb.entity.WarehouseArea;
import com.junmp.jyzb.mapper.TriggerMapper;
import com.junmp.jyzb.mapper.WarehouseAreaMapper;
import com.junmp.jyzb.service.TriggerService;
import com.junmp.jyzb.service.WarehouseAreaService;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.db.api.factory.PageResultFactory;
import com.junmp.v2.db.api.page.PageResult;
import org.springframework.stereotype.Service;
import java.util.List;
......
package com.junmp.jyzb.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.junmp.jyzb.api.bean.dto.WarehouseDto;
import com.junmp.jyzb.api.bean.query.ProductReq;
import com.junmp.jyzb.api.bean.query.WarehouseReq;
import com.junmp.jyzb.api.bean.req.UpdateWarehouseReq;
import com.junmp.jyzb.api.exception.enums.WarehouseExceptionEnum;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.api.exception.enums.CabinetExceptionEnum;
import com.junmp.jyzb.api.exception.enums.PubOrgExceptionEnum;
import com.junmp.jyzb.mapper.*;
import com.junmp.jyzb.service.PubOrgService;
import com.junmp.jyzb.service.WarehouseService;
......@@ -19,7 +16,6 @@ import com.junmp.jyzb.utils.*;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......
......@@ -37,7 +37,7 @@ public class ClearLogAction implements JobAction {
@Override
public void action() {
// //获取两月前的日期
//// ConfigExpander.getClearLogOffsetValue()
// ConfigExpander.getClearLogOffsetValue()
// Integer offset = 60;
// //Date maxTime = DateUtil.offsetMonth(new Date(), offset);
// Date maxTime = DateUtil.offsetDay(new Date(),offset);
......
package com.junmp.jyzb.task;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.api.util.GenCodeUtil;
import com.junmp.jyzb.entity.Company;
import com.junmp.jyzb.api.bean.req.InvExpireReq;
import com.junmp.jyzb.entity.Inventory;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.jyzb.mapper.ExpireMapper;
import com.junmp.jyzb.mapper.MsgMapper;
import com.junmp.jyzb.mapper.InventoryMapper;
import com.junmp.jyzb.service.InventoryService;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.db.api.factory.PageFactory;
import com.junmp.v2.dict.entity.SysDictItem;
import com.junmp.v2.dict.service.SysDictItemService;
import com.junmp.v2.job.api.JobAction;
import com.junmp.v2.message.api.MessageApi;
......@@ -25,16 +16,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @Author: Zhaojw
* @Description: 过期物资消息提醒
* @Description: 过期物资消息提醒(过质保期数量的消息提醒)
* @DateTime: 2023/7/14 16:25
* @Params:
* @Return
......@@ -48,6 +35,9 @@ public class InvExpireMsg implements JobAction {
private InventoryService inventoryService;
@Resource
private InventoryMapper inventoryMapper;
@Resource
private MessageApi messageApi;
@Resource
......@@ -60,64 +50,99 @@ public class InvExpireMsg implements JobAction {
int pageSize = 1000; // 每页记录数,可以根据需求调整
int currentPage = 1; // 当前页数
//所有待判断的物资
wrapper.eq( Inventory::getTermState, 0);
//所有待判断的物资(只获取仓库下的过质保期数量)
//除去销毁出库数
wrapper.eq(Inventory::getTermState, 0);
wrapper.ne(Inventory::getState,"destory");
//获取未超期的物资数量
long termCount= inventoryService.count(wrapper);
List<Inventory> list=new ArrayList<>();
if (termCount>0) {
// 分页查询
while ((currentPage - 1) * pageSize < termCount) {
List<Inventory> inventoryList = processPageData(currentPage, pageSize);
int startPageSize=(currentPage - 1) * pageSize ;
List<Inventory> inventoryList = processPageData(startPageSize, pageSize);
currentPage++;
list.addAll(inventoryList);
}
}
//超期物资查询出来之后,将超期物资进行消息推送提醒
//直接对list进行处理操作推送消息即可
for (Inventory inventory:list) {
MessageSendReq sendReq = new MessageSendReq();
sendReq.setSendUserId("1000");
sendReq.setReceiveUserIds("1000");
sendReq.setMsgTitle("物资过质保期");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictItemId, "1698969778501099522"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("仓库下的装备的物资已经过质保期");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
//需要对该所有超期物资进行分组
List<InvExpireReq> invExpireReqList=new ArrayList<>();
List<Long> orgIdsList=new ArrayList<>();
for (Inventory inventory : list) {
if (invExpireReqList.size()==0){
InvExpireReq invExpireReq = new InvExpireReq();
BeanPlusUtil.copyProperties(inventory,invExpireReq);
invExpireReq.setSumExpireNumber(1);
invExpireReqList.add(invExpireReq);
orgIdsList.add(inventory.getOrgId());
continue;
}
boolean found = false;
for (InvExpireReq groupedSum : invExpireReqList) {
if (groupedSum.getOrgId().equals(inventory.getOrgId()) && groupedSum.getLocationId().equals(inventory.getLocationId())
&& groupedSum.getSizeId().equals(inventory.getSizeId()) && groupedSum.getTypeId().equals(inventory.getTypeId())) {
groupedSum.setSumExpireNumber(groupedSum.getSumExpireNumber()+1);
found = true;
break;
}
}
if (!found) {
InvExpireReq invExpireReq = new InvExpireReq();
BeanPlusUtil.copyProperties(inventory,invExpireReq);
invExpireReq.setSumExpireNumber(1);
invExpireReqList.add(invExpireReq);
orgIdsList.add(inventory.getOrgId());
}
}
messageApi.queryCount(new MessageReq());
//根据分好组的数据查询出所有的需要被提醒的组织机构id,并且查询出组织机构下的仓管员信息,并且将消息进行推送
//再将汇总list进行遍历获取不重复的组织机构
Set<Long> uniqueOrgIDs = new HashSet<>(orgIdsList);
List<Long> uniqueOrgIDsList = new ArrayList<>(uniqueOrgIDs);
//查询组织机构下面的所有仓管员的useId
List<InvExpireReq> userIdsList=inventoryMapper.selectUserListByOrgs(uniqueOrgIDsList);
//获取到之后,将该条信息进行消息推送
for (InvExpireReq invExpireReq:invExpireReqList ) {
for (InvExpireReq userIds:userIdsList) {
if (invExpireReq.getOrgId()==userIds.getOrgId()){
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(userIds.getUserId());
sendReq.setMsgTitle("过质保期提醒");
sendReq.setBizType("过质保提醒");
sendReq.setMsgContent(invExpireReq.getLocationName()+"下的"+invExpireReq.getTypeName()+
invExpireReq.getSizeName()+"装备已经过质保期,数量为"+invExpireReq.getSumExpireNumber());
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
}
}
}
/*推送发送未读数量*/
List<Long> userIdList=new ArrayList<>();
userIdList.add(1000L);
for(Long userId :userIdList){
for(InvExpireReq userIds:userIdsList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(userId);
req1.setReceiveUserId(Long.parseLong(userIds.getUserId()));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(String.valueOf(userId),count1);
messageApi.pushMsgToUser(userIds.getUserId(),count1);
}
}
// 处理每页数据
private List<Inventory> processPageData(long pageSize, long currentPage)
private List<Inventory> processPageData(long startPageSize, long currentPage)
{
LocalDate localdate =LocalDate.now();
// 使用LambdaQueryWrapper构建查询条件
LambdaQueryWrapper<Inventory> wrapper = Wrappers.lambdaQuery();
wrapper.eq( Inventory::getTermState, 0);
//如果 生产日期 < 当前日期减去质保数,表示该装备已经超过质保期
wrapper.apply("production_date <= DATE_SUB({0}, INTERVAL warranty_period DAY)", localdate);
//获取过质保期的物资信息
List<Inventory> page= inventoryService.page(PageFactory.getDefaultPage(pageSize,currentPage),wrapper).getRecords();
page.forEach(o->o.setTermState(1));
inventoryService.saveOrUpdateBatch(page);
return page;
// Page<Inventory> page = inventoryService.page(PageFactory.getDefaultPage(), wrapper)
List<Object[]> searchItem =new ArrayList<>();
Object[] criteria=new Object[]{0,"destory",startPageSize,currentPage};
searchItem.add(criteria);
List<Inventory> list = inventoryMapper.searchExpireEqs(searchItem);
list.forEach(o->o.setTermState(1));
inventoryService.saveOrUpdateBatch(list);
return list;
}
......
......@@ -2,7 +2,9 @@ package com.junmp.jyzb.task;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.junmp.jyzb.api.bean.req.InvExpireReq;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.mapper.InventoryMapper;
import com.junmp.jyzb.service.OrderMainService;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.db.api.factory.PageFactory;
......@@ -16,9 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* @author lxh
......@@ -37,14 +37,17 @@ public class InvOverDueMsg implements JobAction {
private MessageApi messageApi;
@Resource
private InventoryMapper inventoryMapper;
@Resource
private SysDictItemService sysDictItemService;
@Override
public void action() {
//获取超期物资
//先查询出 出入库单据为用单的数据
//先查询出 出入库单据为用单的数据
LambdaQueryWrapper<OrderMain> wrapper = new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getBussinessType, "borrow")
.eq(OrderMain::getBussinessType, "use")
.eq(OrderMain::getOrderType,"out");
int pageSize =1000;
int currentPage=1;
......@@ -59,32 +62,42 @@ public class InvOverDueMsg implements JobAction {
}
}
//将消息进行推送
//我需要将orgId进行查询并去重
Set<Long> uniqueOrgIDs = new HashSet<>();
for (OrderMain orderMain:list) {
MessageSendReq sendReq = new MessageSendReq();
sendReq.setSendUserId("1000");
//接收用户id先写死,后面再修改
sendReq.setReceiveUserIds("1000");
sendReq.setMsgTitle("物资超期");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictItemId, "1698969778501099522"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("单据id为:"+orderMain.getId()+"的物资超期,请及时查看提醒");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
uniqueOrgIDs.add(orderMain.getStartOrgId());
}
messageApi.queryCount(new MessageReq());
List<Long> uniqueOrgIDsList = new ArrayList<>(uniqueOrgIDs);
//查询组织机构下面的所有仓管员的useId
List<InvExpireReq> userIdsList=inventoryMapper.selectUserListByOrgs(uniqueOrgIDsList);
//并且查询出该领用单的领用人,再将消息推送给领用人
for (OrderMain orderMain:list) {
for (InvExpireReq userIds:userIdsList) {
if (orderMain.getStartOrgId()==userIds.getOrgId()){
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(userIds.getUserId());
sendReq.setMsgTitle("物资超期提醒");
sendReq.setBizType("超期提醒");
//设置业务类型
// SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
// .eq(SysDictItem::getDictItemId, "over_due"));
// sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("单据id为:"+orderMain.getId()+"的领用单已超期,请及时查看处理");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
}
}
}
/*推送发送未读数量*/
//添加需要将消息推送的userid,先写死,可以查询数据库表动态设置userid;
List<Long> userIdList=new ArrayList<>();
userIdList.add(1000L);
for(Long userId :userIdList){
for(InvExpireReq userIds:userIdsList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(userId);
req1.setReceiveUserId(Long.parseLong(userIds.getUserId()));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(String.valueOf(userId),count1);
messageApi.pushMsgToUser(userIds.getUserId(),count1);
}
}
......@@ -94,9 +107,10 @@ public class InvOverDueMsg implements JobAction {
//获取对应的借用单据数据
Date currentDateTime = DateTimeUtil.getCurrentDateTime();
LambdaQueryWrapper<OrderMain> wrapper = new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getBussinessType, "borrow")
.eq(OrderMain::getBussinessType, "use")
.eq(OrderMain::getOrderType,"out")
.lt(OrderMain::getReturnDate,currentDateTime);
.lt(OrderMain::getReturnDate,currentDateTime)
.isNotNull(OrderMain::getReturnDate);
List<OrderMain> records = orderMainService.page(PageFactory.getDefaultPage(pageSize, currentPage),wrapper).getRecords();
return records;
}
......
......@@ -76,7 +76,7 @@ public class InvThresholdMsg implements JobAction {
sendReq.setMsgTitle("物资低于阈值");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictItemId, "1698969902300176385"));
.eq(SysDictItem::getItemText, "threshold"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent(inventorySummary.getLocationName()+"仓库下的"+inventorySummary.getTypeName()+"号型为"+inventorySummary.getSizeName()+"的物资低于阈值");
sendReq.setPriority("0");
......
package com.junmp.jyzb.task;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.v2.job.api.JobAction;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Slf4j
@Component
public class MonthEnd implements JobAction{
@Resource
public InventorySummaryService inventorySummaryService;
//月末执行以计算金额
@Override
public void action() {
inventorySummaryService.MonthEndSum();
}
}
package com.junmp.jyzb.task;
import com.junmp.jyzb.service.InventorySummaryService;
import com.junmp.v2.job.api.JobAction;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Slf4j
@Component
public class MonthStart implements JobAction{
@Resource
public InventorySummaryService inventorySummaryService;
//月初执行
@Override
public void action() {
inventorySummaryService.MonthStartSum();
}
}
......@@ -13,6 +13,7 @@ public class UpdateSummaryAction implements JobAction {
private InventoryService inventoryService;
public void action(){
// inventoryService.setInventoryMsg();
}
}
package com.junmp.jyzb.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class ElasticsearchUtil<T> {
private final RestHighLevelClient client;
public ElasticsearchUtil(RestHighLevelClient client) {
this.client = client;
}
public List<T> searchEntities(String typeName,String index, Integer pageNum, Integer pageSize, String keyword, Class<T> entityClass) throws IOException {
if (pageNum < 0) pageNum = 0;
SearchRequest request = new SearchRequest(typeName);
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.from(pageNum);
builder.size(pageSize);
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(index, keyword).operator(Operator.AND);
// MatchQueryBuilder matchQueryBuilder2 = QueryBuilders.matchQuery(index+".pinyin", keyword).operator(Operator.AND);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(matchQueryBuilder);
// boolQueryBuilder.should(matchQueryBuilder2);
if (typeName.equals("orgName"))
{
builder.postFilter(new TermQueryBuilder("delFlag", 1));
}
builder.query(boolQueryBuilder);
builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
request.source(builder);
SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);
List<T> entityList = new ArrayList<>();
for (SearchHit documentFields : searchResponse.getHits().getHits()) {
Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
T entity = fromMap(sourceAsMap, entityClass);
entityList.add(entity);
}
return entityList;
}
private T fromMap(Map<String, Object> sourceAsMap, Class<T> entityClass) {
ObjectMapper objectMapper = new ObjectMapper(); // 使用 Jackson 库进行转换
return objectMapper.convertValue(sourceAsMap, entityClass);
}
}
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"id":{
"type":"long"
},
"title": {
"type": "text"
},
"content": {
"type": "text"
},
"author":{
"type": "text"
},
"category":{
"type": "keyword"
},
"createTime": {
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss||epoch_millis"
},
"updateTime": {
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss||epoch_millis"
},
"status":{
"type":"integer"
},
"serialNum": {
"type": "keyword"
}
}
}
}
\ No newline at end of file
......@@ -51,4 +51,11 @@
AND t1.type_id= #{typeId}
</if>
</select>
<select id="searchByTypeIds" resultType="java.lang.String">
select DISTINCT name FROM base_equipment_size
where type_id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -44,6 +44,48 @@ UPDATE base_equipment_type p
JOIN cte ON p.id = cte.id
SET p.parent_ids = cte.parent_ids;
</update>
<select id="selectByItems" resultType="java.lang.String">
SELECT DISTINCT t4.id, t4.parent_id
FROM base_equipment_type t1
JOIN base_equipment_type t2 ON t1.id = t2.parent_id
JOIN base_equipment_type t3 ON t2.id = t3.parent_id
JOIN base_equipment_type t4 ON t3.id = t4.parent_id
WHERE
<if test="list1 != null and list1.size() > 0">
or t1.id IN
<foreach item="item" index="index" collection="list1" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="list1 != null and list1.size() > 0 and list2 != null and list2.size() > 0">
OR
</if>
<if test="list2 != null and list2.size() > 0">
t2.id IN
<foreach item="item" index="index" collection="list2" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="(list1 != null and list1.size() > 0 or list2 != null and list2.size() > 0) and list3 != null and list3.size() > 0">
OR
</if>
<if test="list3 != null and list3.size() > 0">
t3.id IN
<foreach item="item" index="index" collection="list3" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="(list1 != null and list1.size() > 0 or list2 != null and list2.size() > 0 or list3 != null and list3.size() > 0) and list4 != null and list4.size() > 0">
OR
</if>
<if test="list4 != null and list4.size() > 0">
t4.id IN
<foreach item="item" index="index" collection="list4" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -71,17 +71,13 @@
</select>
<delete id="deleteAllMsg">
delete from base_inventory_summary
</delete>
<insert id="SetCabinetInventory">
INSERT INTO base_inventory_summary (id,org_id_int,org_name,type_id, type_name,size_id,size_name,location_id,location_name,
INSERT INTO base_inventory_summary_type2 (id,org_id_int,org_name, org_code,type_id,type_name,size_id,size_name,location_id,location_name,
number,unit_price,price,stock_number, outbound_number,destruction_number,expire_number,
broken_number,use_number,near_broken_number,location_type,create_time,update_time)
select
MAX(t.id) as id,t.orgId,t.orgName,t.type_id,t.typeName,t.size_id,t.sizeName,t.locationId,t.locationName,sum(t.number) as number,
MAX(t.id) as id,t.orgId,t.orgName,t.orgCode,t.type_id,t.typeName,t.size_id,t.sizeName,t.locationId,t.locationName,sum(t.number) as number,
t.unitPrice,sum(t.price)as price,sum(t.stockNumber)as stockNumber,sum(t.outboundNumber)as outboundNumber,
sum(t.destructionNumber)as destructionNumber,sum(t.expireNumber)as expireNumber,sum(t.brokenNumber)as brokenNumber,
sum(t.useNumber)as useNumber,sum(t.nearBrokenNumber)as nearBrokenNumber,t.location_type,NOW(),NOW()
......@@ -90,6 +86,7 @@ delete from base_inventory_summary
UUID() as id,
bi.org_id_int as orgId,
po.org_name as orgName,
po.org_code as orgCode,
bcb.cabinet_id as locationId,
bc.name as locationName,
bi.type_id,
......@@ -122,11 +119,11 @@ delete from base_inventory_summary
</insert>
<insert id="SetWarehouseInventory">
INSERT INTO base_inventory_summary (id,org_id_int,org_name,location_id,location_name,type_id, type_name,size_id,
INSERT INTO base_inventory_summary_type2 (id,org_id_int,org_name,org_code,location_id,location_name,type_id, type_name,size_id,
size_name,number,unit_price,price, stock_number, outbound_number,destruction_number,
expire_number,broken_number,use_number,near_broken_number,location_type,create_time,update_time)
select
MAX(t.id) as id,t.orgId,t.orgName,t.locationId,MAX(t.locationName),t.type_id,t.typeName,t.size_id,t.sizeName,sum(t.number) as number,
MAX(t.id) as id,t.orgId,t.orgName,t.orgCode,t.locationId,MAX(t.locationName),t.type_id,t.typeName,t.size_id,t.sizeName,sum(t.number) as number,
t.unitPrice,sum(t.price)as price,sum(t.stockNumber)as stockNumber,sum(t.outboundNumber)as outboundNumber,
sum(t.destructionNumber)as destructionNumber,sum(t.destructionNumber) as expireNumber,sum(t.brokenNumber)as brokenNumber,sum(t.useNumber)as useNumber,
sum(t.nearBrokenNumber)as nearBrokenNumber,t.location_type,NOW(),NOW()
......@@ -135,6 +132,7 @@ delete from base_inventory_summary
UUID() as id,
bi.org_id_int as orgId,
po.org_name as orgName,
po.org_code as orgCode,
bi.location_id as locationId,
bw.name as locationName,
bi.type_id,
......@@ -462,7 +460,90 @@ delete from base_inventory_summary
GROUP BY type_id,size_id,bi.org_id_int,bi.area_id
ORDER BY type_id,size_id
</select>
<select id="checkEPCList" resultType="java.lang.String">
select epc FROM base_inventory where epc in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="selectEqsByItem" resultType="com.junmp.jyzb.entity.Inventory">
select * from base_inventory where
<foreach collection="list" item="item" separator="or">
(
location_state = 'in' AND state = 'normal' AND org_id_int = ${item[0]} AND location_id = '${item[1]}' AND type_id = ${item[3]} AND size_id = '${item[2]}' AND unit_price = ${item[4]}
)
</foreach>
</select>
<select id="GetInvInfoByEpc" resultType="com.junmp.jyzb.api.bean.dto.InventoryDto">
SELECT bi.*, po.org_name, es.name, et.name, bs.name, bw.name
FROM base_inventory bi
JOIN pub_org po ON po.org_id = bi.org_id_int
JOIN base_equipment_size es ON es.id = bi.size_id
JOIN base_equipment_type et ON et.id = bi.type_id
JOIN base_supplier bs ON bs.id = bi.supplier_id
JOIN base_warehouse bw ON bw.id = bi.location_id
WHERE bi.location_type = 0 AND epc IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
UNION ALL
SELECT bi.*, po.org_name, es.name, et.name, bs.name, bc.name
FROM base_inventory bi
JOIN pub_org po ON po.org_id = bi.org_id_int
JOIN base_equipment_size es ON es.id = bi.size_id
JOIN base_equipment_type et ON et.id = bi.type_id
JOIN base_supplier bs ON bs.id = bi.supplier_id
JOIN base_cabinet_box bcb ON bcb.id = bi.location_id
JOIN base_cabinet bc ON bc.id = bcb.cabinet_id
WHERE bi.location_type = 1 AND epc IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="selectUserListByOrgs" resultType="com.junmp.jyzb.api.bean.req.InvExpireReq">
select suo.user_id,suo.org_id FROM sys_user_org suo
JOIN sys_user_role sur ON suo.user_id=sur.user_id
JOIN sys_role sr ON sur.role_id=sr.role_id and sr.role_id="1528003832557232130"
where suo.org_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="searchExpireEqs" resultType="com.junmp.jyzb.entity.Inventory">
SELECT
bi.size_id AS size_id,
bes.name AS size_name,
bi.type_id,
bet.name AS type_name,
bi.org_id_int AS org_id,
COALESCE(bcb.cabinet_id, bw.id) AS location_id,
COALESCE(MAX(bc.name), MAX(bw.name)) AS location_name
FROM
base_inventory bi
JOIN base_equipment_size bes ON bi.size_id = bes.id
JOIN base_equipment_type bet ON bi.type_id = bet.id
LEFT JOIN base_cabinet_box bcb ON bi.location_id = bcb.id AND bi.location_type = 1
LEFT JOIN base_cabinet bc ON bcb.cabinet_id = bc.id
LEFT JOIN base_warehouse bw ON bi.location_id = bw.id AND bi.location_type = 0
WHERE
bi.warranty_period != 0
AND DATE_ADD(bi.production_date, INTERVAL bi.warranty_period MONTH) > NOW()
<foreach collection="list" item="item" open="(" separator="," close=")">
AND bi.term_state = ${item[0]}
AND bi.state != '${item[1]}'
</foreach>
GROUP BY
bi.size_id,
bes.name,
bi.type_id,
bet.name,
bi.org_id_int,
COALESCE(bcb.cabinet_id, bw.id)
<foreach collection="list" item="item" open="(" separator="," close=")">
limit ${item[2]},${item[3]}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -74,6 +74,21 @@
delete from base_inventory_summary where locationId = #{cabinetId}
</delete>
<update parameterType="java.lang.String" id="id">
UPDATE vie_price_sum_summary
SET
add_price = CASE
WHEN add_price IS NULL THEN start_price - end_price
ELSE add_price
END,
add_num = CASE
WHEN add_num IS NULL THEN start_num - end_num
ELSE add_num
END
WHERE add_price IS NULL OR add_num IS NULL;
</update>
<insert id="getSumByCabinet">
INSERT INTO base_inventory_summary (id,org_id_int,org_name,type_id, type_name,size_id,size_name,location_id,location_name,
number,unit_price,price,stock_number, outbound_number,destruction_number,expire_number,
......@@ -256,6 +271,66 @@
sum(near_broken_number)as nearBrokenNumber,sum(use_number)as useNumber
FROM base_inventory_summary where org_id_int=#{req.orgId}
</select>
<select id="selectByEqs" resultType="com.junmp.jyzb.entity.InventorySummary">
SELECT sum(stock_number) as stockNumber,size_id as sizeId,type_id as typeId,MAX(size_name) as sizeName,
MAX(type_name) as typeName,org_id_int as orgId,MAX(org_name) as orgName
FROM base_inventory_summary where org_id_int=#{orgId}
GROUP BY size_id,type_id
HAVING stockNumber>0
</select>
<select id="selectSumByItems" resultType="com.junmp.jyzb.entity.InventorySummary">
select * from base_inventory_summary where
<foreach collection="list" item="item" separator="or">
(
org_id_int = ${item[0]} AND location_id = '${item[1]}' AND type_id = ${item[2]} AND size_id = '${item[3]}' AND unit_price = ${item[4]}
)
</foreach>
</select>
<select id="getByOrgId" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto"
parameterType="java.lang.Long">
select * from view_orgeqs_sum where org_id=#{orgId} or parent_id=#{orgId}
</select>
<select id="getEqsByOrgId" resultType="com.junmp.jyzb.api.bean.dto.EqsSumDto">
SELECT type_id,max(type_name) as type_name,org_id_int as org_id,max(org_name) as org_name,
<if test="sizeId !=null and sizeId != ''">
size_id,max(size_name) as size_name,
</if>
(sum((case when (`its`.`location_type` = 0) then `its`.`stock_number` else 0 end))+sum((case when (`its`.`location_type` = 0) then `its`.`outbound_number` else 0 end))+sum((case when (`its`.`location_type` = 0) then `its`.`destruction_number` else 0 end))) as number,
sum((case when (`its`.`location_type` = 0) then `its`.`stock_number` else 0 end)) AS `ck_stock_number`,
sum((case when (`its`.`location_type` = 0) then `its`.`outbound_number` else 0 end)) AS `ck_outbound_number`,
sum((case when (`its`.`location_type` = 0) then `its`.`destruction_number` else 0 end)) AS `destruction_number`,
sum((case when (`its`.`location_type` = 1) then `its`.`stock_number` else 0 end)) AS `djg_stock_number`,
sum((case when (`its`.`location_type` = 1) then `its`.`outbound_number` else 0 end)) AS `djg_outbound_number`
FROM `base_inventory_summary_type2` its
where org_id_int IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="typeId !=null and typeId != ''">
and type_id=#{typeId}
</if>
<if test="sizeId !=null and sizeId != ''">
and size_id=#{sizeId}
</if>
GROUP BY org_id_int,type_id
<if test="sizeId !=null and sizeId != ''">
,size_id
</if>
</select>
<select id="test" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto" statementType="CALLABLE">
{CALL view_sum_total(#{req.typeId, mode=IN, jdbcType=VARCHAR})}
</select>
<select id="selectDynamicView" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto">
SELECT * FROM dynamic_view
</select>
<select id="selectViewOrgeqsSum" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto">
select * from view_orgeqs_sum
</select>
<delete id="deleteByWarehouse"
parameterType="com.junmp.jyzb.api.bean.dto.WarehouseDto">
delete from base_inventory_summary
......@@ -312,6 +387,63 @@
GROUP BY type_id,size_id,bi.org_id_int,location_id,bi.price) as t
GROUP BY t.locationId,t.type_id,t.size_id,t.orgId,t.unitPrice
</insert>
<insert id="insertToSummary" statementType="CALLABLE">
{call InsertInventorySummary(
#{summaryTableName, mode=IN},
#{sourceTableName, mode=IN},
#{warrantyThreshold, mode=IN, jdbcType=INTEGER}
)}
</insert>
<insert id="useViewOrgeqs" statementType="CALLABLE">
{CALL view_orgeqs(#{sql,mode=IN})}
</insert>
<select id="getSumByViewOrgeqsSum" resultType="com.junmp.jyzb.api.bean.dto.TjDto.FinalTjOrgEqsDto">
select sum(total_number) as total_number,
sum(ck_stock_number) as ck_stock_number,
sum(ck_outbound_number) as ck_outbound_number,
sum(destruction_number) as destruction_number,
sum(djg_stock_number) as djg_stock_number,
sum(djg_outbound_number) as djg_outbound_number
FROM view_orgeqs_sum
</select>
<select id="TjOrgEqsDetail" resultType="com.junmp.jyzb.api.bean.dto.InventorySumDto">
SELECT
type_name,
size_name,
type_id,
(
sum( CASE WHEN `base_inventory_summary`.`location_type` = 0 THEN `base_inventory_summary`.`stock_number` ELSE 0 END ) +
sum( CASE WHEN `base_inventory_summary`.`location_type` = 0 THEN `base_inventory_summary`.`outbound_number` ELSE 0 END ) +
sum( CASE WHEN `base_inventory_summary`.`location_type` = 0 THEN `base_inventory_summary`.`destruction_number` ELSE 0 END )
) AS total_number,
sum( CASE WHEN ( `base_inventory_summary`.`location_type` = 0 ) THEN `base_inventory_summary`.`stock_number` ELSE 0 END ) AS `ck_stock_number`,
sum( CASE WHEN ( `base_inventory_summary`.`location_type` = 0 ) THEN `base_inventory_summary`.`outbound_number` ELSE 0 END ) AS `ck_outbound_number`,
sum( CASE WHEN ( `base_inventory_summary`.`location_type` = 0 ) THEN `base_inventory_summary`.`destruction_number` ELSE 0 END ) AS `destruction_number`,
sum( CASE WHEN ( `base_inventory_summary`.`location_type` = 1 ) THEN `base_inventory_summary`.`stock_number` ELSE 0 END ) AS `djg_stock_number`,
sum( CASE WHEN ( `base_inventory_summary`.`location_type` = 1 ) THEN `base_inventory_summary`.`outbound_number` ELSE 0 END ) AS `djg_outbound_number`
FROM
base_inventory_summary
WHERE
org_id_int = #{orgId}
<if test="typeIdsList!=null and !typeIdsList.size() > 0">
AND type_id IN
<foreach collection="typeIdsList " item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="sizeNameList!=null and !sizeNameList.size() > 0">
AND
<foreach collection="sizeNameList " item="item" open="(" separator="or" close=")">
size_name like CONCAT('%', #{item}, '%')
</foreach>
</if>
GROUP BY
type_id,
type_name,
size_name
ORDER BY type_id
</select>
</mapper>
\ No newline at end of file
......@@ -7,7 +7,6 @@
<resultMap id="BaseResultMap" type="com.junmp.jyzb.entity.LogDetail">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="inventoryId" column="inventory_id" jdbcType="VARCHAR"/>
<result property="orderMainId" column="order_main_id" jdbcType="VARCHAR"/>
<result property="bussinessType" column="bussiness_type" jdbcType="VARCHAR"/>
<result property="epc" column="epc" jdbcType="VARCHAR"/>
<result property="typeId" column="type_id" jdbcType="VARCHAR"/>
......@@ -24,7 +23,6 @@
<result property="updateUser" column="update_user" jdbcType="VARCHAR"/>
<result property="createUser" column="create_user" jdbcType="VARCHAR"/>
<result property="picture" column="picture" jdbcType="VARCHAR"/>
<result property="deviceType" column="device_type" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
......@@ -36,4 +34,12 @@
update_time,update_user,create_user,
picture,device_type
</sql>
<select id="GetDetailByLogSumId" resultType="com.junmp.jyzb.api.bean.dto.LogDetailDto">
SELECT ld.*,ls.location_name FROM base_log_detail ld
join base_log_summary ls on ld.summary_id=ls.id and ld.summary_id=#{summaryId}
</select>
<select id="ShowInOutRecordsByOrder" resultType="com.junmp.jyzb.api.bean.dto.LogDetailDto">
SELECT ls.location_name,ls.order_main_id,ls.out_in_state,ld.* FROM base_log_summary ls
join base_log_detail ld on ld.summary_id=ls.id and ls.order_main_id=#{orderMainId}
</select>
</mapper>
......@@ -4,6 +4,8 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.junmp.jyzb.mapper.LogSummaryMapper">
<resultMap id="BaseResultMap" type="com.junmp.jyzb.entity.LogSummary">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="orgId" column="org_id" jdbcType="BIGINT"/>
......@@ -11,8 +13,6 @@
<result property="orderMainId" column="order_main_id" jdbcType="VARCHAR"/>
<result property="device" column="device" jdbcType="VARCHAR"/>
<result property="deviceType" column="device_type" jdbcType="INTEGER"/>
<result property="locationId" column="location_id" jdbcType="VARCHAR"/>
<result property="locationName" column="location_name" jdbcType="VARCHAR"/>
<result property="locationType" column="location_type" jdbcType="INTEGER"/>
<result property="useTime" column="use_time" jdbcType="TIMESTAMP"/>
<result property="bussinessType" column="bussiness_type" jdbcType="VARCHAR"/>
......@@ -24,7 +24,6 @@
<result property="updateUser" column="update_user" jdbcType="VARCHAR"/>
<result property="createUser" column="create_user" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,org_id,org_name,
order_main_id,device,device_type,
......@@ -33,37 +32,6 @@
picture,equipment_List,create_time,
update_time,update_user,create_user
</sql>
<select id="ShowInOutRecordsByOrder" resultType="com.junmp.jyzb.entity.LogSummary">
select * from base_log_summary ls
where ls.org_id = #{req.orgId} and ls.order_main_id=#{req.orderMainId}
</select>
<select id="ShowInOutRecordsByWarehouse" resultType="com.junmp.jyzb.entity.LogSummary">
select * from base_log_summary ls
left join base_log_detail ld on ls.id = ld.summary_id
where ls.org_id = #{req.orgId} and ls.location_type=0
<if test="req.bussinessType != null and req.bussinessType !=''">
and ls.bussiness_type=#{req.bussinessType}
</if>
<if test="req.locationId != null and req.locationId !=''">
and ls.location_id=#{locationId}
</if>
<if test="req.typeId != null and req.typeId !=''">
and ld.type_id=#{req.typeId}
</if>
</select>
<select id="ShowInOutRecordsByCabinet" resultType="com.junmp.jyzb.entity.LogSummary">
select * from base_log_summary ls
left join base_log_detail ld on ls.id = ld.summary_id
where ls.org_id = #{req.orgId} and ls.location_type=1
<if test="req.locationId != null and req.locationId !=''">
and ls.location_id=#{req.locationId}
<if test="req.cabinetboxId != null and req.cabinetboxId !=''">
and ld.cabinetbox_id in (select id from base_cabinet_box cb where cb.cabinet_id=#{req.locationId})
</if>
</if>
</select>
</mapper>
<?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.junmp.jyzb.mapper.PoliceFaceMapper">
<resultMap id="BaseResultMap" type="com.junmp.jyzb.entity.PoliceFace">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="policeId" column="police_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="faceInfo" column="face_info" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,police_id,name,
face_info,create_time,update_time
</sql>
</mapper>
<?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.junmp.jyzb.mapper.PriceSumSummaryMapper">
<!-- <update parameterType="java.lang.String" id="PriceNumCacu">-->
<!-- UPDATE vie_price_sum_summary-->
<!-- SET-->
<!-- add_price = CASE-->
<!-- WHEN add_price IS NULL THEN start_price - end_price-->
<!-- ELSE add_price-->
<!-- END,-->
<!-- add_num = CASE-->
<!-- WHEN add_num IS NULL THEN start_num - end_num-->
<!-- ELSE add_num-->
<!-- END-->
<!-- WHERE add_price IS NULL OR add_num IS NULL;-->
<!-- </update>-->
<select id="MonthStart" statementType="CALLABLE" >
{call UpdateStartSummary()}
</select>
<select id="MonthEnd" statementType="CALLABLE" >
{call UpdateEndSummary()}
</select>
<select id="MonthDifference" statementType="CALLABLE" >
{call UpdatePriceSummary()}
</select>
<select id="TjOrgPrice" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgPriceDto">
select org_id_int as org_id,org_code,org_name,
sum(start_num) as start_num,sum(start_price) as start_price,
sum(end_num) as end_num,sum(end_price) as end_price,
sum(add_num) as add_num,sum(destory_num) asdestory_num
FROM vie_price_sum_summary
where `year`= #{year} and (org_id_int=#{orgId} or parent_id=#{orgId})
<if test="typeIdsList!=null and typeIdsList.size() > 0">
and type_id in
<foreach collection="typeIdsList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="sizeNameList!=null and !sizeNameList.size() > 0">
AND
<foreach collection="sizeNameList " item="item" open="(" separator="or" close=")">
size_name like CONCAT('%', #{item}, '%')
</foreach>
</if>
GROUP BY org_id,org_code,org_name
</select>
<select id="TjOrgPriceDetail" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgPriceDto">
select org_id_int as org_id,org_code,org_name,type_id,type_name,
sum(start_num) as start_num,sum(start_price) as start_price,
sum(end_num) as end_num,sum(end_price) as end_price,
sum(add_num) as add_num,sum(destory_num) asdestory_num
FROM vie_price_sum_summary
where `year`= #{year} and org_id_int=#{orgId}
<if test="typeIdsList!=null and typeIdsList.size() > 0">
and type_id in
<foreach collection="typeIdsList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="sizeNameList!=null and !sizeNameList.size() > 0">
AND
<foreach collection="sizeNameList " item="item" open="(" separator="or" close=")">
size_name like CONCAT('%', #{item}, '%')
</foreach>
</if>
GROUP BY org_id,org_code,org_name,type_id,type_name
ORDER BY type_id
</select>
</mapper>
\ No newline at end of file
<?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.junmp.jyzb.mapper.ProductBatchMapper">
<select id="getMaxSn" resultType="java.lang.Integer">
select ifnull(max(s1.sn), 0) as sn
from biz_product_batch s1
</select>
<select id="getBatchProcess" resultType="com.junmp.jyzb.api.bean.dto.ProductBatchDto">
select *
from v_product_batch_process
where batchId = #{batchId}
</select>
<select id="getBatchPage" resultType="com.junmp.jyzb.api.bean.dto.ProductBatchDto">
select * from v_product_batch_process s1 where 1=1
<if test="null != batch">
<if test="null != batch.batchId">
and s1.batchId = #{batch.batchId}
</if>
<if test="null != batch.productId">
and s1.productId = #{batch.productId}
</if>
<if test="null != batch.specId">
and s1.specId = #{batch.specId}
</if>
<if test="null != batch.batchNo">
and s1.batchNo like concat('%',#{batch.batchNo},'%')
</if>
</if>
handover by s1.createTime desc
</select>
<select id="getBatchProcessPage" resultType="com.junmp.jyzb.api.bean.dto.ProductProcessDto">
select * from v_product_batch_check s1 where 1=1
<if test="null != batch">
<if test="null != batch.batchId">
and s1.batchId = #{batch.batchId}
</if>
<if test="null != batch.productId">
and s1.productId = #{batch.productId}
</if>
<if test="null != batch.specId">
and s1.specId = #{batch.specId}
</if>
<if test="null != batch.batchNo">
and s1.batchNo like concat('%',#{batch.batchNo},'%')
</if>
</if>
handover by s1.createTime desc
</select>
</mapper>
<?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.junmp.jyzb.mapper.ProductMapper">
<select id="getMaxSn" resultType="java.lang.Integer">
select ifnull(max(s1.sn), 0) as sn
from biz_product s1
</select>
</mapper>
<?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.junmp.jyzb.mapper.ProductSkuMapper">
<!-- 获取当前产品最大序号 -->
<select id="getMaxSn" resultType="java.lang.Integer">
select ifnull(max(s1.sn), 0) as sn
from biz_product_sku s1
where s1.product_id = #{productId}
</select>
<!-- 删除产品对应的号型 -->
<delete id="delByProductId">
delete
from biz_product_sku
where product_id = #{productId}
</delete>
</mapper>
<?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.junmp.jyzb.mapper.ProductTagMapper">
<!-- limit 0,1-->
<select id="getInitTagInfo" resultType="com.junmp.jyzb.api.bean.dto.SimpleTagDto">
select s1.tag_id as tagId,s1.product_code as productCode
from biz_product_tag s1
where s1.batch_id = #{batchId}
and s1.has_init = 0
handover by s1.serial_id asc limit 0,1
</select>
<select id="getTagInfoByTagId" resultType="com.junmp.jyzb.api.bean.dto.ProductTagDto">
SELECT s1.tagId,
s1.productCode,
s1.produceTime,
s1.productName,
s1.spec,
s1.material,
s1.weight,
s1.companyName,
s1.password,
s1.ciphertext,
s1.adInfo
FROM v_product_tag_info s1
WHERE s1.tagId = #{tagId}
</select>
</mapper>
......@@ -96,7 +96,18 @@ SET p.org_parent_ids = cte.org_parent_ids;
<select id="getParentOrgName" resultType="String">
select d_name from pub_org o where org_id =#{orgParentId}
</select>
<select id="getDownOrg" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto">
SELECT org_id as orgId, org_name as orgName,org_code as orgCode
FROM pub_org
WHERE org_parent_id = #{orgId} and del_flag=1
AND level_flag > (SELECT level_flag FROM pub_org WHERE org_id = #{orgId}) + 1;
</select>
<select id="getLowOrg" resultType="com.junmp.jyzb.api.bean.dto.TjDto.TjOrgEqsDto">
SELECT org_id as orgId, org_name as orgName,org_code as orgCode
FROM pub_org
WHERE org_parent_id =#{orgId} and del_flag=1
AND level_flag = (SELECT level_flag FROM pub_org WHERE org_id = #{orgId}) + 1;
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>junmp-jyzb-app</artifactId>
<groupId>com.junmp.jyzb</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jyzb-boot</artifactId>
<version>1.0.0</version>
<name>jyzb-boot</name>
<packaging>war</packaging>
<<<<<<< HEAD
=======
>>>>>>> develop
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>log-biz-manage</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>v2-security-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>v2-config-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>v2-db-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>v2-log-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>swagger2-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>v2-redis-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>file-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>system-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>auth-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>validator-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.v2</groupId>
<artifactId>job-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-biz</artifactId>
</dependency>
<dependency>
<groupId>com.junmp.jyzb</groupId>
<artifactId>jyzb-process</artifactId>
</dependency>
<!--MQTT-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
</dependencies>
<build>
<finalName>jyzb-boot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 如果没有该项配置,则devtools不会起作用,即应用不会restart -->
<mainClass>com.junmp.jyzb.boot.JyzbBootApplication</mainClass>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
......@@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
......@@ -28,6 +29,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableScheduling
@EnableTransactionManagement
@EnableSwagger2
@EnableElasticsearchRepositories(basePackages = "com.junmp.jyzb.Repository")
@SpringBootApplication(scanBasePackages = {"com.junmp"}, exclude = {FlywayAutoConfiguration.class,
JpDataSourceAutoConfiguration.class})
public class JyzbBootApplication extends SpringBootServletInitializer {
......
......@@ -53,8 +53,8 @@ spring:
enabled: false
eventregistry:
enabled: false
#mybatis plus 设置
mybatis-plus:
configuration:
cache-enabled: true
......
scanner:
open: false
# 配置第三方请求
junmp:
swagger:
base-package: com.junmp
id:
worker-id: 1
data-center-id: 1
epoch: 1656036996843
max: 9999
log:
type: db
ds: true #是否多数据源
knife4j:
enable: true
setting:
enableDebug: false
# basic:
# enable: true
# username: ning
# password: ning
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
<<<<<<< HEAD
url: jdbc:mysql://192.168.3.128:3306/db_jyzb?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
=======
url: jdbc:mysql://192.168.3.128/db_jyzb?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true
>>>>>>> ce2cec735d8197f0f6b77fb7df738d825354bd3c
username: junmp
password: 123456
redis:
#host: 192.168.3.188
host: 192.168.3.188
port: 6379
database: 1
password:
flowable:
dmn:
enabled: false
cmmn:
enabled: false
idm:
enabled: false
async-history-executor-activate: false
async-executor-activate: false
check-process-definitions: false
content:
enabled: false
app:
enabled: false
eventregistry:
enabled: false
#mybatis plus 设置
mybatis-plus:
configuration:
cache-enabled: true
lazy-loading-enabled: true
multiple-result-sets-enabled: true
map-underscore-to-camel-case: true #开启驼峰命名
global-config:
banner: false
enable-sql-runner: true
db-config:
id-type: assign_id
table-underline: true
# mapper-locations: classpath*:com/junmp/junmpProcess/mapper/**/xml/*Mapper.xml
mapper-locations: classpath*:/mapper/**/*Mapper.xml
flowable:
dmn:
enabled: false
cmmn:
enabled: false
idm:
enabled: false
async-history-executor-activate: false
async-executor-activate: false
check-process-definitions: false
content:
enabled: false
app:
enabled: false
eventregistry:
enabled: false
com:
mqtt:
url: tcp://broker.emqx.io:1883 #这里要写 tcp:// 不能是 mqtt,不然不是合法的 schema,源码中有
clientId: mqtt_test_spring
topics: iot/#,home/#
username: admin
password: public
timeout: 10
keepalive: 20
\ No newline at end of file
#server:
# port: 10030
# 应用服务器
server:
tomcat:
uri-encoding: UTF-8 #tomcat编码
port: 10030 #tomcat端口
spring:
elasticsearch:
rest:
uris: http://192.168.3.188:9200
main:
#bea同名类进行注册时,准许覆盖注册
allow-bean-definition-overriding: true
......@@ -35,6 +40,8 @@ spring:
serialization:
indent_output: false
property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategy$PascalCaseStrategy
flyway:
enable: ture
locations: classpath:db/migration
......
......@@ -15,6 +15,13 @@ public interface CommonConstants {
String START_USER_INFO="startUser";
String ORDER_ID="orderId";
String ORDER_TYPE="orderType";
String START_ORG_NAME="startOrgName";//发物单位
String END_ORG_NAME="endOrgName";//收物单位
String INVLIST="invList";//装备列表拼接
String BUSSINESS_TYPE="bussinessType"; //单据业务类型
String OUT_IN_STATE="outInState";//出入库单据状态(出库还是入库)
String BUSINESS_STATUS_1="正在处理"; //正在处理
String BUSINESS_STATUS_2="撤销";//撤销
String BUSINESS_STATUS_3="驳回";//驳回
......
......@@ -138,7 +138,7 @@ public class BpmnController {
return WorkProcessService.agree(handleDataDTO);
}
@ApiOperation("查看我的已办")
@PostMapping("doneList")
@PostMapping("")
public ApiRes<PageResult<TaskVO>> doneList(@RequestBody TaskDTO taskDTO){
return ApiRes.success(WorkProcessService.doneList(taskDTO));
}
......
......@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import lombok.Data;
import com.junmp.junmpProcess.dto.json.UserInfo;
import java.util.Date;
/**
* @author LoveMyOrange
* @create 2022-10-14 23:47
......@@ -12,4 +14,17 @@ import com.junmp.junmpProcess.dto.json.UserInfo;
@ApiModel("我发起流程 需要返回给前端的DTO")
public class ApplyDTO extends PageDTO {
private UserInfo currentUserInfo;
//流程名称
private String processDefinitionName;
//开始时间
private Date startTime;
//结束时间
private Date endTime;
//发物单位
private String startOrgName;
private String endOrgName;
//装备名称
private String typeName;
//审核状态
private String businessStatus;
}
......@@ -18,7 +18,20 @@ public class StartProcessInstanceDTO {
private String processDefinitionId;
private JSONObject formData;
private String orderId;
//单据类型(入库单,出库单,业务单)
private String orderType;
private String userId;
private String triggerId;
//发物单位
private String startOrgName;
//收物单位
private String endOrgName;
//装备列表拼接
private String invList;
//单据业务类型
private String bussinessType;
//出入库单据状态(出库还是入库)
private String outInState;
}
......@@ -2,9 +2,12 @@ package com.junmp.junmpProcess.dto;
import com.junmp.junmpProcess.dto.json.JunmpUserInfo;
import io.swagger.annotations.ApiModel;
import liquibase.pro.packaged.S;
import lombok.Data;
import com.junmp.junmpProcess.dto.json.UserInfo;
import java.util.Date;
/**
* @author LoveMyOrange
* @create 2022-10-14 23:47
......@@ -13,4 +16,18 @@ import com.junmp.junmpProcess.dto.json.UserInfo;
@ApiModel("待办 需要返回给前端的VO")
public class TaskDTO extends PageDTO {
private JunmpUserInfo currentUserInfo;
//流程名称
private String processDefinitionName;
//开始时间
private Date startTime;
//结束时间
private Date endTime;
//发物单位
private String startOrgName;
//发物单位
private String endOrgName;
//装备名称
private String typeName;
//审核状态
private String businessStatus;
}
package com.junmp.junmpProcess.mapper;
import com.junmp.junmpProcess.dto.UserListDTO;
import io.lettuce.core.dynamic.annotation.Param;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
......@@ -26,4 +27,6 @@ public interface OrgUserMapper {
public List<UserListDTO> QueryUserWithParentOrg(String userId);
public UserListDTO QueryUser(String userId);
public Boolean UpdateOrder(@Param("orderType") String orderType,@Param("process_id") String processId, @Param("current_assign") String currentAssign);
}
......@@ -731,7 +731,7 @@ public class WorkProcessServiceImpl extends ServiceImpl<ProcessTemplatesMapper,
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName("流程开始");
taskDetailVO.setName("发起人");
taskDetailVO.setCreateTime(historicActivityInstance.getStartTime());
taskDetailVO.setEndTime(historicActivityInstance.getEndTime());
// List<Comment> comments = commentsMap.get(historicActivityInstance.getTaskId());
......
......@@ -39,6 +39,13 @@ public interface IFlowInstanceService {
String startProcessInstanceById(StartProcessInstanceDTO processInstanceDto);
/**
* 获取下一审核人信息
*
* @return
*/
String GetNextAssign(String processInstanceId);
/**
* 通过流程实例id獲取表單ID
*
* @return
......
package com.junmp.junmpProcess.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.factory.FlowServiceFactory;
import com.junmp.junmpProcess.service.IFlowInstanceService;
import com.junmp.jyzb.api.bean.req.UpdateOrderDetailReq;
import com.junmp.jyzb.api.bean.req.UpdateOrderReq;
import com.junmp.jyzb.api.exception.enums.CabinetBoxExceptionEnum;
import com.junmp.jyzb.api.exception.enums.OrderExceptionEnum;
import com.junmp.v2.auth.api.bean.login.LoginUser;
......@@ -13,9 +18,12 @@ import com.junmp.v2.auth.api.context.LoginContext;
import com.junmp.v2.common.bean.response.ApiRes;
import com.junmp.v2.common.exception.IExceptionEnum;
import com.junmp.v2.common.exception.base.ServiceException;
import com.junmp.v2.common.util.BeanPlusUtil;
import com.junmp.v2.sys.user.entity.SysUser;
import com.junmp.v2.sys.user.service.SysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.flowable.bpmn.model.UserTask;
import org.flowable.common.engine.api.FlowableObjectNotFoundException;
import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.history.HistoricActivityInstance;
......@@ -25,16 +33,15 @@ import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.runtime.ProcessInstanceBuilder;
import org.flowable.task.api.Task;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.junmp.junmpProcess.common.CommonConstants.*;
import static com.junmp.junmpProcess.common.CommonConstants.BUSINESS_STATUS_1;
......@@ -45,6 +52,8 @@ import static com.junmp.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX;
public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlowInstanceService {
@Resource
private SysUserService sysUserService;
@Override
public void updateState(Integer state, String instanceId) {
// 激活
......@@ -95,6 +104,24 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
return historicProcessInstance;
}
///获取下一个审核人信息
@Override
public String GetNextAssign(String processInstanceId)
{
String assigneeString="";
Object assigneeObject = runtimeService.getVariable(processInstanceId, "currentAssignee");
if (assigneeObject instanceof List) {
List<String> assigneeList = (List<String>) assigneeObject;
assigneeString = String.join(",", assigneeList);
// 现在 assigneeString 中包含了集合元素用逗号拼接的字符串
}
return assigneeString;
}
@Override
public String startProcessInstanceById(StartProcessInstanceDTO processInstanceDto) {
SysUser StartUser=new SysUser();
......@@ -113,6 +140,25 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
processVariables.put(FORM_Trigger,processInstanceDto.getTriggerId());//获取触发器信息
processVariables.put(ORDER_ID,processInstanceDto.getOrderId());
processVariables.put(ORDER_TYPE,processInstanceDto.getOrderType());
//发物单位
if (ObjectUtil.isNotNull(processInstanceDto.getStartOrgName())){
processVariables.put(START_ORG_NAME,processInstanceDto.getStartOrgName());
}
//收物单位
if (ObjectUtil.isNotNull(processInstanceDto.getEndOrgName())){
processVariables.put(END_ORG_NAME,processInstanceDto.getEndOrgName());
}
//装备名称拼接
if (ObjectUtil.isNotNull(processInstanceDto.getInvList())){
processVariables.put(INVLIST,processInstanceDto.getInvList());
}
//单据类型
processVariables.put(BUSSINESS_TYPE,processInstanceDto.getBussinessType());
//出入库状态
if (ObjectUtil.isNotNull(processInstanceDto.getOutInState())){
processVariables.put(OUT_IN_STATE,processInstanceDto.getOutInState());
}
processVariables.put(START_USER_INFO,JSONObject.toJSONString(StartUser));
processVariables.put(PROCESS_STATUS,BUSINESS_STATUS_1);
......@@ -124,34 +170,40 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
}
ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processInstanceDto.getProcessDefinitionId())
.latestVersion().singleResult();
// if (processDefinition == null )
// {
// return ApiRes.failure("流程不存在或已挂起");
// } else if (processDefinition.isSuspended())
// {
// return ApiRes.failure("流程不存在或已挂起");
// }
try {
// ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(processInstanceDto.getProcessDefinitionId())
// .latestVersion().singleResult();
ProcessInstance processInstance = processInstanceBuilder
.processDefinitionId(processInstanceDto.getProcessDefinitionId())
.variable("initiator",StartUser.getUserId())
.variables(processVariables)
.variable("initiator", StartUser != null ? StartUser.getUserId() : null)
.variables(processVariables != null ? processVariables : Collections.emptyMap())
.businessStatus(BUSINESS_STATUS_1)
.start();
// 从流程执行上下文中获取流程变量
Object skip = runtimeService.getVariable(processInstance.getId(), "skip");
if (ObjectUtils.isNotEmpty(skip) && BooleanUtils.toBoolean(skip.toString())){
return "skip"+processInstance.getId();
}
else{
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
for (Task a:list) {
System.out.println("a = " + a);
}
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setAssignee(StartUser.getUserId().toString());
return processInstance.getProcessInstanceId();
} catch (Exception e) {
String fullErrorMessage = getFullErrorMessage(e);
// 处理在启动流程实例时发生的异常
throw new ServiceException(OrderExceptionEnum.ROLE_ERROR);
// throw new ServiceException(fullErrorMessage);
}
// } catch (Exception e) {
// String fullErrorMessage = getFullErrorMessage(e);
// // 处理在启动流程实例时发生的异常
// throw new ServiceException(OrderExceptionEnum.ROLE_ERROR);
//// throw new ServiceException(fullErrorMessage);
//
// }
//手动完成第一个任务
}
......
......@@ -42,6 +42,7 @@ import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ActivityInstance;
import org.flowable.engine.runtime.ProcessInstance;
......@@ -49,7 +50,9 @@ import org.flowable.engine.task.Attachment;
import org.flowable.engine.task.Comment;
import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -69,6 +72,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
@Resource
private SysUserService sysUserService;
@Resource
private OrgUserMapper orgUserMapper;
@Autowired
private ProcessTemplateService processTemplateService;
@Autowired
......@@ -115,10 +121,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
// if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
// taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
// }
taskService.complete(task.getId());
HistoricTaskInstance historicTask = historyService
.createHistoricTaskInstanceQuery()
......@@ -134,6 +136,22 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
else
{
// HistoricVariableInstance orderType = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).variableName("orderType").list().get(0);
// if (orderType.equals("workOrder"))
// {
// Object assigneeObject = runtimeService.getVariable(processInstanceId, "currentAssignee");
//
// if (assigneeObject instanceof List) {
// List<String> assigneeList = (List<String>) assigneeObject;
//
// String assigneeString = String.join(",", assigneeList);
// orgUserMapper.UpdateOrder("bussiness_order_main",processInstanceId,assigneeString);
// // 现在 assigneeString 中包含了集合元素用逗号拼接的字符串
// }
// }
}
return new ResponseResult(HttpStatus.SUCCESS, ReturnMsg.PASS,ReturnMsg.PASS);
}
......@@ -245,12 +263,50 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
List<Task> tasks = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString())
TaskQuery taskQuery = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString())
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString()).count();
.orderByTaskCreateTime().desc();
//条件查询(流程名称,开始时间,结束时间,发物单位,装备名称)
if (ObjectUtil.isNotNull(taskDTO.getProcessDefinitionName()) && ! taskDTO.getProcessDefinitionName().trim().isEmpty()){
taskQuery = taskQuery.processDefinitionNameLike("%"+taskDTO.getProcessDefinitionName()+"%");
}
//装备名称
if (ObjectUtil.isNotNull(taskDTO.getTypeName()) && ! taskDTO.getTypeName().trim().isEmpty()){
taskQuery=taskQuery.processVariableValueLike(INVLIST,"%"+taskDTO.getTypeName()+"%");
}
//发物单位
if (ObjectUtil.isNotNull(taskDTO.getStartOrgName()) && ! taskDTO.getStartOrgName().trim().isEmpty()){
taskQuery = taskQuery.processVariableValueLike(START_ORG_NAME,"%"+taskDTO.getStartOrgName()+"%");
}
if (ObjectUtil.isNotNull(taskDTO.getEndOrgName()) && ! taskDTO.getEndOrgName().trim().isEmpty()){
taskQuery = taskQuery.processVariableValueLike(END_ORG_NAME,"%"+taskDTO.getEndOrgName()+"%");
}
//流程状态
if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("正在处理")){
taskQuery=taskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("撤销")){
taskQuery=taskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("驳回")){
taskQuery=taskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("已结束")){
taskQuery=taskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}
// //开始时间
// if (ObjectUtil.isNotNull(taskDTO.getStartTime())) {
// taskQuery = taskQuery.taskCreatedAfter(taskDTO.getStartTime());
// taskQuery.taskDueAfter(taskDTO.getStartTime());
//
// }
// //结束时间
// if (ObjectUtil.isNotNull(taskDTO.getEndTime())){
// taskQuery=taskQuery.taskCreatedBefore(taskDTO.getEndTime());
// taskQuery.taskDueBefore(taskDTO.getEndTime());
// }
List<Task> tasks = taskQuery.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
//根据条件查询符合条件的数据并统计数量条数
long count = taskQuery.count();
// long count = taskService.createTaskQuery().taskAssignee(StartUser.getUserId().toString()).count();
List<TaskVO> taskVOS= new ArrayList<>();
Page<TaskVO> page =new Page<>();
for (Task task : tasks) {
......@@ -273,6 +329,14 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskVO.setCurrentActivityName(getCurrentName(processInstance.getId(),false,processInstance.getProcessDefinitionId()));
taskVO.setBusinessStatus(MapUtil.getStr(processVariables,PROCESS_STATUS));
taskVO.setStartOrgName(MapUtil.getStr(processVariables,START_ORG_NAME));
taskVO.setEndOrgName(MapUtil.getStr(processVariables,END_ORG_NAME));
taskVO.setInvList(MapUtil.getStr(processVariables,INVLIST));
taskVO.setBusinessType(MapUtil.getStr(processVariables,BUSSINESS_TYPE));
taskVO.setOutInState(MapUtil.getStr(processVariables,OUT_IN_STATE));
taskVO.setTaskCreatedTime(task.getCreateTime());
DelegationState delegationState = task.getDelegationState();
if(delegationState!=null){
......@@ -282,6 +346,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
page.setRecords(taskVOS);
page.setTotal(count);
page.setCurrent(taskDTO.getPageNo());
page.setSize(taskDTO.getPageSize());
return PageResultFactory.createPageResult(page);
}
......@@ -296,14 +363,53 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
{
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery()
HistoricTaskInstanceQuery historicTaskQuery = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(StartUser.getUserId().toString())
.finished()
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = historyService.createHistoricTaskInstanceQuery()
.taskAssignee(StartUser.getUserId().toString()).count();
.includeCaseVariables().includeProcessVariables().includeTaskLocalVariables().includeIdentityLinks()
.orderByTaskCreateTime().desc();
//根据条件查询(流程名称,开始时间,结束时间)
if (ObjectUtil.isNotNull(taskDTO.getProcessDefinitionName()) && ! taskDTO.getProcessDefinitionName().trim().isEmpty()){
historicTaskQuery = historicTaskQuery.processDefinitionNameLike("%"+taskDTO.getProcessDefinitionName()+"%");
}
//开始时间
// if (ObjectUtil.isNotNull(taskDTO.getStartTime())) {
// historicTaskQuery = historicTaskQuery.taskCompletedAfter(taskDTO.getStartTime());
//
// }
// //结束时间
// if (ObjectUtil.isNotNull(taskDTO.getEndTime())){
// historicTaskQuery = historicTaskQuery.taskCompletedAfter(taskDTO.getEndTime());
// }
//装备名称
if (ObjectUtil.isNotNull(taskDTO.getTypeName()) && ! taskDTO.getTypeName().trim().isEmpty()){
historicTaskQuery=historicTaskQuery.processVariableValueLike(INVLIST,"%"+taskDTO.getTypeName()+"%");
}
//发物单位
if (ObjectUtil.isNotNull(taskDTO.getStartOrgName()) && ! taskDTO.getStartOrgName().trim().isEmpty()){
historicTaskQuery = historicTaskQuery.processVariableValueLike(START_ORG_NAME,"%"+taskDTO.getStartOrgName()+"%");
}
if (ObjectUtil.isNotNull(taskDTO.getEndOrgName()) && ! taskDTO.getEndOrgName().trim().isEmpty()){
historicTaskQuery = historicTaskQuery.processVariableValueLike(END_ORG_NAME,"%"+taskDTO.getEndOrgName()+"%");
}
//流程状态
if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("正在处理")){
historicTaskQuery=historicTaskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("撤销")){
historicTaskQuery=historicTaskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("驳回")){
historicTaskQuery=historicTaskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(taskDTO.getBusinessStatus()) && taskDTO.getBusinessStatus().equals("已结束")){
historicTaskQuery=historicTaskQuery.processVariableValueEquals(PROCESS_STATUS,taskDTO.getBusinessStatus());
}
// List<HistoricTaskInstance> tasks = historicTaskQuery.list();
List<HistoricTaskInstance> tasks = historicTaskQuery.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = historicTaskQuery.count();
// long count = historyService.createHistoricTaskInstanceQuery()
// .taskAssignee(StartUser.getUserId().toString()).count();
List<TaskVO> taskVOS = new ArrayList<>();
Page<TaskVO> page = new Page<>();
for (HistoricTaskInstance task : tasks) {
......@@ -339,6 +445,12 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
taskVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS));
taskVO.setEndTime(task.getEndTime());
taskVO.setStartOrgName(MapUtil.getStr(processVariables,START_ORG_NAME));
taskVO.setEndOrgName(MapUtil.getStr(processVariables,END_ORG_NAME));
taskVO.setInvList(MapUtil.getStr(processVariables,INVLIST));
taskVO.setBusinessType(MapUtil.getStr(processVariables,BUSSINESS_TYPE));
taskVO.setOutInState(MapUtil.getStr(processVariables,OUT_IN_STATE));
long totalTimes = task.getEndTime() == null ?
(Calendar.getInstance().getTimeInMillis() - task.getStartTime().getTime()) :
(task.getEndTime().getTime() - task.getStartTime().getTime());
......@@ -372,14 +484,54 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
StartUser= sysUserService.getById(LoginContext.getContext().getLoginUser());
}
PageResult<HistoryProcessInstanceVO> pageResult=new PageResult<HistoryProcessInstanceVO>();
List<HistoricProcessInstance> historicProcessInstances =
historyService.createHistoricProcessInstanceQuery()
.includeProcessVariables()
.startedBy(StartUser.getUserId().toString())
.orderByProcessInstanceStartTime().desc()
.listPage((applyDTO.getPageNo() - 1) * applyDTO.getPageSize(), applyDTO.getPageSize());
long count = historyService.createHistoricProcessInstanceQuery()
.startedBy(StartUser.getUserId().toString()).count();
HistoricProcessInstanceQuery desc = historyService.createHistoricProcessInstanceQuery()
.includeProcessVariables()
.startedBy(StartUser.getUserId().toString())
.orderByProcessInstanceStartTime().desc();
//根据条件查询(流程名称,开始时间,结束时间)
if (ObjectUtil.isNotNull(applyDTO.getProcessDefinitionName()) && ! applyDTO.getProcessDefinitionName().trim().isEmpty()){
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery()
.processDefinitionNameLike("%" + applyDTO.getProcessDefinitionName() + "%")
.list();
List<String> processDefinitionKeys = processDefinitions.stream()
.map(ProcessDefinition::getKey)
.collect(Collectors.toList());
desc.processDefinitionKeyIn(processDefinitionKeys);
}
if (ObjectUtil.isNotNull(applyDTO.getStartTime())) {
desc = desc.startedAfter(applyDTO.getStartTime());
}
if (ObjectUtil.isNotNull(applyDTO.getEndTime())) {
desc = desc.startedBefore(applyDTO.getEndTime());
}
//装备名称
if (ObjectUtil.isNotNull(applyDTO.getTypeName()) && ! applyDTO.getTypeName().trim().isEmpty()){
desc=desc.variableValueLike(INVLIST,"%"+applyDTO.getTypeName()+"%");
}
//发物单位
if (ObjectUtil.isNotNull(applyDTO.getStartOrgName()) && ! applyDTO.getStartOrgName().trim().isEmpty()){
desc = desc.variableValueLike(START_ORG_NAME,"%"+applyDTO.getStartOrgName()+"%");
}
if (ObjectUtil.isNotNull(applyDTO.getEndOrgName()) && ! applyDTO.getEndOrgName().trim().isEmpty()){
desc = desc.variableValueLike(END_ORG_NAME,"%"+applyDTO.getEndOrgName()+"%");
}
//流程状态
if (ObjectUtil.isNotNull(applyDTO.getBusinessStatus()) && applyDTO.getBusinessStatus().equals("正在处理")){
desc=desc.variableValueEquals(PROCESS_STATUS,applyDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(applyDTO.getBusinessStatus()) && applyDTO.getBusinessStatus().equals("撤销")){
desc=desc.variableValueEquals(PROCESS_STATUS,applyDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(applyDTO.getBusinessStatus()) && applyDTO.getBusinessStatus().equals("驳回")){
desc=desc.variableValueEquals(PROCESS_STATUS,applyDTO.getBusinessStatus());
}else if (ObjectUtil.isNotNull(applyDTO.getBusinessStatus()) && applyDTO.getBusinessStatus().equals("已结束")){
desc=desc.variableValueEquals(PROCESS_STATUS,applyDTO.getBusinessStatus());
}
List<HistoricProcessInstance> historicProcessInstances = desc.listPage((applyDTO.getPageNo() - 1) * applyDTO.getPageSize(), applyDTO.getPageSize());
long count = desc.count();
// long count = historyService.createHistoricProcessInstanceQuery()
// .startedBy(StartUser.getUserId().toString()).count();
List<HistoryProcessInstanceVO> historyProcessInstanceVOS = new ArrayList<>();
Page<HistoryProcessInstanceVO> page = new Page<>();
for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
......@@ -404,6 +556,12 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
historyProcessInstanceVO.setCurrentActivityName(getCurrentName(historicProcessInstance.getId(), flag, historicProcessInstance.getProcessDefinitionId()));
historyProcessInstanceVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS));
historyProcessInstanceVO.setStartOrgName(MapUtil.getStr(processVariables,START_ORG_NAME));
historyProcessInstanceVO.setEndOrgName(MapUtil.getStr(processVariables,END_ORG_NAME));
historyProcessInstanceVO.setInvList(MapUtil.getStr(processVariables,INVLIST));
historyProcessInstanceVO.setBussinessType(MapUtil.getStr(processVariables,BUSSINESS_TYPE));
historyProcessInstanceVO.setOutInState(MapUtil.getStr(processVariables,OUT_IN_STATE));
long totalTimes = historicProcessInstance.getEndTime() == null ?
(Calendar.getInstance().getTimeInMillis() - historicProcessInstance.getStartTime().getTime()) :
(historicProcessInstance.getEndTime().getTime() - historicProcessInstance.getStartTime().getTime());
......@@ -418,7 +576,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
historyProcessInstanceVOS.add(historyProcessInstanceVO);
}
pageResult.setRecords(historyProcessInstanceVOS);
pageResult.setTotalRows(Long.valueOf(applyDTO.getPageNo()));
// pageResult.setTotalRows(Long.valueOf(applyDTO.getPageNo()));
pageResult.setTotalRows(count);
pageResult.setTotalPage(PageUtil.totalPage((int) count, Convert.toInt(pageResult.getPageSize())));
pageResult.setPageSize(Long.valueOf(applyDTO.getPageSize()));
pageResult.setPageNo(Long.valueOf(applyDTO.getPageNo()));
......@@ -457,7 +616,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
TaskDetailVO taskDetailVO= new TaskDetailVO();
taskDetailVO.setTaskId(historicActivityInstance.getTaskId());
taskDetailVO.setActivityId(historicActivityInstance.getActivityId());
taskDetailVO.setName("流程开始");
taskDetailVO.setName("发起人");
taskDetailVO.setTaskStatusWrapper("发起");
// taskDetailVO.setUserId(JSONObject.parseObject(userStart, UserInfo.class).getUserId().toString());
// taskDetailVO.setUserName(JSONObject.parseObject(userStart, UserInfo.class).getRealName().toString());
......
......@@ -195,6 +195,8 @@ public class BpmnConvert {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class);
userTask.setExecutionListeners(getTaskListeners());//角色监听
// userTask.setExecutionListeners(SkipTaskListeners());//跳过事件监听
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// 审批人集合参数
multiInstanceLoopCharacteristics.setInputDataItem(userTask.getId()+"assigneeList");
......@@ -217,15 +219,38 @@ public class BpmnConvert {
*/
private static List<FlowableListener> getTaskListeners() {
ArrayList<FlowableListener> taskListeners = new ArrayList<>();
// 第一个监听器
FlowableListener counterSignListener = new FlowableListener();
counterSignListener.setEvent(ExecutionListener.EVENTNAME_START);
counterSignListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
counterSignListener.setImplementation("${counterSignListener}");
taskListeners.add(counterSignListener);
// 第二个监听器
FlowableListener skipTaskListener = new FlowableListener();
skipTaskListener.setEvent(ExecutionListener.EVENTNAME_START);
skipTaskListener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
skipTaskListener.setImplementation("${skipTaskListener}");
taskListeners.add(skipTaskListener);
return taskListeners;
}
/**
* 监听任务启动后角色分配事件
*
* @return 监听节点列表
*/
private static List<FlowableListener> SkipTaskListeners() {
ArrayList<FlowableListener> taskListeners = new ArrayList<>();
//监听器开始class
FlowableListener listener = new FlowableListener();
listener.setEvent(ExecutionListener.EVENTNAME_START);//监听任务启动
listener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
listener.setImplementation("${counterSignListener}");//启动角色分配监听事件
listener.setImplementation("${SkipTaskListener}");//启动角色分配监听事件
taskListeners.add(listener);
return taskListeners;
}
/**
* 绘制分支节点
* @param process 绘图对象
......
......@@ -34,4 +34,15 @@ public class HistoryProcessInstanceVO {
private String businessStatus;
@ApiModelProperty("耗时")
private String duration;
@ApiModelProperty("发物单位")
private String startOrgName;
@ApiModelProperty("收物单位")
private String endOrgName;
@ApiModelProperty("装备列表")
private String invList;
@ApiModelProperty("单据类型")
private String bussinessType;
@ApiModelProperty("出入库状态")
private String outInState;
}
......@@ -41,4 +41,15 @@ public class TaskVO {
private String duration;
@ApiModelProperty("委派状态")
private DelegationState delegationState;
@ApiModelProperty("发物单位")
private String startOrgName;
@ApiModelProperty("收物单位")
private String endOrgName;
@ApiModelProperty("装备列表")
private String invList;
@ApiModelProperty("单据类型")
private String businessType;
@ApiModelProperty("出入库状态")
private String outInState;
}
......@@ -38,7 +38,11 @@
where su.user_id = ${userId}
</select>
<update id="UpdateOrder">
UPDATE #{orderType}
SET current_assign = #{current_assign}
WHERE process_id = #{process_id}
</update>
<select id="QueryUserWithParentOrg" resultMap="UserListDTO">
SELECT
CASE
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论