1.添加库存摆放功能接口

master
x_z 2 years ago
parent 69e0f65b61
commit e0b1296f0c

@ -0,0 +1,71 @@
package com.glxp.api.controller.inv;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
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.req.inv.FilterInvPlaceRequest;
import com.glxp.api.res.inv.BindInvSpaceRequest;
import com.glxp.api.res.inv.InvPlaceDetailResponse;
import com.glxp.api.service.inv.InvPlaceService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
/**
*
*/
@RestController
public class InvPlaceController {
@Resource
private InvPlaceService invPlaceService;
/**
*
*
* @return
*/
@GetMapping("/spms/inv/product/getPlaceDetailList")
public BaseResponse getPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest) {
List<InvPlaceDetailResponse> list = invPlaceService.getPlaceDetailList(filterInvPlaceRequest);
PageInfo<InvPlaceDetailResponse> pageInfo = new PageInfo<>(list);
return ResultVOUtils.page(pageInfo);
}
/**
*
*
* @param bindInvSpaceRequest
* @return
*/
@PostMapping("/spms/inv/product/bindInvSpace")
public BaseResponse bindInvSpace(@RequestBody @Valid BindInvSpaceRequest bindInvSpaceRequest) {
if (null == bindInvSpaceRequest) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL);
}
invPlaceService.bindInvSpace(bindInvSpaceRequest);
return ResultVOUtils.success("绑定成功");
}
/**
*
*
* @param bindInvSpaceRequest
* @return
*/
@PostMapping("/spms/inv/product/checkCodeSpace")
public BaseResponse checkCodeSpace(@RequestBody BindInvSpaceRequest bindInvSpaceRequest) {
if (null == bindInvSpaceRequest || StrUtil.isBlank(bindInvSpaceRequest.getInvCode()) || StrUtil.isBlank(bindInvSpaceRequest.getInvSpaceCode()) || StrUtil.isBlank(bindInvSpaceRequest.getCode())) {
return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL);
}
return invPlaceService.checkCodeSpace(bindInvSpaceRequest);
}
}

@ -86,4 +86,13 @@ public interface InvSubWarehouseDao extends BaseMapperPlus<InvSubWarehouseDao, I
* @return
*/
List<InvWarehouseEntity> selectInvListByUser(@Param("userId") Long userId);
/**
*
*
* @param invCode
* @return
*/
String selectParentIdByCode(@Param("invCode") String invCode);
}

@ -2,8 +2,12 @@ package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.req.inv.FilterInvPlaceRequest;
import com.glxp.api.req.inv.FilterInvProductDetailRequest;
import com.glxp.api.res.inv.BindInvSpaceRequest;
import com.glxp.api.res.inv.InvPlaceDetailResponse;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -18,5 +22,35 @@ public interface InvProductDetailDao extends BaseMapperPlus<InvProductDetailDao,
*/
List<InvProductDetailEntity> filterInvProductDetailList(FilterInvProductDetailRequest filterInvProductDetailRequest);
/**
*
*
* @param detailRequest
* @return
*/
boolean deleteInvProductDetail(FilterInvProductDetailRequest detailRequest);
/**
*
*
* @param filterInvPlaceRequest
* @return
*/
List<InvPlaceDetailResponse> selectPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest);
/**
*
*
* @param ids
* @param invSpaceCode
*/
void batchBindSpace(@Param("ids") List<Integer> ids, @Param("invSpaceCode") String invSpaceCode);
/**
* UDI
*
* @param bindInvSpaceRequest
* @return
*/
InvProductDetailEntity selectByInvAndCode(BindInvSpaceRequest bindInvSpaceRequest);
}

@ -0,0 +1,27 @@
package com.glxp.api.req.inv;
import com.glxp.api.util.page.ListPageRequest;
import lombok.Data;
/**
*
*/
@Data
public class FilterInvPlaceRequest extends ListPageRequest {
/**
*
*/
private String deptCode;
/**
*
*/
private String invCode;
/**
*
*/
private String invSpaceCode;
}

