优化序列号和批次商品的逻辑

This commit is contained in:
季圣华
2021-09-29 19:44:59 +08:00
parent fdfcc81147
commit ecb0edca29
7 changed files with 67 additions and 50 deletions

View File

@@ -72,11 +72,12 @@ public class BusinessConstants {
* */ * */
public static final String SUB_TYPE_PURCHASE_ORDER = "采购订单"; public static final String SUB_TYPE_PURCHASE_ORDER = "采购订单";
public static final String SUB_TYPE_PURCHASE = "采购"; public static final String SUB_TYPE_PURCHASE = "采购";
public static final String SUB_TYPE_PURCHASE_TETURNS = "采购退货"; public static final String SUB_TYPE_PURCHASE_RETURN = "采购退货";
public static final String SUB_TYPE_OTHER = "其它"; public static final String SUB_TYPE_OTHER = "其它";
public static final String SUB_TYPE_RETAIL = "零售"; public static final String SUB_TYPE_RETAIL = "零售";
public static final String SUB_TYPE_SALES_ORDER = "销售订单"; public static final String SUB_TYPE_SALES_ORDER = "销售订单";
public static final String SUB_TYPE_SALES = "销售"; public static final String SUB_TYPE_SALES = "销售";
public static final String SUB_TYPE_SALES_RETURN = "销售退货";
public static final String SUB_TYPE_TRANSFER = "调拨"; public static final String SUB_TYPE_TRANSFER = "调拨";
/** /**
* 批量插入sql时最大的数据条数 * 批量插入sql时最大的数据条数

View File

@@ -199,6 +199,8 @@ public class MaterialController {
item.put("model", material.getModel()); item.put("model", material.getModel());
item.put("unit", material.getCommodityUnit() + ratio); item.put("unit", material.getCommodityUnit() + ratio);
item.put("sku", material.getSku()); item.put("sku", material.getSku());
item.put("enableSerialNumber", material.getEnableSerialNumber());
item.put("enableBatchNumber", material.getEnableBatchNumber());
BigDecimal stock; BigDecimal stock;
if(StringUtil.isNotEmpty(material.getSku())){ if(StringUtil.isNotEmpty(material.getSku())){
stock = depotItemService.getSkuStockByParam(depotId,material.getMeId(),null,null); stock = depotItemService.getSkuStockByParam(depotId,material.getMeId(),null,null);

View File

@@ -93,25 +93,25 @@ public class SerialNumberController {
* 获取序列号商品 * 获取序列号商品
* @param name * @param name
* @param depotId * @param depotId
* @param materialId * @param barCode
* @param currentPage * @param currentPage
* @param pageSize * @param pageSize
* @param request * @param request
* @return * @return
* @throws Exception * @throws Exception
*/ */
@GetMapping(value = "/getEnableSerialNumberList") @GetMapping(value = "/serialNumber/getEnableSerialNumberList")
public BaseResponseInfo getEnableSerialNumberList(@RequestParam("name") String name, public BaseResponseInfo getEnableSerialNumberList(@RequestParam("name") String name,
@RequestParam("depotId") Long depotId, @RequestParam("depotId") Long depotId,
@RequestParam("materialId") Long materialId, @RequestParam("barCode") String barCode,
@RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage, @RequestParam("page") Integer currentPage,
@RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize, @RequestParam("rows") Integer pageSize,
HttpServletRequest request)throws Exception { HttpServletRequest request)throws Exception {
BaseResponseInfo res = new BaseResponseInfo(); BaseResponseInfo res = new BaseResponseInfo();
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
try { try {
List<SerialNumber> list = serialNumberService.getEnableSerialNumberList(name, depotId, materialId, (currentPage-1)*pageSize, pageSize); List<SerialNumber> list = serialNumberService.getEnableSerialNumberList(name, depotId, barCode, (currentPage-1)*pageSize, pageSize);
Long total = serialNumberService.getEnableSerialNumberCount(name, depotId, materialId); Long total = serialNumberService.getEnableSerialNumberCount(name, depotId, barCode);
map.put("rows", list); map.put("rows", list);
map.put("total", total); map.put("total", total);
res.code = 200; res.code = 200;

View File

@@ -51,7 +51,7 @@ public interface SerialNumberMapperEx {
* 卖出: update jsh_serial_number set is_Sell='1' ,depothead_Id='depotheadId' where 1=1 and material_Id='materialId' * 卖出: update jsh_serial_number set is_Sell='1' ,depothead_Id='depotheadId' where 1=1 and material_Id='materialId'
* and is_Sell !='1' and delete_Flag !='1' {limit 0count} * and is_Sell !='1' and delete_Flag !='1' {limit 0count}
* */ * */
int sellSerialNumber(@Param("materialId")Long materialId, @Param("depotHeadId")Long depotHeadId,@Param("count")Integer count, @Param("updateTime") Date updateTime,@Param("updater") Long updater); int sellSerialNumber(@Param("materialId")Long materialId, @Param("depotHeadId")Long depotHeadId, @Param("snArray") String snArray[], @Param("updateTime") Date updateTime,@Param("updater") Long updater);
/** /**
* 赎回update jsh_serial_number set is_Sell='0',depothead_Id=null where 1=1 and material_Id='materialId' * 赎回update jsh_serial_number set is_Sell='0',depothead_Id=null where 1=1 and material_Id='materialId'
* and depothead_Id='depotheadId' and is_Sell ='0' and delete_Flag !='1' {limit 0count} * and depothead_Id='depotheadId' and is_Sell ='0' and delete_Flag !='1' {limit 0count}
@@ -66,10 +66,10 @@ public interface SerialNumberMapperEx {
List<SerialNumber> getEnableSerialNumberList(@Param("name") String name, List<SerialNumber> getEnableSerialNumberList(@Param("name") String name,
@Param("depotId") Long depotId, @Param("depotId") Long depotId,
@Param("materialId") Long materialId, @Param("barCode") String barCode,
@Param("offset") Integer offset, @Param("rows") Integer rows); @Param("offset") Integer offset, @Param("rows") Integer rows);
Long getEnableSerialNumberCount(@Param("name") String name, Long getEnableSerialNumberCount(@Param("name") String name,
@Param("depotId") Long depotId, @Param("depotId") Long depotId,
@Param("materialId") Long materialId); @Param("barCode") String barCode);
} }

View File

@@ -336,6 +336,13 @@ public class DepotItemService {
depotItem.setMaterialUnit(rowObj.getString("unit")); depotItem.setMaterialUnit(rowObj.getString("unit"));
if (StringUtil.isExist(rowObj.get("snList"))) { if (StringUtil.isExist(rowObj.get("snList"))) {
depotItem.setSnList(rowObj.getString("snList")); depotItem.setSnList(rowObj.getString("snList"));
if(StringUtil.isExist(rowObj.get("depotId"))) {
Long depotId = rowObj.getLong("depotId");
if(BusinessConstants.SUB_TYPE_PURCHASE.equals(depotHead.getSubType())||
BusinessConstants.SUB_TYPE_SALES_RETURN.equals(depotHead.getSubType())) {
serialNumberService.addSerialNumberByBill(materialExtend.getMaterialId(), depotId, depotItem.getSnList());
}
}
} }
if (StringUtil.isExist(rowObj.get("batchNumber"))) { if (StringUtil.isExist(rowObj.get("batchNumber"))) {
depotItem.setBatchNumber(rowObj.getString("batchNumber")); depotItem.setBatchNumber(rowObj.getString("batchNumber"));
@@ -442,7 +449,7 @@ public class DepotItemService {
//判断商品是否开启序列号,开启的收回序列号,未开启的跳过 //判断商品是否开启序列号,开启的收回序列号,未开启的跳过
if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) { if(BusinessConstants.ENABLE_SERIAL_NUMBER_ENABLED.equals(material.getEnableSerialNumber())) {
//查询单据子表中开启序列号的数据列表 //查询单据子表中开启序列号的数据列表
serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo); serialNumberService.checkAndUpdateSerialNumber(depotItem, userInfo, StringUtil.toNull(depotItem.getSnList()));
} }
} }
} }

View File

@@ -341,19 +341,9 @@ public class SerialNumberService {
* @Param: List<DepotItem> * @Param: List<DepotItem>
* @return void * @return void
*/ */
public void checkAndUpdateSerialNumber(DepotItem depotItem,User userInfo) throws Exception{ public void checkAndUpdateSerialNumber(DepotItem depotItem,User userInfo, String snList) throws Exception{
if(depotItem!=null){ if(depotItem!=null){
//查询商品下已分配的可用序列号数量 sellSerialNumber(depotItem.getMaterialId(),depotItem.getHeaderId(), snList,userInfo);
int SerialNumberSum= serialNumberMapperEx.countSerialNumberByMaterialIdAndDepotheadId(depotItem.getMaterialId(),null,BusinessConstants.IS_SELL_HOLD);
//BasicNumber=OperNumber*ratio
if((depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue()>SerialNumberSum){
//获取商品名称
Material material= materialMapper.selectByPrimaryKey(depotItem.getMaterialId());
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE,
String.format(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG,material==null?"":material.getName()));
}
//商品下序列号充足,分配序列号
sellSerialNumber(depotItem.getMaterialId(),depotItem.getHeaderId(),(depotItem.getBasicNumber()==null?0:depotItem.getBasicNumber()).intValue(),userInfo);
} }
} }
/** /**
@@ -372,10 +362,11 @@ public class SerialNumberService {
* @return com.jsh.erp.datasource.entities.SerialNumberEx * @return com.jsh.erp.datasource.entities.SerialNumberEx
*/ */
@Transactional(value = "transactionManager", rollbackFor = Exception.class) @Transactional(value = "transactionManager", rollbackFor = Exception.class)
public int sellSerialNumber(Long materialId, Long depotHeadId,int count,User user) throws Exception{ public int sellSerialNumber(Long materialId, Long depotHeadId, String snList, User user) throws Exception{
int result=0; int result=0;
try{ try{
result = serialNumberMapperEx.sellSerialNumber(materialId,depotHeadId,count,new Date(),user==null?null:user.getId()); String [] snArray=snList.split(",");
result = serialNumberMapperEx.sellSerialNumber(materialId, depotHeadId, snArray, new Date(),user==null?null:user.getId());
}catch(Exception e){ }catch(Exception e){
JshException.writeFail(logger, e); JshException.writeFail(logger, e);
} }
@@ -459,23 +450,40 @@ public class SerialNumberService {
return result; return result;
} }
public List<SerialNumber> getEnableSerialNumberList(String name, Long depotId, Long materialId, Integer offset, Integer rows)throws Exception { public List<SerialNumber> getEnableSerialNumberList(String name, Long depotId, String barCode, Integer offset, Integer rows)throws Exception {
List<SerialNumber> list =null; List<SerialNumber> list =null;
try{ try{
list = serialNumberMapperEx.getEnableSerialNumberList(StringUtil.toNull(name), depotId, materialId, offset, rows); list = serialNumberMapperEx.getEnableSerialNumberList(StringUtil.toNull(name), depotId, barCode, offset, rows);
}catch(Exception e){ }catch(Exception e){
JshException.readFail(logger, e); JshException.readFail(logger, e);
} }
return list; return list;
} }
public Long getEnableSerialNumberCount(String name, Long depotId, Long materialId)throws Exception { public Long getEnableSerialNumberCount(String name, Long depotId, String barCode)throws Exception {
Long count = 0L; Long count = 0L;
try{ try{
count = serialNumberMapperEx.getEnableSerialNumberCount(StringUtil.toNull(name), depotId, materialId); count = serialNumberMapperEx.getEnableSerialNumberCount(StringUtil.toNull(name), depotId, barCode);
}catch(Exception e){ }catch(Exception e){
JshException.readFail(logger, e); JshException.readFail(logger, e);
} }
return count; return count;
} }
public void addSerialNumberByBill(Long materialId, Long depotId, String snList) throws Exception {
List<String> snArr = StringUtil.strToStringList(snList);
for(String sn: snArr) {
SerialNumber serialNumber = new SerialNumber();
serialNumber.setMaterialId(materialId);
serialNumber.setDepotId(depotId);
serialNumber.setSerialNumber(sn);
Date date=new Date();
serialNumber.setCreateTime(date);
serialNumber.setUpdateTime(date);
User userInfo=userService.getCurrentUser();
serialNumber.setCreator(userInfo==null?null:userInfo.getId());
serialNumber.setUpdater(userInfo==null?null:userInfo.getId());
serialNumberMapper.insertSelective(serialNumber);
}
}
} }

View File

@@ -165,20 +165,15 @@
</if> </if>
and is_sell != '1' and is_sell != '1'
and ifnull(delete_flag,'0') !='1' and ifnull(delete_flag,'0') !='1'
<if test="count != null"> <if test="snArray != null">
and id in and serial_number
( select batchSN.id from in (
( select selFrom.id from jsh_serial_number selFrom <foreach collection="snArray" item="sn" separator=",">
where 1=1 #{sn}
<if test="materialId != null"> </foreach>
and selFrom.material_Id = #{materialId}
</if>
and selFrom.is_sell != '1'
and ifnull(selFrom.delete_flag,'0') !='1'
limit 0,#{count}
) batchSN
) )
</if> </if>
</update> </update>
<update id="cancelSerialNumber"> <update id="cancelSerialNumber">
@@ -246,7 +241,9 @@
select select
ser.id, ser.serial_number ser.id, ser.serial_number
FROM jsh_serial_number ser FROM jsh_serial_number ser
where 1=1 left join jsh_material m on m.id=ser.material_id and ifnull(m.delete_flag, '0') != '1'
left join jsh_material_extend me on me.material_id=m.id and ifnull(me.delete_flag,'0') !='1'
where 1=1 and me.default_flag=1
<if test="name != null"> <if test="name != null">
<bind name="bindName" value="'%'+name+'%'"/> <bind name="bindName" value="'%'+name+'%'"/>
and ser.serial_number like #{bindName} and ser.serial_number like #{bindName}
@@ -254,8 +251,8 @@
<if test="depotId != null"> <if test="depotId != null">
and ser.depot_id = #{depotId} and ser.depot_id = #{depotId}
</if> </if>
<if test="materialId != null"> <if test="barCode != null">
and ser.material_id =#{materialId} and me.bar_code= #{barCode}
</if> </if>
and ser.is_sell = '0' and ser.is_sell = '0'
and ifnull(ser.delete_flag,'0') !='1' and ifnull(ser.delete_flag,'0') !='1'
@@ -268,7 +265,9 @@
select select
count(1) count(1)
FROM jsh_serial_number ser FROM jsh_serial_number ser
where 1=1 left join jsh_material m on m.id=ser.material_id and ifnull(m.delete_flag, '0') != '1'
left join jsh_material_extend me on me.material_id=m.id and ifnull(me.delete_flag,'0') !='1'
where 1=1 and me.default_flag=1
<if test="name != null"> <if test="name != null">
<bind name="bindName" value="'%'+name+'%'"/> <bind name="bindName" value="'%'+name+'%'"/>
and ser.serial_number like #{bindName} and ser.serial_number like #{bindName}
@@ -276,8 +275,8 @@
<if test="depotId != null"> <if test="depotId != null">
and ser.depot_id = #{depotId} and ser.depot_id = #{depotId}
</if> </if>
<if test="materialId != null"> <if test="barCode != null">
and ser.material_id =#{materialId} and me.bar_code= #{barCode}
</if> </if>
and ser.is_sell = '0' and ser.is_sell = '0'
and ifnull(ser.delete_flag,'0') !='1' and ifnull(ser.delete_flag,'0') !='1'