Merge remote-tracking branch 'origin/master'

master
chengqf 2 years ago
commit 3adaf6fea1

@ -28,7 +28,7 @@ public class ConstantStatus {
public static final Integer ORDER_STATS_ERROR = 4;
/**
*
*
*/
public static final Integer ORDER_STATUS_CHECK_SUCCESS = 5;
@ -39,7 +39,7 @@ public class ConstantStatus {
/**
*
*
*/
public static final Integer ORDER_STATUS_CHECK_REW = 10;
@ -86,6 +86,11 @@ public class ConstantStatus {
public static final Integer ACTION_TYPE_ADVANCE = 3; //寄售
public static final int ORDER_SPUSE_NO = 0; //不允许供应商使用
public static final int ORDER_SPUSE_LOOK = 1; //允许供应商查看
public static final int ORDER_SPUSE_EDIT = 2; //允许供应商编辑
public static final Integer ORDER_STATUS_ADDITIONAL = 5; //补录单据
// public static final Integer ORDER_STATUS_RECEIVEED = 7;
@ -193,7 +198,7 @@ public class ConstantStatus {
public static final int FROM_PDAUN = 4; //pda未校验
public static final int FROM_PC = 5; //pc端扫码精灵
public static final int FROM_CHANGE = 6; //单据流转
public static final int FROM_UDISP = 7; //供应商平台|| UDI管理系统
public static final int FROM_UDISP = 7; //供应商平台||UDI管理系统
public static final int FROM_PEACE_CHANGE = 8; //平衡补单
public static final int FROM_REVIEW = 9; //单据验收直接补单
public static final int FROM_COPY = 10; //单据复制
@ -202,6 +207,7 @@ public class ConstantStatus {
public static final int FROM_RECEIVE = 13; //领用单据转单
public static final int FROM_THRORDER = 14; //第三方单据转单
public static final int FROM_Order = 15; //采购计划转单
public static final int FROM_BACK = 17; //出库转退货单;
//DI类型
@ -222,11 +228,11 @@ public class ConstantStatus {
public static final String SYNC_BUS_TYPE = "AutoUploadBusType";
public static final String SYNC_SCAN_ORDER = "AutoUploadOrder";
public static final String SYNC_BUS_ORDER = "AutoUploadBusOrder";
public static final String SYNC_DI_PRODUCTS = "AutoDownloadDiProducts";
public static final String SYNC_THR_DATA = "AutoUploadThrData";
public static final String SYNC_THR_PRODUCTS = "AutoUploadThrProducts";
public static final String SYNC_SYS_SETTING = "AutoUploadSysSetting";
//自动下载所有数据
public static final String SYNC_DOWNLOAD_BASIC_DATA = "AutoDownloadAllData";
//自动下载单据数据

@ -1,14 +1,18 @@
package com.glxp.api.controller.inout;
import cn.hutool.Hutool;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.annotation.Log;
import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.constant.BusinessType;
import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.controller.BaseController;
import com.glxp.api.entity.auth.AuthAdmin;
import com.glxp.api.entity.auth.InvWarehouseEntity;
@ -17,6 +21,7 @@ import com.glxp.api.entity.basic.BasicCorpEntity;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.basic.UdiProductEntity;
import com.glxp.api.entity.inout.*;
import com.glxp.api.entity.inv.InvPreInProductDetailEntity;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.http.sync.SpsDirectClient;
@ -34,7 +39,9 @@ import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.basic.*;
import com.glxp.api.service.inout.*;
import com.glxp.api.service.inv.InvPreinDetailService;
import com.glxp.api.service.inv.InvPreinProductDetailService;
import com.glxp.api.service.inv.InvProductDetailService;
import com.glxp.api.service.purchase.SupProductService;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.util.CustomUtil;
import com.glxp.api.util.DateUtil;
@ -85,17 +92,20 @@ public class IoCodeTempController extends BaseController {
@Resource
IoCheckInoutService ioCheckInoutService;
@Resource
InvPreinDetailService invPreinDetailService;
InvPreinProductDetailService invPreinProductDetailService;
@Resource
InvProductDetailService invProductDetailService;
@Resource
IoCodeLostService codeLostService;
@Resource
IoOrderDetailBizService orderDetailBizService;
@Resource
IoCodeService codeService;
//手持端扫码单据上传调用接口
@AuthRuleAnnotation("")
@PostMapping("warehouse/inout/postOrders")
@Log(title = "单据管理", businessType = BusinessType.INSERT)
public BaseResponse postOrders(@RequestBody PostOrderRequest postOrderRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
@ -330,6 +340,7 @@ public class IoCodeTempController extends BaseController {
//前端扫码提交
@AuthRuleAnnotation("")
@PostMapping("warehouse/inout/addOrderWeb")
@Log(title = "单据管理", businessType = BusinessType.INSERT)
public BaseResponse addOrderWeb(@RequestBody AddOrderRequest addOrderRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
@ -415,8 +426,9 @@ public class IoCodeTempController extends BaseController {
//过期提醒:
SystemParamConfigEntity expireParamConfigEntity = systemParamConfigService.selectByParamKey("expire_date_tip");
if (expireParamConfigEntity.getParamValue().equals("1") && !addOrderRequest.isIgnoreExpire()) {
// SystemParamConfigEntity expireParamConfigEntity = systemParamConfigService.selectByParamKey("expire_date_tip");
if (bussinessTypeEntity.isCheckExpire() && !addOrderRequest.isIgnoreExpire()) {
if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) {
String expireDate = "20" + udiEntity.getExpireDate();
long expireTime = DateUtil.parseDateExpire(expireDate);
@ -429,7 +441,7 @@ public class IoCodeTempController extends BaseController {
//失效期提醒
SystemParamConfigEntity recentParamConfigEntity = systemParamConfigService.selectByParamKey("recent_date_tip");
long recent = Long.parseLong(recentParamConfigEntity.getParamValue());
if (recent > 0 && !addOrderRequest.isIgnoreRecentExpire()) {
if (bussinessTypeEntity.isCheckVailDate() && recent > 0 && !addOrderRequest.isIgnoreRecentExpire()) {
if (StrUtil.isNotEmpty(udiEntity.getExpireDate())) {
String expireDate = "20" + udiEntity.getExpireDate();
long expireTime = DateUtil.parseDateExpire(expireDate);
@ -445,11 +457,12 @@ public class IoCodeTempController extends BaseController {
}
}
//校验预验收是否已存在
if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_PREIN) {
if (StrUtil.isNotEmpty(udiEntity.getSerialNo())) {
List<InvPreinDetailEntity> invProductDetailEntities = invPreinDetailService.findUseByCode(code);
if (CollUtil.isNotEmpty(invProductDetailEntities)) {
int count = invPreinProductDetailService.findCountByCode(code);
if (count > 0) {
return ResultVOUtils.error(500, "预验收库存已存在此UDI码,请检查后重试!");
}
}
@ -457,35 +470,66 @@ public class IoCodeTempController extends BaseController {
//校验预验收库存是否已存在
if (bussinessTypeEntity.isScanPreIn()) {
InvPreinDetailEntity invProductDetailEntity = invPreinDetailService.findUseOneByCode(code);
if (invProductDetailEntity == null) {
return ResultVOUtils.error(500, "预验收库存未存在此产品!");
} else {
if (StrUtil.isNotEmpty(invProductDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo())
&& !invProductDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) {
return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!");
}
if (StrUtil.isNotEmpty(orderId)) {//非首次添加
if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品
//无序列号,则可能存在多个预验收入库单
IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code);
List<InvPreinDetailEntity> invPreinDetailEntities = invPreinDetailService.findUseByCode(code);
int count = 0;
for (InvPreinDetailEntity temp : invPreinDetailEntities) {
count = count + temp.getCount();
}
if (codeTempEntity != null) {
if (count < (codeTempEntity.getMyCount() + 1)) {
return ResultVOUtils.error(500, "超出预验收库存数量");
if (bussinessTypeEntity.getBackPreinType() == 1) {//按单出库
String orderIds = bussinessTypeEntity.getCheckPreInOrders();
if (StrUtil.isNotEmpty(orderIds)) {
String[] orderIdArray = StringUtils.split(",");
List<String> orderList = CollUtil.toList(orderIdArray);
int count = codeService.findByOrderIdsCount(orderList, code);
if (count <= 0) {
return ResultVOUtils.error(500, "预验收库存数量不足!");
}
if (StrUtil.isNotEmpty(orderId)) {//非首次添加
if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品
//无序列号,则可能存在多个预验收入库单
IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code);
if (codeTempEntity != null) {
if (count < (codeTempEntity.getMyCount() + 1)) {
return ResultVOUtils.error(500, "超出预验收库存数量");
}
}
} else {
if (count < 1) {
return ResultVOUtils.error(500, "预验收库存数量不足");
}
}
} else {
if (invProductDetailEntity.getCount() < 1) {
return ResultVOUtils.error(500, "超出预验收库存数量");
}
} else {
return ResultVOUtils.error(500, "未选择预验收入库单,请先选择预验收入库单!");
}
} else { //按库存出库
int preInCount = invPreinProductDetailService.findCountByCode(code);
InvPreInProductDetailEntity invPreinDetailEntity = invPreinProductDetailService.findUseOneByCode(code);
if (preInCount <= 0) {
return ResultVOUtils.error(500, "预验收库存数量不足!");
} else {
if (StrUtil.isNotEmpty(invPreinDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo())
&& !invPreinDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) {
return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!");
}
if (StrUtil.isNotEmpty(orderId)) {//非首次添加
if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品
//无序列号,则可能存在多个预验收入库单
IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code);
if (codeTempEntity != null) {
if (preInCount < (codeTempEntity.getMyCount() + 1)) {
return ResultVOUtils.error(500, "超出预验收库存数量");
}
}
} else {
if (preInCount < 1) {
return ResultVOUtils.error(500, "预验收库存数量不足");
}
}
}
}
}
}
@ -521,6 +565,7 @@ public class IoCodeTempController extends BaseController {
return ResultVOUtils.error(500, "当前UDI码已存在且存在异常未处理");
}
udiRelevanceResponses = udiRelevanceService.selectGroupByNameCode(exitLocalEntity.getNameCode(), null);
BeanUtils.copyProperties(exitLocalEntity, genDetaiEntity);
genDetaiEntity.setCount(1);
genDetaiEntity.setReCount(udiCalCountUtil.getActCount(udiRelevanceResponses.get(0)));
@ -642,12 +687,24 @@ public class IoCodeTempController extends BaseController {
boolean isBillExit = orderDetailBizService.isExit(orderEntity.getBillNo());
if (!isBillExit) {
orderService.deleteByBillNo(orderEntity.getBillNo());
return ResultVOUtils.error(500, "请先录入业务详情");
}
}
BaseResponse baseResponse = checkRelId(codeEnttity, unitFk);
//判断证书是否过期
// if (codeEnttity.getRelId() != null && bussinessTypeEntity.isCheckCertExpire()) {
//
// SupProductEntity supProductEntity = supProductService.findByRelIdFk(codeEnttity.getRelId() + "");
// if(supProductEntity!=null){
//
// }
// if (DateUtil.)
// }
BaseResponse invRes = checkInv(bussinessTypeEntity, codeEnttity);
if (invRes != null) {
return invRes;
@ -820,7 +877,7 @@ public class IoCodeTempController extends BaseController {
}
public BaseResponse checkInv(BasicBussinessTypeEntity bussinessTypeEntity, IoCodeTempEntity codeTempEntity) {
if (bussinessTypeEntity.isVailInv()) {
if (bussinessTypeEntity.isVailInv() && bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_OUT)) {
if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_ADVANCE) {
// int count = invPreProductDetailService.vailStockCount(code); //todo 寄售
// if (count < 0) {
@ -860,6 +917,7 @@ public class IoCodeTempController extends BaseController {
@AuthRuleAnnotation("")
@PostMapping("/udiwms/addCode/updateBindSup")
@Log(title = "单据管理", businessType = BusinessType.UPDATE)
public BaseResponse updateBindSup(@RequestBody IoCodeTempEntity codeSaveRequest, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
@ -915,6 +973,7 @@ public class IoCodeTempController extends BaseController {
@AuthRuleAnnotation("")
@GetMapping("warehouse/inout/deleteCodesTempById")
@Log(title = "单据管理", businessType = BusinessType.DELETE)
public BaseResponse deleteCodesTempById(@RequestParam("id") Integer id) {
IoCodeTempEntity codeTempEntity = codeTempService.selectById(id);
@ -942,6 +1001,13 @@ public class IoCodeTempController extends BaseController {
}
}
boolean r1 = orderDetailBizService.isExit(orderDetailCodeEntity.getOrderIdFk());
boolean r2 = ioOrderDetailCodeService.isExit(orderDetailCodeEntity.getOrderIdFk());
if (!r1 && !r2) {
orderService.deleteByBillNo(orderDetailCodeEntity.getOrderIdFk());
}
orderEntity.setUpdateUser(getUserId() + "");
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
@ -951,7 +1017,10 @@ public class IoCodeTempController extends BaseController {
@AuthRuleAnnotation("")
@PostMapping("warehouse/inout/saveTempCode")
@Log(title = "单据管理", businessType = BusinessType.UPDATE)
public BaseResponse saveCode(@RequestBody IoCodeTempEntity codeTempEntity) {
if (codeTempEntity.getCount() == null)
codeTempEntity.setCount(1);
if (StrUtil.isNotEmpty(codeTempEntity.getSerialNo()) && codeTempEntity.getSerialNo().length() > 20) {
return ResultVOUtils.error(500, "无效条码!序列号超出最大范围");

@ -97,6 +97,31 @@ public class IoOrderController extends BaseController {
return ResultVOUtils.page(pageInfo);
}
@AuthRuleAnnotation("")
@GetMapping("/udiwms/inout/preInorder/filter")
public BaseResponse filterPreInorder(FilterOrderRequest filterOrderRequest) {
if (StrUtil.isNotBlank(filterOrderRequest.getStatusType())) {
orderService.setFilterStatus(filterOrderRequest);
}
if (StrUtil.isNotBlank(filterOrderRequest.getVueType())) {
orderService.setActions(filterOrderRequest);
}
if (StrUtil.isNotEmpty(filterOrderRequest.getSupInoivceSearch())) {
orderService.setInvoiceFiltes(filterOrderRequest);
}
String customerId = getCustomerId();
if (!customerId.equals("110")) {
filterOrderRequest.setFromCorp(customerId);
}
List<IoOrderResponse> list = orderService.filterList(filterOrderRequest);
PageInfo<IoOrderResponse> pageInfo = new PageInfo<>(list);
return ResultVOUtils.page(pageInfo);
}
@GetMapping("/udiwms/inout/order/filterInvoice")
public BaseResponse filterInvoice(FilterOrderRequest filterOrderRequest) {
filterOrderRequest.setDealStatuses(Arrays.asList(2, 3));

@ -0,0 +1,101 @@
package com.glxp.api.controller.inv;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.entity.inv.InvPreInProductDetailEntity;
import com.glxp.api.req.inv.FilterInvPreProductDetailRequest;
import com.glxp.api.req.inv.FilterInvPreinProductRequest;
import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.res.inv.InvPreProductDetailResponse;
import com.glxp.api.res.inv.InvPreProductPageResponse;
import com.glxp.api.res.inv.InvPreinProductResponse;
import com.glxp.api.service.auth.CustomerService;
import com.glxp.api.service.auth.WarehouseUserService;
import com.glxp.api.service.inv.InvPreinProductDetailService;
import com.glxp.api.service.inv.InvPreinProductService;
import com.glxp.api.util.udi.FilterUdiUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
@Slf4j
@RestController
public class InvPreinProductController {
@Resource
private InvPreinProductDetailService invPreinProductDetailService;
@Resource
private InvPreinProductService invPreinProductService;
@Resource
private WarehouseUserService warehouseUserService;
@Resource
private CustomerService customerService;
/**
*
*
* @param filterInvPreinProductRequest
* @return
*/
@GetMapping("/spms/inv/pre/in/product/filter")
public BaseResponse filterList(FilterInvPreinProductRequest filterInvPreinProductRequest) {
boolean showSup = false; //前端控制表格显示字段
if (StrUtil.isNotBlank(filterInvPreinProductRequest.getUdiCode())) {
filterInvPreinProductRequest.setNameCode(FilterUdiUtils.getDiStr(filterInvPreinProductRequest.getUdiCode()));
}
if (StrUtil.isBlank(filterInvPreinProductRequest.getInvCode())) {
List<String> invCodes = warehouseUserService.selectCodeByUser(customerService.getUserIdStr());
if (CollUtil.isNotEmpty(invCodes)) {
filterInvPreinProductRequest.setInvCodes(invCodes);
}
}
List<InvPreinProductResponse> list = invPreinProductService.filterList(filterInvPreinProductRequest);
PageInfo<InvPreinProductResponse> pageInfo = new PageInfo<>(list);
InvPreProductPageResponse<InvPreinProductResponse> pageResponse = new InvPreProductPageResponse<>();
pageResponse.setList(pageInfo.getList());
pageResponse.setTotal(pageInfo.getTotal());
pageResponse.setShowSup(showSup);
return ResultVOUtils.success(pageResponse);
}
/**
*
*
* @param detailRequest
* @return
*/
@GetMapping("/spms/inv/pre/in/product/filterDetail")
public BaseResponse filterInvPreProductDetail(FilterInvPreProductDetailRequest detailRequest) {
List<InvPreInProductDetailEntity> invPreProductDetailEntities = invPreinProductDetailService.filterPreProductDetailList(detailRequest);
PageInfo<InvPreInProductDetailEntity> pageInfo = new PageInfo<>(invPreProductDetailEntities);
List<InvPreProductDetailResponse> list = new ArrayList<>();
if (CollUtil.isNotEmpty(invPreProductDetailEntities)) {
invPreProductDetailEntities.forEach(invPreProductDetailEntity -> {
InvPreProductDetailResponse response = new InvPreProductDetailResponse();
BeanUtil.copyProperties(invPreProductDetailEntity, response);
//设置单据类型名称等单据相关参数
invPreinProductDetailService.setOrderInfo(response);
list.add(response);
});
}
PageSimpleResponse<InvPreProductDetailResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setList(list);
pageSimpleResponse.setTotal(pageInfo.getTotal());
return ResultVOUtils.success(pageSimpleResponse);
}
}

@ -0,0 +1,30 @@
package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvPreInProductDetailEntity;
import com.glxp.api.req.inv.FilterInvPreProductDetailRequest;
import com.glxp.api.req.inv.FilterInvProductDetailRequest;
import java.util.List;
/**
* Dao
*/
public interface InvPreInProductDetailDao extends BaseMapperPlus<InvPreInProductDetailDao, InvPreInProductDetailEntity, InvPreInProductDetailEntity> {
/**
*
*
* @param filterInvPreProductDetailRequest
* @return
*/
List<InvPreInProductDetailEntity> filterPreProductDetailList(FilterInvPreProductDetailRequest filterInvPreProductDetailRequest);
/**
*
*
* @param detailRequest
* @return
*/
boolean deleteInvPreProductDetail(FilterInvProductDetailRequest detailRequest);
}

@ -0,0 +1,31 @@
package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvPreinProductEntity;
import com.glxp.api.req.inv.FilterInvPreinProductRequest;
import com.glxp.api.res.inv.InvPreinProductResponse;
import java.util.List;
/**
* Dao
*/
public interface InvPreinProductDao extends BaseMapperPlus<InvPreinProductDao, InvPreinProductEntity, InvPreinProductEntity> {
/**
* VO
*
* @param invPreProductRequest
* @return
*/
List<InvPreinProductResponse> filterList(FilterInvPreinProductRequest invPreProductRequest);
/**
*
*
* @param invPreProductRequest
* @return
*/
List<InvPreinProductEntity> filterPreProductList(FilterInvPreinProductRequest invPreProductRequest);
}

@ -307,7 +307,7 @@ public class BasicBussinessTypeEntity {
* 使
*/
@TableField(value = "spUse")
private boolean spUse;
private int spUse;
/**
*
@ -315,7 +315,7 @@ public class BasicBussinessTypeEntity {
// @TableField(value = "preIn")
// private boolean preIn;
// 预验收剩余库存自动退库
@TableField(value = "preInBack")
private boolean preInBack;
@ -396,8 +396,12 @@ public class BasicBussinessTypeEntity {
@TableField(value = "checkCertExpire")
private boolean checkCertExpire;
// 预验收退库单据类型
@TableField(value = "preInBackAction")
private String preInBackAction;
// 预验收剩余库存退库方式 1:按单使用或退库2按货位/仓库使用或退库
@TableField(value = "backPreinType")
private Integer backPreinType;
@TableField(value = "checkPreInOrders")
private String checkPreInOrders;
}

@ -0,0 +1,167 @@
package com.glxp.api.entity.inv;
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.util.Date;
/**
*
*/
@Data
@TableName(value = "inv_pre_product_detail")
public class InvPreInProductDetailEntity {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* UDI
*/
@TableField(value = "code")
private String code;
/**
*
*/
@TableField(value = "mainAction")
private String mainAction;
/**
*
*/
@TableField(value = "`action`")
private String action;
/**
*
*/
@TableField(value = "orderId")
private String orderId;
/**
* ID
*/
@TableField(value = "relId")
private Long relId;
/**
*
*/
@TableField(value = "nameCode")
private String nameCode;
/**
*
*/
@TableField(value = "batchNo")
private String batchNo;
/**
*
*/
@TableField(value = "produceDate")
private String produceDate;
/**
*
*/
@TableField(value = "expireDate")
private String expireDate;
/**
*
*/
@TableField(value = "serialNo")
private String serialNo;
/**
*
*/
@TableField(value = "supId")
private String supId;
/**
*
*/
@TableField(value = "`count`")
private int count;
/**
*
*/
@TableField(value = "reCount")
private int reCount;
/**
*
*/
@TableField(value = "deptCode")
private String deptCode;
/**
*
*/
@TableField(value = "invCode")
private String invCode;
/**
*
*/
@TableField(value = "invSpaceCode")
private String invSpaceCode;
/**
*
*/
@TableField(value = "purchaseType")
private Integer purchaseType;
/**
*
*/
@TableField(value = "updateTime")
private Date updateTime;
public static final String COL_ID = "id";
public static final String COL_CODE = "code";
public static final String COL_MAINACTION = "mainAction";
public static final String COL_ACTION = "action";
public static final String COL_ORDERID = "orderId";
public static final String COL_RELID = "relId";
public static final String COL_NAMECODE = "nameCode";
public static final String COL_BATCHNO = "batchNo";
public static final String COL_PRODUCEDATE = "produceDate";
public static final String COL_EXPIREDATE = "expireDate";
public static final String COL_SERIALNO = "serialNo";
public static final String COL_SUPID = "supId";
public static final String COL_COUNT = "count";
public static final String COL_RECOUNT = "reCount";
public static final String COL_DEPTCODE = "deptCode";
public static final String COL_INVCODE = "invCode";
public static final String COL_INVSPACECODE = "invSpaceCode";
public static final String COL_PURCHASETYPE = "purchaseType";
public static final String COL_UPDATETIME = "updateTime";
}

@ -0,0 +1,133 @@
package com.glxp.api.entity.inv;
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.util.Date;
/**
*
*/
@Data
@TableName(value = "inv_prein_product")
public class InvPreinProductEntity {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* ID
*/
@TableField(value = "relIdFk")
private Long relIdFk;
/**
*
*/
@TableField(value = "nameCode")
private String nameCode;
/**
*
*/
@TableField(value = "batchNo")
private String batchNo;
/**
*
*/
@TableField(value = "productionDate")
private String productionDate;
/**
*
*/
@TableField(value = "expireDate")
private String expireDate;
/**
*
*/
@TableField(value = "inCount")
private int inCount;
/**
*
*/
@TableField(value = "outCount")
private int outCount;
/**
*
*/
@TableField(value = "reCount")
private int reCount;
/**
* ID
*/
@TableField(value = "customerId")
private String customerId;
/**
* ID
*/
@TableField(value = "supId")
private String supId;
/**
*
*/
@TableField(value = "deptCode")
private String deptCode;
/**
*
*/
@TableField(value = "invCode")
private String invCode;
/**
*
*/
@TableField(value = "createTime")
private Date createTime;
/**
*
*/
@TableField(value = "updateTime")
private Date updateTime;
public static final String COL_ID = "id";
public static final String COL_RELIDFK = "relIdFk";
public static final String COL_NAMECODE = "nameCode";
public static final String COL_BATCHNO = "batchNo";
public static final String COL_PRODUCTIONDATE = "productionDate";
public static final String COL_EXPIREDATE = "expireDate";
public static final String COL_INCOUNT = "inCount";
public static final String COL_OUTCOUNT = "outCount";
public static final String COL_RECOUNT = "reCount";
public static final String COL_CUSTOMERID = "customerId";
public static final String COL_SUPID = "supId";
public static final String COL_DEPTCODE = "deptCode";
public static final String COL_INVCODE = "invCode";
public static final String COL_CREATETIME = "createTime";
public static final String COL_UPDATETIME = "updateTime";
}

@ -260,7 +260,7 @@ public class BussinessTypeSaveRequest {
/**
* 使
*/
private Boolean spUse;
private Integer spUse;
/**
*
@ -294,12 +294,13 @@ public class BussinessTypeSaveRequest {
private boolean fillCodeRel;
private boolean checkVailDate;
private boolean checkExpire;
private boolean checkCertExpire;
private String preInBackAction;
private Integer backPreinType;
private String checkPreInOrders;
}

@ -0,0 +1,101 @@
package com.glxp.api.req.inv;
import com.glxp.api.util.page.ListPageRequest;
import lombok.Data;
import java.util.List;
/**
*
*/
@Data
public class FilterInvPreinProductRequest extends ListPageRequest {
private String id;
/**
*
*/
private String cpmctymc;
/**
* DI
*/
private String nameCode;
/**
* UDI
*/
private String udiCode;
/**
* ID
*/
private String relIdFk;
/**
*
*/
private String ggxh;
/**
*
*/
private String batchNo;
/**
*
*/
private String productionDate;
/**
*
*/
private String expireDate;
/**
*
*/
private String ylqxzcrbarmc;
/**
*
*/
private String zczbhhzbapzbh;
/**
* ID
*/
private String customerId;
/**
* ID
*/
private String supId;
/**
*
*/
private String supName;
/**
*
*/
private String deptCode;
/**
*
*/
private String invCode;
/**
*
*/
private List<String> invCodes;
/**
*
*/
private String cplb;
}

@ -46,7 +46,7 @@ public class BasicBussinessTypeResponse {
private Boolean changeEnable;
private Boolean genUnit;
private String defaultUnit;
private Boolean spUse;
private int spUse;
private Boolean secCheckEnable;
private boolean checkUdims;
private boolean checkPdaEd;
@ -147,8 +147,7 @@ public class BasicBussinessTypeResponse {
private boolean checkVailDate;
private boolean checkExpire;
private boolean checkCertExpire;
private String preInBackAction;
private Integer backPreinType;
private String checkPreInOrders;
}

@ -0,0 +1,108 @@
package com.glxp.api.res.inv;
import lombok.Data;
/**
* VO
*/
@Data
public class InvPreinProductResponse {
private Integer id;
/**
* DI
*/
private String nameCode;
/**
*
*/
private String cpmctymc;
/**
* ID
*/
private String relIdFk;
/**
*
*/
private String ggxh;
/**
*
*/
private String batchNo;
/**
*
*/
private String productionDate;
/**
*
*/
private String expireDate;
/**
*
*/
private String ylqxzcrbarmc;
/**
*
*/
private String zczbhhzbapzbh;
/**
*
*/
private int inCount;
/**
*
*/
private int outCount;
/**
*
*/
private int reCount;
/**
* ID
*/
private String customerId;
/**
*
*/
private String supName;
/**
* ID
*/
private String supId;
/**
*
*/
private String deptName;
/**
*
*/
private String invName;
/**
*
*/
private String deptCode;
/**
*
*/
private String invCode;
}

@ -2,13 +2,16 @@ package com.glxp.api.service.inout;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.inout.*;
import com.glxp.api.entity.inv.InvInnerOrderPdfTempEntity;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.res.inout.IoOrderCheckResultResponse;
import com.glxp.api.res.inout.IoOrderDetailBizResponse;
@ -16,18 +19,29 @@ import com.glxp.api.res.inout.IoOrderDetailCodeResponse;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.inv.InvPreinDetailService;
import com.glxp.api.service.inv.InvPreinOrderService;
import com.glxp.api.service.inv.InvPreinProductDetailService;
import com.glxp.api.util.CustomUtil;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.JasperUtils;
import com.glxp.api.util.OrderNoTypeBean;
import com.glxp.api.util.udi.FilterUdiUtils;
import com.glxp.api.util.udi.UdiCalCountUtil;
import net.sf.jasperreports.engine.JRException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.*;
/**
*
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class IoCheckInoutService {
@Resource
@ -48,6 +62,8 @@ public class IoCheckInoutService {
InvPreinDetailService invPreinDetailService;
@Resource
IoGenInvService genInvService;
@Resource
IoAddInoutService addInoutService;
//判断是否需要手动校验
public boolean checkManual(String billNo) {
@ -719,97 +735,85 @@ public class IoCheckInoutService {
@Resource
IoChangeInoutService changeInoutService;
@Resource
InvPreinProductDetailService invPreinProductDetailService;
@Resource
UdiCalCountUtil udiCalCountUtil;
//校验完成后生成库存
public void genInv(IoOrderEntity orderEntity, BasicBussinessTypeEntity bussinessTypeEntity) {
//预验收出库,删掉对应预验收库存
if (bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_OUT) && bussinessTypeEntity.isScanPreIn()) {
List<IoCodeEntity> codeList = codeService.findByOrderId(orderEntity.getBillNo());
//找出UDI码对应的预验收入库单号
Map<String, String> preInOrder = new HashMap<>();
for (IoCodeEntity warehouseEntity : codeList) {
List<InvPreinDetailEntity> invProductDetailEntities = invPreinDetailService.findByCode(warehouseEntity.getCode());
if (invProductDetailEntities.size() > 0) {
for (InvPreinDetailEntity invPreinDetailEntity : invProductDetailEntities) {
preInOrder.put(invPreinDetailEntity.getOrderId(), invPreinDetailEntity.getOrderId());
invPreinDetailEntity.setStatus(ConstantStatus.INVIN_USE);
invPreinDetailService.update(invPreinDetailEntity);
}
}
}
if (preInOrder.size() > 0) {
if (StrUtil.isEmpty(orderEntity.getRelKey())) {
orderEntity.setRelKey(UUID.fastUUID().toString(true));
}
String preInBillNo = "";
boolean isBreak = false;
for (String key : preInOrder.keySet()) {
if (!isBreak) {
preInBillNo = preInBillNo + "," + key;
IoOrderEntity preInEntity = orderService.findByBillNo(key);
preInEntity.setPreOutBillNo(orderEntity.getBillNo());
preInEntity.setRelKey(orderEntity.getRelKey());
orderService.update(preInEntity);
BasicBussinessTypeEntity preBusType = basicBussinessTypeService.findByAction(preInEntity.getAction());
//预验收不删除单号,方便后续查询
if (preBusType.isPreInBack()) { //预验收如果带回,则清空相关预验收库存;
invPreinDetailService.updateBack(preInEntity.getBillNo());
// invPreinDetailService.deleteByOrderId(preInEntity.getBillNo());
} else { //预验收如果不带回,则清除已出库相关库存
for (IoCodeEntity codeEntity : codeList) {
if (StrUtil.isEmpty(codeEntity.getSerialNo())) {
InvPreinDetailEntity invPreinDetailEntity = invPreinDetailService.findByCode(key, codeEntity.getCode());
if (invPreinDetailEntity != null) {
int count = 0;
if (invPreinDetailEntity.getCount() < codeEntity.getCount()) {
count = 0;
ThreadUtil.execAsync(() -> {
if (StrUtil.isNotEmpty(bussinessTypeEntity.getPreInBackAction())) {
if (bussinessTypeEntity.getBackPreinType() == 1) { //按单退货
String orderIds = bussinessTypeEntity.getCheckPreInOrders();
if (StrUtil.isNotEmpty(orderIds)) {
String[] orderIdArray = StringUtils.split(",");
List<String> orderList = CollUtil.toList(orderIdArray);
List<IoCodeEntity> outCodeEntitys = codeService.findByOrderId(orderEntity.getBillNo());
List<IoCodeEntity> preInCodeEntities = codeService.findByOrderIds(orderList, null);
// 扣减数量
for (IoCodeEntity preInCodeEntity : preInCodeEntities) {
for (IoCodeEntity codeEntity : outCodeEntitys) {
if (preInCodeEntity.getCode().equals(codeEntity.getCode())) {
int count = preInCodeEntity.getMyCount() - codeEntity.getMyCount();
int reCount = preInCodeEntity.getMyReCount() - codeEntity.getMyReCount();
if (count > 0) {
preInCodeEntity.setCount(count);
preInCodeEntity.setReCount(reCount);
codeEntity.setCount(0);
codeEntity.setReCount(0);
} else if (count < 0) {
preInCodeEntity.setCount(0);
preInCodeEntity.setReCount(0);
codeEntity.setCount(-count);
codeEntity.setReCount(-reCount);
} else {
count = invPreinDetailEntity.getCount() - codeEntity.getCount();
}
if (count >= 0) {
isBreak = true;
if (count == 0) {
// invPreinDetailService.deleteByCode(key, codeEntity.getCode());
} else {
invPreinDetailEntity.setStatus(ConstantStatus.INVIN_IN);
invPreinDetailEntity.setCount(count);
invPreinDetailService.update(invPreinDetailEntity);
}
int reCount = invPreinDetailEntity.getReCount() - codeEntity.getMyReCount();
if (reCount == 0) {
// invPreinDetailService.deleteByCode(key, codeEntity.getCode());
} else {
invPreinDetailEntity.setStatus(ConstantStatus.INVIN_IN);
invPreinDetailEntity.setReCount(reCount);
invPreinDetailService.update(invPreinDetailEntity);
}
preInCodeEntity.setCount(0);
preInCodeEntity.setReCount(0);
codeEntity.setCount(0);
codeEntity.setReCount(0);
}
}
}
} else {
// invPreinDetailService.deleteByCode(key, codeEntity.getCode());
}
List<IoCodeEntity> backCodeList = new ArrayList<>();
for (IoCodeEntity codeEntity : preInCodeEntities) {
if (codeEntity.getMyCount() > 0) {
backCodeList.add(codeEntity);
}
}
genBackOrder(orderEntity, backCodeList);
}
}
} else { //按仓库货位退货
List<IoCodeEntity> backCodeList = new ArrayList<>();
List<IoCodeEntity> codeList = codeService.findByOrderId(orderEntity.getBillNo());
for (IoCodeEntity codeEntity : codeList) {
int count = invPreinProductDetailService.findCountByCode(codeEntity.getCode());
if (count > 0) {
codeEntity.setCount(count);
codeEntity.setReCount(udiCalCountUtil.getActCount(codeEntity.getNameCode()));
backCodeList.add(codeEntity);
genBackOrder(orderEntity, backCodeList);
}
}
}
}
orderEntity.setPreInBillNo(preInBillNo.substring(1));
orderService.update(orderEntity);
}
});
}
//校验是否是不入库存单据
if (bussinessTypeEntity.isInStock()) {
// if (bussinessTypeEntity.getBusType() == ConstantStatus.BUS_TYPE_NORMAL) {
//生成库存
if (bussinessTypeEntity.getActionType() == ConstantStatus.ACTION_TYPE_PREIN) {
genInvService.genPreInInv(orderEntity.getBillNo());
@ -822,11 +826,63 @@ public class IoCheckInoutService {
//不入库存,直接进行单据流转
changeInoutService.changeOrder(orderEntity);
}
}
public void genBackOrder(IoOrderEntity orderEntity, List<IoCodeEntity> backCodeList) {
if (CollUtil.isEmpty(backCodeList))
return;
BasicBussinessTypeEntity basicBussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (StrUtil.isNotEmpty(basicBussinessTypeEntity.getPreInBackAction())) {
IoOrderEntity outOrder = new IoOrderEntity();
outOrder.setId(null);
outOrder.setMainAction(ConstantType.TYPE_OUT);
outOrder.setAction(basicBussinessTypeEntity.getAction());
outOrder.setCreateTime(new Date());
outOrder.setFromType(ConstantStatus.FROM_BACK);
String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(basicBussinessTypeEntity.getPrefix()), "yyyyMMdd"));
outOrder.setBillNo(orderNo);
outOrder.setCustomerId(Constant.SYSTEM_CUSTOMER_ID);
outOrder.setCorpOrderId(CustomUtil.getId() + "x");
outOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS);
orderEntity.setUllageSupNo(outOrder.getBillNo());
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
outOrder.setOriginUllageSupNo(orderEntity.getBillNo());
outOrder.setCreateUser(null);
outOrder.setReviewUser(null);
orderService.insertOrder(outOrder);
//生成条码
List<IoCodeTempEntity> codeTempEntities = new ArrayList<>();
for (IoCodeEntity warehouseEntity : backCodeList) {
IoCodeTempEntity codeTempEntity = new IoCodeTempEntity();
BeanUtils.copyProperties(warehouseEntity, codeTempEntity);
codeTempEntity.setId(null);
codeTempEntity.setOrderId(outOrder.getBillNo());
codeTempEntity.setAction(outOrder.getAction());
codeTempEntity.setMainAction(outOrder.getMainAction());
codeTempEntity.setCreateTime(new Date());
codeTempEntity.setUpdateTime(new Date());
codeTempEntities.add(codeTempEntity);
}
codeTempService.insertBatch(codeTempEntities);
addInoutService.dealProcess(outOrder);
if (!checkManual(outOrder.getBillNo())) {
check(outOrder.getBillNo());
}
}
}
// 预验收使用出库处理1.不带回扣库存;2.带回时生成退货出库单
@Resource
GennerOrderUtils gennerOrderUtils;
public String checkId(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
if (bizEntity.getBindRlFk().longValue() == codeEntity.getBindRlFk().longValue()) {

@ -21,6 +21,13 @@ public interface IoCodeService {
public IoCodeEntity findByUnique(String orderId, String code);
List<IoCodeEntity> findByOrderIds(List<String> orderIds, String code);
int findByOrderIdsCount(List<String> orderIds, String code);
boolean isExitByRelId(String relId);
/**
*
*

@ -1,6 +1,7 @@
package com.glxp.api.service.inout.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
@ -66,6 +67,36 @@ public class IoCodeServiceImpl implements IoCodeService {
return ioCodeDao.selectOne(new QueryWrapper<IoCodeEntity>().eq("orderId", orderId).eq("code", code));
}
@Override
public List<IoCodeEntity> findByOrderIds(List<String> orderIds, String code) {
if (StrUtil.isNotEmpty(code))
return ioCodeDao.selectList(new QueryWrapper<IoCodeEntity>().eq("code", code).in("orderId", orderIds));
else {
return ioCodeDao.selectList(new QueryWrapper<IoCodeEntity>().in("orderId", orderIds));
}
}
@Override
public int findByOrderIdsCount(List<String> orderIds, String code) {
List<IoCodeEntity> codeEntities = findByOrderIds(orderIds, code);
if (CollUtil.isNotEmpty(codeEntities)) {
int count = 0;
for (IoCodeEntity codeEntity : codeEntities) {
count = count + codeEntity.getMyCount();
}
return count;
}
return 0;
}
@Override
public boolean isExitByRelId(String relId) {
// return ioCodeDao.selectList(new QueryWrapper<IoCodeEntity>().eq("relId", relId).last("limit 1"));
return ioCodeDao.exists(new QueryWrapper<IoCodeEntity>().eq("relId", relId));
}
@Override
public List<IoCodeEntity> filterCodeList(FilterCodeRequest filterCodeRequest) {
if (null == filterCodeRequest) {

@ -0,0 +1,56 @@
package com.glxp.api.service.inv;
import com.glxp.api.entity.inv.InvPreInProductDetailEntity;
import com.glxp.api.req.inv.FilterInvPreProductDetailRequest;
import com.glxp.api.req.inv.FilterInvProductDetailRequest;
import com.glxp.api.res.inv.InvPreProductDetailResponse;
import java.util.List;
/**
* Service
*/
public interface InvPreinProductDetailService {
int insert(InvPreInProductDetailEntity invPreInProductDetailEntity);
boolean insertList(List<InvPreInProductDetailEntity> invPreProductDetailEntities);
List<InvPreInProductDetailEntity> selectByOrderIdFk(String billNo);
List<InvPreInProductDetailEntity> findByCode(String code);
InvPreInProductDetailEntity selectByCode(String billNo, String code);
boolean update(InvPreInProductDetailEntity invPreInProductDetailEntity);
boolean deleteById(String id);
int deleteByOrderId(String billNo);
/**
*
*
* @param invPreProductDetailRequest
* @return
*/
List<InvPreInProductDetailEntity> filterPreProductDetailList(FilterInvPreProductDetailRequest invPreProductDetailRequest);
/**
*
*
* @param response
*/
void setOrderInfo(InvPreProductDetailResponse response);
/**
*
*
* @param detailRequest
*/
boolean deleteInvPreProductDetail(FilterInvProductDetailRequest detailRequest);
int findCountByCode(String code);
InvPreInProductDetailEntity findUseOneByCode(String code);
}

@ -0,0 +1,48 @@
package com.glxp.api.service.inv;
import com.glxp.api.entity.inv.InvPreinProductEntity;
import com.glxp.api.req.inv.FilterInvPreinProductRequest;
import com.glxp.api.res.inv.InvPreinProductResponse;
import java.util.List;
/**
* Service
*/
public interface InvPreinProductService {
int insert(InvPreinProductEntity invPreinProductEntity);
boolean update(InvPreinProductEntity invPreinProductEntity);
InvPreinProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode);
boolean deleteById(Integer id);
/**
* VO
*
* @param filterInvPreinDetailRequest
* @return
*/
List<InvPreinProductResponse> filterList(FilterInvPreinProductRequest filterInvPreinDetailRequest);
/**
*
*
* @param invPreProductRequest
* @return
*/
List<InvPreinProductEntity> filterPreinProductList(FilterInvPreinProductRequest invPreProductRequest);
/**
* ID
*
* @param id
* @return
*/
InvPreinProductEntity findById(String id);
boolean isExitByRelId(String relId);
}

@ -0,0 +1,167 @@
package com.glxp.api.service.inv.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.dao.basic.BasicBussinessTypeDao;
import com.glxp.api.dao.basic.UdiProductDao;
import com.glxp.api.dao.inout.IoOrderDao;
import com.glxp.api.dao.inv.InvPreInProductDetailDao;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.inv.InvPreInProductDetailEntity;
import com.glxp.api.req.inv.FilterInvPreProductDetailRequest;
import com.glxp.api.req.inv.FilterInvProductDetailRequest;
import com.glxp.api.res.inv.InvPreProductDetailResponse;
import com.glxp.api.service.inv.InvPreinProductDetailService;
import com.glxp.api.util.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class InvPreInProductDetailServiceImpl implements InvPreinProductDetailService {
@Resource
private InvPreInProductDetailDao invPreInProductDetailDao;
@Resource
private BasicBussinessTypeDao bussinessTypeDao;
@Resource
private IoOrderDao orderDao;
@Resource
private UdiProductDao udiProductDao;
@Override
public int insert(InvPreInProductDetailEntity invPreInProductDetailEntity) {
return invPreInProductDetailDao.insert(invPreInProductDetailEntity);
}
@Override
public boolean insertList(List<InvPreInProductDetailEntity> invPreProductDetailEntities) {
return invPreInProductDetailDao.insertBatch(invPreProductDetailEntities);
}
@Override
public List<InvPreInProductDetailEntity> selectByOrderIdFk(String billNo) {
if (StrUtil.isEmpty(billNo))
return null;
List<InvPreInProductDetailEntity> invProductDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper<InvPreInProductDetailEntity>().eq("orderId", billNo));
return invProductDetailEntities;
}
@Override
public List<InvPreInProductDetailEntity> findByCode(String code) {
List<InvPreInProductDetailEntity> invPreinDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper<InvPreInProductDetailEntity>().eq("code", code));
return invPreinDetailEntities;
}
@Override
public InvPreInProductDetailEntity selectByCode(String billNo, String code) {
List<InvPreInProductDetailEntity> invProductDetailEntities = invPreInProductDetailDao.selectList
(new QueryWrapper<InvPreInProductDetailEntity>().eq("code", code).eq("orderId", billNo));
if (CollUtil.isNotEmpty(invProductDetailEntities))
return invProductDetailEntities.get(0);
else
return null;
}
@Override
public boolean update(InvPreInProductDetailEntity invPreInProductDetailEntity) {
return invPreInProductDetailDao.updateById(invPreInProductDetailEntity) == 1 ? true : false;
}
@Override
public boolean deleteById(String id) {
return invPreInProductDetailDao.deleteById(id) == 1 ? true : false;
}
@Override
public int deleteByOrderId(String billNo) {
return invPreInProductDetailDao.delete(new QueryWrapper<InvPreInProductDetailEntity>().eq("orderId", billNo));
}
@Override
public List<InvPreInProductDetailEntity> filterPreProductDetailList(FilterInvPreProductDetailRequest invPreProductDetailRequest) {
if (null == invPreProductDetailRequest) {
return Collections.emptyList();
}
if (null != invPreProductDetailRequest.getPage() && null != invPreProductDetailRequest.getLimit()) {
PageHelper.offsetPage((invPreProductDetailRequest.getPage() - 1) * invPreProductDetailRequest.getLimit(), invPreProductDetailRequest.getLimit());
}
return invPreInProductDetailDao.filterPreProductDetailList(invPreProductDetailRequest);
}
@Override
public void setOrderInfo(InvPreProductDetailResponse response) {
//查询DI层级根据DI层级设置数量取值
Integer packLevel = udiProductDao.selectPackLevel(response.getNameCode());
//设置出入库中文及出入库数量
if (null != packLevel && packLevel != 1) {
//多级包装
if (response.getMainAction().equals(ConstantType.TYPE_OUT)) {
response.setMainActionStr("出库");
response.setOutCount(response.getReCount());
} else {
response.setMainActionStr("入库");
response.setInCount(response.getReCount());
}
} else {
//单层包装
if (response.getMainAction().equals(ConstantType.TYPE_OUT)) {
response.setMainActionStr("出库");
response.setOutCount(response.getCount());
} else {
response.setMainActionStr("入库");
response.setInCount(response.getCount());
}
}
//设置单据类型名称
BasicBussinessTypeEntity busType = bussinessTypeDao.selectOne(new QueryWrapper<BasicBussinessTypeEntity>().select("name").eq("action", response.getAction()));
response.setActionName(busType.getName());
//设置单据日期
IoOrderEntity order = orderDao.selectOne(new QueryWrapper<IoOrderEntity>().select("createTime").eq("billNo", response.getOrderId()));
response.setOrderTime(DateUtil.toDateStr(order.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
}
@Override
public boolean deleteInvPreProductDetail(FilterInvProductDetailRequest detailRequest) {
return invPreInProductDetailDao.deleteInvPreProductDetail(detailRequest);
}
@Override
public int findCountByCode(String code) {
List<InvPreInProductDetailEntity> invPreinDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper<InvPreInProductDetailEntity>().eq("code", code));
int count = 0;
if (CollUtil.isNotEmpty(invPreinDetailEntities)) {
for (InvPreInProductDetailEntity invProductDetailEntity : invPreinDetailEntities) {
if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT))
count = count + invProductDetailEntity.getReCount();
else {
count = count - invProductDetailEntity.getReCount();
}
}
}
return count;
}
@Override
public InvPreInProductDetailEntity findUseOneByCode(String code) {
List<InvPreInProductDetailEntity> invPreinDetailEntities = invPreInProductDetailDao.selectList(new QueryWrapper<InvPreInProductDetailEntity>().eq("code", code)
.eq("status", ConstantStatus.INVIN_IN).last("limit 1"));
if (CollUtil.isNotEmpty(invPreinDetailEntities)) {
return invPreinDetailEntities.get(0);
}
return null;
}
}

@ -0,0 +1,83 @@
package com.glxp.api.service.inv.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.glxp.api.dao.inv.InvPreinProductDao;
import com.glxp.api.entity.inv.InvPreinProductEntity;
import com.glxp.api.req.inv.FilterInvPreinProductRequest;
import com.glxp.api.res.inv.InvPreinProductResponse;
import com.glxp.api.service.inv.InvPreinProductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class InvPreinProductServiceImpl implements InvPreinProductService {
@Resource
private InvPreinProductDao invPreinProductDao;
@Override
public int insert(InvPreinProductEntity invPreinProductEntity) {
return invPreinProductDao.insert(invPreinProductEntity);
}
@Override
public boolean update(InvPreinProductEntity invPreinProductEntity) {
return invPreinProductDao.updateById(invPreinProductEntity) == 1 ? true : false;
}
@Override
public InvPreinProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode) {
return invPreinProductDao.selectOne(new QueryWrapper<InvPreinProductEntity>().eq("relIdFk", relId).eq(StrUtil.isNotEmpty(batchNo), "batchNo", batchNo)
.isNull(StrUtil.isEmpty(batchNo), "batchNo").eq("supId", supId).eq("deptCode", deptCode).eq("invCode", invCode));
}
@Override
public boolean deleteById(Integer id) {
return invPreinProductDao.deleteById(id) == 1 ? true : false;
}
@Override
public List<InvPreinProductResponse> filterList(FilterInvPreinProductRequest invPreProductRequest) {
if (null == invPreProductRequest) {
return Collections.emptyList();
}
if (null != invPreProductRequest.getPage()) {
PageHelper.offsetPage((invPreProductRequest.getPage() - 1) * invPreProductRequest.getLimit(), invPreProductRequest.getLimit());
}
return invPreinProductDao.filterList(invPreProductRequest);
}
@Override
public List<InvPreinProductEntity> filterPreinProductList(FilterInvPreinProductRequest invPreProductRequest) {
if (null == invPreProductRequest) {
return Collections.emptyList();
}
if (null != invPreProductRequest.getPage() && null != invPreProductRequest.getLimit()) {
PageHelper.offsetPage((invPreProductRequest.getPage() - 1) * invPreProductRequest.getLimit(), invPreProductRequest.getLimit());
}
return invPreinProductDao.filterPreProductList(invPreProductRequest);
}
@Override
public InvPreinProductEntity findById(String id) {
return invPreinProductDao.selectById(id);
}
@Override
public boolean isExitByRelId(String relId) {
return invPreinProductDao.exists(new QueryWrapper<InvPreinProductEntity>().eq("relIdFk", relId));
}
}

@ -58,76 +58,31 @@
<insert id="insertIgnoreBussinessType" parameterType="com.glxp.api.entity.basic.BasicBussinessTypeEntity">
insert
ignore
into basic_bussiness_type (mainAction, action, name, enable, remark, thirdSysFk, genUnit,
innerOrder, secCheckEnable, checkEnable, checkUdims, checkPdaEd,
checkPdaUn, checkPc, checkWebNew, checkSp, checkChange, secCheckUdims,
secCheckPdaEd, secCheckPdaUn, secCheckPc, secCheckWebNew,
secCheckChange, secCheckSp, corpType, supplementOrderType,
checkBalance, secCheckBalance, useDyCount, expireTip, updateTime,
defaultUnit, prefix, outToSpms, ullageFill, scanPreIn, vailInv,
entrutSpms, codeFillCheck, defaultSubInv, defaultInv, orderVisibleType,
checkCopy, secCheckCopy, originAction, changeEnable,
spUse, preIn, supplementAll, createUser, createTime, preInBack, vailDispatch,
vailGroupBuy, busType, inStock, actionType
, thrCheckEnable, thrCheckWebNew, thrCheckPdaUn, thrCheckPdaEd, thrCheckUdims, thrCheckPc, thrCheckSp
, thrCheckChange, thrCheckBalance, thrCheckCopy, fillCodeRel, checkVailDate, checkCertExpire,
preInBackAction, backPreinType)
values (#{mainAction},
#{action},
#{name},
#{enable},
#{remark},
#{thirdSysFk},
#{genUnit},
#{innerOrder},
#{secCheckEnable},
#{checkEnable},
#{checkUdims},
#{checkPdaEd},
#{checkPdaUn},
#{checkPc},
#{checkWebNew},
#{checkSp},
#{checkChange},
#{secCheckUdims},
#{secCheckPdaEd},
#{secCheckPdaUn},
#{secCheckPc},
#{secCheckWebNew},
#{secCheckChange},
#{secCheckSp},
#{corpType},
#{supplementOrderType},
#{checkBalance},
#{secCheckBalance},
#{useDyCount},
#{expireTip},
#{updateTime},
#{defaultUnit},
#{prefix},
#{outToSpms},
#{ullageFill},
#{scanPreIn},
#{vailInv},
#{entrutSpms},
#{codeFillCheck},
#{defaultSubInv},
#{defaultInv},
#{orderVisibleType},
#{checkCopy},
#{secCheckCopy},
#{originAction},
#{changeEnable},
#{spUse},
#{preIn},
#{supplementAll},
#{createUser},
#{createTime}, #{preInBack}, #{vailDispatch}, #{vailGroupBuy}, #{busType}, #{inStock}, #{actionType}
, #{thrCheckEnable}, #{thrCheckWebNew}, #{thrCheckPdaUn}, #{thrCheckPdaEd}, #{thrCheckUdims},
#{thrCheckPc}
, #{thrCheckSp}, #{thrCheckChange}, #{thrCheckBalance}, #{thrCheckCopy}, #{fillCodeRel}
, #{checkVailDate}, #{checkExpire}, #{checkCertExpire}, #{preInBackAction}, #{backPreinType})
ignore
into basic_bussiness_type (mainAction, action, name, enable, remark, thirdSysFk, genUnit, innerOrder,
secCheckEnable, checkEnable, checkUdims, checkPdaEd, checkPdaUn, checkPc,
checkWebNew, checkSp, checkChange, secCheckUdims, secCheckPdaEd, secCheckPdaUn,
secCheckPc, secCheckWebNew, secCheckChange, secCheckSp, corpType,
supplementOrderType, checkBalance, secCheckBalance, useDyCount, expireTip,
updateTime, defaultUnit, prefix, outToSpms, ullageFill, scanPreIn, vailInv,
entrutSpms, codeFillCheck, defaultSubInv, defaultInv, orderVisibleType,
preInBack, supplementAll, createUser, createTime, updateUser, vailDispatch,
vailGroupBuy, busType, inStock, actionType, thrCheckEnable, thrCheckWebNew,
thrCheckPdaUn, thrCheckPdaEd, thrCheckUdims, thrCheckPc, thrCheckSp,
thrCheckChange, thrCheckBalance, thrCheckCopy, fillCodeRel, checkVailDate,
checkExpire, checkCertExpire, preInBackAction, backPreinType, checkPreInOrders)
values (#{mainAction}, #{action}, #{name}, #{enable}, #{remark}, #{thirdSysFk}, #{genUnit}, #{innerOrder},
#{secCheckEnable}, #{checkEnable}, #{checkUdims}, #{checkPdaEd}, #{checkPdaUn}, #{checkPc},
#{checkWebNew}, #{checkSp}, #{checkChange}, #{secCheckUdims}, #{secCheckPdaEd}, #{secCheckPdaUn},
#{secCheckPc}, #{secCheckWebNew}, #{secCheckChange}, #{secCheckSp}, #{corpType},
#{supplementOrderType}, #{checkBalance}, #{secCheckBalance}, #{useDyCount}, #{expireTip},
#{updateTime}, #{defaultUnit}, #{prefix}, #{outToSpms}, #{ullageFill}, #{scanPreIn}, #{vailInv},
#{entrutSpms}, #{codeFillCheck}, #{defaultSubInv}, #{defaultInv}, #{orderVisibleType},
#{preInBack}, #{supplementAll}, #{createUser}, #{createTime}, #{updateUser}, #{vailDispatch},
#{vailGroupBuy}, #{busType}, #{inStock}, #{actionType}, #{thrCheckEnable}, #{thrCheckWebNew},
#{thrCheckPdaUn}, #{thrCheckPdaEd}, #{thrCheckUdims}, #{thrCheckPc}, #{thrCheckSp},
#{thrCheckChange}, #{thrCheckBalance}, #{thrCheckCopy}, #{fillCodeRel}, #{checkVailDate},
#{checkExpire}, #{checkCertExpire}, #{preInBackAction}, #{backPreinType}, #{checkPreInOrders})
</insert>
<select id="selectBusList" resultType="com.glxp.api.entity.basic.BasicBussinessTypeEntity">
@ -183,24 +138,23 @@
<select id="selectForThirdSys" resultType="com.glxp.api.entity.basic.BasicBussinessTypeEntity">
select action, name
from basic_bussiness_type
where action not in (
select code
from thr_system_bus_api)
where action not in (select code
from thr_system_bus_api)
</select>
<select id="selectCandidateBusType" resultType="com.glxp.api.entity.basic.BasicBussinessTypeEntity">
select name, action
from basic_bussiness_type
where mainAction = #{mainAction}
and corpType = 3
and (supplementOrderType is null
or supplementOrderType = '')
and corpType = 3
and (supplementOrderType is null
or supplementOrderType = '')
</select>
<select id="selectByUser" resultType="com.glxp.api.entity.basic.BasicBussinessTypeEntity">
select basic_bussiness_type.*
from basic_bussiness_type
inner join auth_user_bustype on basic_bussiness_type.action = auth_user_bustype.scAction
inner join auth_user_bustype on basic_bussiness_type.action = auth_user_bustype.scAction
<where>
<if test="name != null and name != ''">
AND basic_bussiness_type.name like concat('%', #{name}, '%')
@ -231,7 +185,7 @@
resultType="com.glxp.api.res.basic.BasicBussinessTypeResponse">
SELECT basic_bussiness_type.*
FROM basic_bussiness_type
left JOIN auth_user_bustype ON basic_bussiness_type.action = auth_user_bustype.scAction
left JOIN auth_user_bustype ON basic_bussiness_type.action = auth_user_bustype.scAction
<where>
<if test="name != ''and name != null">
AND basic_bussiness_type.name LIKE concat('%', #{name}, '%')
@ -269,7 +223,7 @@
resultType="com.glxp.api.res.basic.BasicBussinessTypeResponse">
SELECT basic_bussiness_type.*
FROM basic_bussiness_type
left JOIN auth_warehouse_bustype ON basic_bussiness_type.action = auth_warehouse_bustype.action
left JOIN auth_warehouse_bustype ON basic_bussiness_type.action = auth_warehouse_bustype.action
<where>
<if test="name != ''and name != null">
AND basic_bussiness_type.name LIKE concat('%', #{name}, '%')

@ -0,0 +1,77 @@
<?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.glxp.api.dao.inv.InvPreInProductDetailDao">
<select id="filterPreProductDetailList" resultType="com.glxp.api.entity.inv.InvPreInProductDetailEntity">
select *
from inv_prein_product_detail
<where>
<if test="code != null and code != ''">
AND code = #{code}
</if>
<if test="mainAction != null and mainAction != ''">
AND mainAction = #{mainAction}
</if>
<if test="action != null and action != ''">
AND action = #{action}
</if>
<if test="supId != null and supId != ''">
and supId = #{supId}
</if>
<if test="relId != null and relId != ''">
AND relId = #{relId}
</if>
<if test="nameCode != null and nameCode != ''">
AND nameCode like concat('%', #{nameCode}, '%')
</if>
<if test="orderId != null and orderId != ''">
AND orderId = #{orderId}
</if>
<if test="deptCode != null and deptCode != ''">
AND deptCode = #{deptCode}
</if>
<if test="invCode != null and invCode != ''">
AND invCode = #{invCode}
</if>
<if test="invSpaceCode != null and invSpaceCode != ''">
AND invSpaceCode = #{invSpaceCode}
</if>
<if test="batchNo != null and batchNo != ''">
AND batchNo = #{batchNo}
</if>
<if test="batchNo == null and batchNo == ''">
AND batchNo is null
</if>
<if test="productIdList != null and productIdList.size() != 0">
AND relId in
<foreach collection="productIdList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="updateTime != null and updateTime != ''">
AND updateTime <![CDATA[ <= ]]> #{updateTime}
</if>
</where>
</select>
<delete id="deleteInvPreProductDetail">
delete
from inv_prein_product_detail
<where>
<if test="relId != null and relId != ''">
AND relId = #{relId}
</if>
<if test="batchNo != null and batchNo != '' and batchNo != 'empty'">
AND batchNo = #{batchNo}
</if>
<if test="batchNo == 'empty'">
AND batchNo is null
</if>
<if test="supId != null and supId != ''">
AND supId = #{supId}
</if>
<if test="invCode != null and invCode != ''">
AND invCode = #{invCode}
</if>
</where>
</delete>
</mapper>

@ -0,0 +1,138 @@
<?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.glxp.api.dao.inv.InvPreinProductDao">
<select id="filterList" resultType="com.glxp.api.res.inv.InvPreinProductResponse">
select ipp.id,
ipp.nameCode,
bp.cpmctymc,
ipp.relIdFk,
bp.ggxh,
ipp.batchNo,
ipp.productionDate,
ipp.expireDate,
bp.ylqxzcrbarmc,
bp.zczbhhzbapzbh,
ipp.inCount,
ipp.outCount,
ipp.reCount,
ipp.customerId,
basic_corp.name supName,
ipp.supId,
auth_dept.name deptName,
auth_warehouse.name invName,
ipp.deptCode,
ipp.invCode
from inv_prein_product ipp
inner join basic_udirel on ipp.relIdFk = basic_udirel.id
inner join basic_products bp on basic_udirel.uuid = bp.uuid
left join basic_corp on ipp.supId = basic_corp.erpId
left join auth_dept on auth_dept.code = ipp.deptCode
left join auth_warehouse on auth_warehouse.code = ipp.invCode
<where>
bp.diType = 1
<if test="cpmctymc != null and cpmctymc != ''">
AND bp.cpmctymc like concat('%', #{cpmctymc}, '%')
</if>
<if test="nameCode != null and nameCode != ''">
AND ipp.nameCode like concat('%', #{nameCode}, '%')
</if>
<if test="relIdFk != null and relIdFk != ''">
AND ipp.relIdFk = #{relIdFk}
</if>
<if test="ggxh != null and ggxh != ''">
AND bp.ggxh like concat('%', #{ggxh}, '%')
</if>
<if test="batchNo != null and batchNo != ''">
AND ipp.batchNo like concat('%', #{batchNo}, '%')
</if>
<if test="productionDate != null and productionDate != ''">
AND ipp.productionDate = #{productionDate}
</if>
<if test="expireDate != null and expireDate != ''">
AND ipp.expireDate = #{expireDate}
</if>
<if test="ylqxzcrbarmc != null and ylqxzcrbarmc != ''">
AND bp.ylqxzcrbarmc like concat('%', #{ylqxzcrbarmc}, '%')
</if>
<if test="zczbhhzbapzbh != null and zczbhhzbapzbh != ''">
AND bp.zczbhhzbapzbh like concat('%', #{zczbhhzbapzbh}, '%')
</if>
<if test="customerId != null and customerId != ''">
AND ipp.customerId = #{customerId}
</if>
<if test="supId != null and supId != ''">
AND ipp.supId = #{supId}
</if>
<if test="deptCode != null and deptCode != ''">
AND ipp.deptCode = #{deptCode}
</if>
<if test="invCode != null and invCode != ''">
AND ipp.invCode = #{invCode}
</if>
<if test="invCodes != null and invCodes.size() != 0">
AND ipp.invCode in
<foreach collection="invCodes" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</where>
</select>
<select id="filterPreProductList" resultType="com.glxp.api.entity.inv.InvPreinProductEntity">
select ipp.*
from inv_prein_product ipp
inner join basic_udirel on ipp.relIdFk = basic_udirel.id
inner join basic_products bp on basic_udirel.uuid = bp.uuid
left join basic_corp on ipp.supId = basic_corp.erpId
left join auth_dept on auth_dept.code = ipp.deptCode
left join auth_warehouse on auth_warehouse.code = ipp.invCode
<where>
bp.diType = 1
<if test="cpmctymc != null and cpmctymc != ''">
AND bp.cpmctymc like concat('%', #{cpmctymc}, '%')
</if>
<if test="nameCode != null and nameCode != ''">
AND ipp.nameCode like concat('%', #{nameCode}, '%')
</if>
<if test="relIdFk != null and relIdFk != ''">
AND ipp.relIdFk = #{relIdFk}
</if>
<if test="ggxh != null and ggxh != ''">
AND bp.ggxh like concat('%', #{ggxh}, '%')
</if>
<if test="batchNo != null and batchNo != ''">
AND ipp.batchNo like concat('%', #{batchNo}, '%')
</if>
<if test="productionDate != null and productionDate != ''">
AND ipp.productionDate = #{productionDate}
</if>
<if test="expireDate != null and expireDate != ''">
AND ipp.expireDate = #{expireDate}
</if>
<if test="ylqxzcrbarmc != null and ylqxzcrbarmc != ''">
AND bp.ylqxzcrbarmc like concat('%', #{ylqxzcrbarmc}, '%')
</if>
<if test="zczbhhzbapzbh != null and zczbhhzbapzbh != ''">
AND bp.zczbhhzbapzbh like concat('%', #{zczbhhzbapzbh}, '%')
</if>
<if test="customerId != null and customerId != ''">
AND ipp.customerId = #{customerId}
</if>
<if test="supId != null and supId != ''">
AND ipp.supId = #{supId}
</if>
<if test="deptCode != null and deptCode != ''">
AND ipp.deptCode = #{deptCode}
</if>
<if test="invCode != null and invCode != ''">
AND ipp.invCode = #{invCode}
</if>
<if test="invCodes != null and invCodes.size() != 0">
AND ipp.invCode in
<foreach collection="invCodes" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>
Loading…
Cancel
Save