@ -0,0 +1,43 @@
package com.glxp.api.res.inv;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
*
*/
@Data
public class BindInvSpaceRequest {
/**
*
*/
private String deptCode;
/**
*
*/
@NotBlank(message = "请选择仓库")
private String invCode;
/**
*
*/
@NotBlank(message = "请选择货位")
private String invSpaceCode;
/**
*
*/
@NotEmpty(message = "请扫描货物条码")
private List<String> codeArray;
/**
* UDI
*/
private String code;
}

@ -0,0 +1,101 @@
package com.glxp.api.res.inv;
import lombok.Data;
/**
*
*/
@Data
public class InvPlaceDetailResponse {
/**
* ID
*/
private Integer id;
/**
* UDI
*/
private String code;
/**
* ID
*/
private String relId;
/**
*
*/
private String productName;
/**
*
*/
private String ggxh;
/**
*
*/
private String mainAction;
/**
*
*/
private String batchNo;
/**
*
*/
private String productionDate;
/**
*
*/
private String expireDate;
/**
* DI
*/
private String nameCode;
/**
*
*/
private String zczbhhzbapzbh;
/**
*
*/
private String ylqxzcrbarmc;
/**
*
*/
private String deptCode;
/**
*
*/
private String invCode;
/**
*
*/
private String invSpaceCode;
/**
*
*/
private String deptName;
/**
*
*/
private String invName;
/**
*
*/
private String invSpaceName;
}

@ -0,0 +1,37 @@
package com.glxp.api.service.inv;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.req.inv.FilterInvPlaceRequest;
import com.glxp.api.res.inv.BindInvSpaceRequest;
import com.glxp.api.res.inv.InvPlaceDetailResponse;
import java.util.List;
/**
* Service
*/
public interface InvPlaceService {
/**
*
*
* @param filterInvPlaceRequest
* @return
*/
List<InvPlaceDetailResponse> getPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest);
/**
*
*
* @param bindInvSpaceRequest
*/
void bindInvSpace(BindInvSpaceRequest bindInvSpaceRequest);
/**
*
*
* @param bindInvSpaceRequest
* @return
*/
BaseResponse checkCodeSpace(BindInvSpaceRequest bindInvSpaceRequest);
}

@ -0,0 +1,85 @@
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.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.dao.auth.InvSpaceDao;
import com.glxp.api.dao.auth.InvSubWarehouseDao;
import com.glxp.api.dao.inv.InvProductDetailDao;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.req.inv.FilterInvPlaceRequest;
import com.glxp.api.res.inv.BindInvSpaceRequest;
import com.glxp.api.res.inv.InvPlaceDetailResponse;
import com.glxp.api.service.inv.InvPlaceService;
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;
import java.util.stream.Collectors;
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class InvPlaceServiceImpl implements InvPlaceService {
@Resource
private InvProductDetailDao invProductDetailDao;
@Resource
private InvSubWarehouseDao invSubWarehouseDao;
@Resource
private InvSpaceDao invSpaceDao;
@Override
public List<InvPlaceDetailResponse> getPlaceDetailList(FilterInvPlaceRequest filterInvPlaceRequest) {
if (null == filterInvPlaceRequest) {
return Collections.emptyList();
}
if (null != filterInvPlaceRequest.getPage() && null != filterInvPlaceRequest.getLimit()) {
PageHelper.offsetPage((filterInvPlaceRequest.getPage() - 1) * filterInvPlaceRequest.getLimit(), filterInvPlaceRequest.getLimit());
}
return invProductDetailDao.selectPlaceDetailList(filterInvPlaceRequest);
}
@Override
public void bindInvSpace(BindInvSpaceRequest bindInvSpaceRequest) {
//查询仓库的部门ID
String deptCode = invSubWarehouseDao.selectParentIdByCode(bindInvSpaceRequest.getInvCode());
List<InvProductDetailEntity> list = invProductDetailDao.selectList(new QueryWrapper<InvProductDetailEntity>()
.select("id")
.eq("deptCode", deptCode)
.eq("invCode", bindInvSpaceRequest.getInvCode())
.in("code", bindInvSpaceRequest.getCodeArray())
);
if (CollUtil.isNotEmpty(list)) {
List<Integer> ids = list.stream().map(InvProductDetailEntity::getId).collect(Collectors.toList());
log.info("本次绑定货位的库存详情数量为:{} 条", ids.size());
invProductDetailDao.batchBindSpace(ids, bindInvSpaceRequest.getInvSpaceCode());
} else {
log.info("绑定货位列表查询无数据");
}
}
@Override
public BaseResponse checkCodeSpace(BindInvSpaceRequest bindInvSpaceRequest) {
//查询仓库的部门ID
String deptCode = invSubWarehouseDao.selectParentIdByCode(bindInvSpaceRequest.getInvCode());
bindInvSpaceRequest.setDeptCode(deptCode);
//查询此库存详情的信息
InvProductDetailEntity invProductDetailEntity = invProductDetailDao.selectByInvAndCode(bindInvSpaceRequest);
if (null == invProductDetailEntity) {
return ResultVOUtils.error(ResultEnum.DATA_ERROR, "此货物非当前仓库物品,无法绑定货位");
}
if (StrUtil.isNotBlank(invProductDetailEntity.getInvSpaceCode()) && !bindInvSpaceRequest.getInvSpaceCode().equals(invProductDetailEntity.getInvSpaceCode())) {
String invSpaceName = invSpaceDao.selectNameByCode(invProductDetailEntity.getDeptCode(), invProductDetailEntity.getInvCode(), invProductDetailEntity.getInvSpaceCode());
return ResultVOUtils.error(ResultEnum.DATA_REPEAT, "此货物已绑定 " + invSpaceName + " 货位,是否重新绑定?");
}
return ResultVOUtils.success();
}
}

@ -341,4 +341,8 @@
inner join auth_warehouse_user on auth_warehouse.code = auth_warehouse_user.code
where userId = #{userId}
</select>
<select id="selectParentIdByCode" resultType="java.lang.String">
select parentId from auth_warehouse where code = #{invCode}
</select>
</mapper>

@ -77,4 +77,57 @@
</if>
</where>
</delete>
<select id="selectPlaceDetailList" resultType="com.glxp.api.res.inv.InvPlaceDetailResponse">
select pd.id,
pd.code,
pd.relId,
pd.batchNo,
pd.produceDate productionDate,
pd.expireDate,
bp.ggxh,
bp.cpmctymc productName,
bp.zczbhhzbapzbh,
bp.ylqxzcrbarmc,
bp.nameCode,
ad.name deptName,
aw.name invName,
sp.name invSpaceName
from inv_product_detail pd
left join basic_udirel bu on pd.relId = bu.id
left join basic_products bp on bp.uuid = bu.uuid
left join auth_dept ad on pd.deptCode = ad.code
left join auth_warehouse aw on pd.invCode = aw.code
left join auth_space sp on pd.invSpaceCode = sp.code
and sp.invStorageCode = pd.deptCode and sp.invWarehouseCode = pd.invCode
<where>
<if test="deptCode != null and deptCode != ''">
AND pd.deptCode = #{deptCode}
</if>
<if test="invCode != null and invCode != ''">
AND pd.invCode = #{invCode}
</if>
<if test="invSpaceCode != null and invSpaceCode != ''">
AND pd.invSpaceCode = #{invSpaceCode}
</if>
</where>
</select>
<update id="batchBindSpace">
update inv_product_detail
set invSpaceCode = #{invSpaceCode}
where id in
<foreach collection="ids" index="index" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</update>
<select id="selectByInvAndCode" resultType="com.glxp.api.entity.inv.InvProductDetailEntity">
select *
from inv_product_detail
where deptCode = #{deptCode}
and invCode = #{invCode}
and code = #{code}
limit 1
</select>
</mapper>

Loading…
Cancel
Save