8 changed files with 509 additions and 2 deletions
@ -0,0 +1,39 @@ |
|||||
|
package com.dreamchaser.depository_manage.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* 拆单基础信息 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class SplitInfo { |
||||
|
/** |
||||
|
* 拆单id |
||||
|
*/ |
||||
|
private Integer id; |
||||
|
/** |
||||
|
* 物料id |
||||
|
*/ |
||||
|
private Integer mid; |
||||
|
/** |
||||
|
* 旧计量单位 |
||||
|
*/ |
||||
|
private String oldUnit; |
||||
|
/** |
||||
|
* 新计量单位 |
||||
|
*/ |
||||
|
private String newUnit; |
||||
|
/** |
||||
|
* 新旧单位映射数 |
||||
|
*/ |
||||
|
private Integer quantity; |
||||
|
/** |
||||
|
* 父级id |
||||
|
*/ |
||||
|
private Integer parentId; |
||||
|
|
||||
|
/** |
||||
|
* 状态:1启用2禁用3删除 |
||||
|
*/ |
||||
|
private Integer state; |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
package com.dreamchaser.depository_manage.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* 拆单后出入库记录 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class SplitInventory { |
||||
|
/** |
||||
|
* 记录id |
||||
|
*/ |
||||
|
private Integer id; |
||||
|
/** |
||||
|
* 对应库存id |
||||
|
*/ |
||||
|
private Integer iid; |
||||
|
/** |
||||
|
* 对应拆单id |
||||
|
*/ |
||||
|
private Integer sid; |
||||
|
/** |
||||
|
* 出库数量 |
||||
|
*/ |
||||
|
private Integer outQuantity; |
||||
|
/** |
||||
|
* 入库数量 |
||||
|
*/ |
||||
|
private Integer inQuantity; |
||||
|
/** |
||||
|
* 入库后剩余的数量 |
||||
|
*/ |
||||
|
private Integer saveQuantity; |
||||
|
} |
||||
@ -0,0 +1,98 @@ |
|||||
|
package com.dreamchaser.depository_manage.mapper; |
||||
|
|
||||
|
import com.dreamchaser.depository_manage.entity.SplitInfo; |
||||
|
import com.dreamchaser.depository_manage.entity.SplitInventory; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.springframework.stereotype.Repository; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
@Mapper |
||||
|
@Repository |
||||
|
public interface SplitUnitMapper { |
||||
|
/** |
||||
|
* 用于添加一条拆单记录 |
||||
|
* @param map 待添加数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer addSplitInfo(Map<String,Object> map); |
||||
|
|
||||
|
/** |
||||
|
* 用于修改拆单记录数据 |
||||
|
* @param map 待修改数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer updateSplitInfo(Map<String,Object> map); |
||||
|
|
||||
|
/** |
||||
|
* 用于修改拆单记录数据 |
||||
|
* @param splitInfo 待修改数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer updateSplitInfo(SplitInfo splitInfo); |
||||
|
|
||||
|
/** |
||||
|
* 通过主键id删除一条拆单记录 |
||||
|
* @param id 待删除主键id |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer delSplitInfoById(Integer id); |
||||
|
|
||||
|
/** |
||||
|
* 通过主键id批量删除一条拆单记录 |
||||
|
* @param ids 待删除主键id |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer delSplitInfoByIds(List<Integer> ids); |
||||
|
|
||||
|
/** |
||||
|
* 用于添加一条拆单库存处理记录 |
||||
|
* @param map 待添加数量 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer addSplitInventory(Map<String,Object> map); |
||||
|
|
||||
|
/** |
||||
|
* 用于修改拆单库存处理记录 |
||||
|
* @param map 待修改数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer updateSplitInventory(Map<String,Object> map); |
||||
|
|
||||
|
/** |
||||
|
* 用于修改拆单库存处理记录 |
||||
|
* @param splitInventory 待修改数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer updateSplitInventory(SplitInventory splitInventory); |
||||
|
|
||||
|
/** |
||||
|
* 通过主键id删除一条拆单库存处理记录 |
||||
|
* @param id 待删除主键id |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer delSplitInventoryById(Integer id); |
||||
|
|
||||
|
/** |
||||
|
* 通过主键id批量删除一条拆单库存处理记录 |
||||
|
* @param ids 待删除主键id |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer delSplitInventoryByIds(List<Integer> ids); |
||||
|
|
||||
|
/** |
||||
|
* 通过物料id与拆单前的计量单位获取对应拆单记录 |
||||
|
* @param map 查询条件 |
||||
|
* @return |
||||
|
*/ |
||||
|
SplitInfo findSplitInfoByMidAndUnit(Map<String,Object> map); |
||||
|
|
||||
|
/** |
||||
|
* 通过物料库存id与拆单id获取拆单库存操作记录 |
||||
|
* @param map 查询条件 |
||||
|
* @return |
||||
|
*/ |
||||
|
SplitInventory findSplitInventoryByIidAndSid(Map<String,Object> map); |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,170 @@ |
|||||
|
<?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"> |
||||
|
|
||||
|
<!-- user --> |
||||
|
<mapper namespace="com.dreamchaser.depository_manage.mapper.SplitUnitMapper"> |
||||
|
<!-- 字段映射(权限) --> |
||||
|
|
||||
|
<!-- 权限映射--> |
||||
|
<resultMap id="splitInfoMap" type="com.dreamchaser.depository_manage.entity.SplitInfo"> |
||||
|
<id column="id" property="id" jdbcType="INTEGER" /> |
||||
|
<result column="mid" property="mid" jdbcType="INTEGER" /> |
||||
|
<result column="quantity" property="quantity" jdbcType="INTEGER" /> |
||||
|
<result column="parentId" property="parentId" jdbcType="INTEGER" /> |
||||
|
<result column="state" property="state" jdbcType="INTEGER" /> |
||||
|
<result column="oldUnit" property="oldUnit" jdbcType="VARCHAR" /> |
||||
|
<result column="newUnit" property="newUnit" jdbcType="VARCHAR" /> |
||||
|
</resultMap> |
||||
|
|
||||
|
<resultMap id="splitInventoryMap" type="com.dreamchaser.depository_manage.entity.SplitInventory"> |
||||
|
<id column="id" property="id" jdbcType="INTEGER" /> |
||||
|
<result column="iid" property="iid" jdbcType="INTEGER"/> |
||||
|
<result column="sid" property="sid" jdbcType="INTEGER"/> |
||||
|
<result column="outQuantity" property="outQuantity" jdbcType="INTEGER"/> |
||||
|
<result column="inQuantity" property="inQuantity" jdbcType="INTEGER"/> |
||||
|
<result column="saveQuantity" property="saveQuantity" jdbcType="INTEGER"/> |
||||
|
</resultMap> |
||||
|
|
||||
|
<sql id="splitInfoAllColumns"> |
||||
|
s.id,s.mid,s.oldUnit,s.newUnit,s.quantity,s.parentId,s.state |
||||
|
</sql> |
||||
|
|
||||
|
<sql id="splitInventoryAllColumns"> |
||||
|
si.id,si.iid,si.sid.si.outQuantity,si.inQuantity,si.saveQuantity |
||||
|
</sql> |
||||
|
|
||||
|
<select id="findSplitInfoByMidAndUnit" parameterType="map" resultMap="splitInfoMap"> |
||||
|
select |
||||
|
<include refid="splitInfoAllColumns"/> |
||||
|
from `split` s |
||||
|
where 1 = 1 |
||||
|
<if test="mid != null and mid != ''"> |
||||
|
and s.mid = #{mid} |
||||
|
</if> |
||||
|
<if test="oldUnit != null and oldUnit != ''"> |
||||
|
and s.oldUnit = #{oldUnit} |
||||
|
</if> |
||||
|
<if test="newUnit != null and newUnit != ''"> |
||||
|
and s.newUnit = #{newUnit} |
||||
|
</if> |
||||
|
</select> |
||||
|
|
||||
|
|
||||
|
<select id="findSplitInventoryByIidAndSid" parameterType="map" resultMap="splitInventoryMap"> |
||||
|
select |
||||
|
<include refid="splitInventoryAllColumns"/> |
||||
|
from `split_inventory` si |
||||
|
where 1 = 1 |
||||
|
<if test="iid != null and iid != ''"> |
||||
|
and si.iid = #{iid}, |
||||
|
</if> |
||||
|
<if test="sid != null and sid != ''"> |
||||
|
and si.sid = #{sid} |
||||
|
</if> |
||||
|
</select> |
||||
|
|
||||
|
|
||||
|
<update id="updateSplitInfo"> |
||||
|
update `split` |
||||
|
<set> |
||||
|
<if test="mid != null and mid != ''"> |
||||
|
mid = #{mid}, |
||||
|
</if> |
||||
|
<if test="oldUnit != null and oldUnit != ''"> |
||||
|
oldUnit = #{oldUnit}, |
||||
|
</if> |
||||
|
<if test="newUnit != null and newUnit != ''"> |
||||
|
newUnit = #{newUnit}, |
||||
|
</if> |
||||
|
<if test="quantity != null and quantity != ''"> |
||||
|
quantity = #{quantity}, |
||||
|
</if> |
||||
|
<if test="parentId != null and parentId != ''"> |
||||
|
parentId = #{parentId}, |
||||
|
</if> |
||||
|
<if test="state != null and state != ''"> |
||||
|
state = #{state} |
||||
|
</if> |
||||
|
</set> |
||||
|
where id = #{id} |
||||
|
</update> |
||||
|
|
||||
|
<update id="updateSplitInventory"> |
||||
|
update `split_inventory` |
||||
|
<set> |
||||
|
<if test="iid != null and iid != ''"> |
||||
|
iid = #{iid}, |
||||
|
</if> |
||||
|
<if test="sid != null and sid != ''"> |
||||
|
sid = #{sid}, |
||||
|
</if> |
||||
|
<if test="outQuantity != null and outQuantity != ''"> |
||||
|
outQuantity = #{outQuantity}, |
||||
|
</if> |
||||
|
<if test="inQuantity != null and inQuantity != ''"> |
||||
|
inQuantity = #{inQuantity}, |
||||
|
</if> |
||||
|
<if test="saveQuantity != null and saveQuantity != ''"> |
||||
|
saveQuantity = #{saveQuantity}, |
||||
|
</if> |
||||
|
</set> |
||||
|
where id = #{id} |
||||
|
</update> |
||||
|
|
||||
|
<insert id="addSplitInfo" parameterType="map" useGeneratedKeys="true" keyProperty="id"> |
||||
|
INSERT INTO `split` ( |
||||
|
id, mid, oldUnit,newUnit,quantity,parentId,state |
||||
|
) VALUES ( |
||||
|
#{id}, |
||||
|
#{mid}, |
||||
|
#{oldUnit}, |
||||
|
#{newUnit}, |
||||
|
#{quantity}, |
||||
|
#{parentId}, |
||||
|
#{state} |
||||
|
) |
||||
|
</insert> |
||||
|
|
||||
|
<insert id="addSplitInventory" parameterType="map" useGeneratedKeys="true" keyProperty="id"> |
||||
|
INSERT INTO `split_inventory` ( |
||||
|
id, iid, sid,outQuantity,inQuantity,saveQuantity |
||||
|
) VALUES ( |
||||
|
#{id}, |
||||
|
#{iid}, |
||||
|
#{sid}, |
||||
|
#{outQuantity}, |
||||
|
#{inQuantity}, |
||||
|
#{saveQuantity} |
||||
|
) |
||||
|
</insert> |
||||
|
|
||||
|
<delete id="delSplitInfoById" parameterType="int"> |
||||
|
delete from `split` WHERE id = #{id} |
||||
|
</delete> |
||||
|
|
||||
|
<delete id="delSplitInfoByIds" parameterType="int"> |
||||
|
delete from `split` |
||||
|
where id in |
||||
|
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> |
||||
|
#{id} |
||||
|
</foreach> |
||||
|
</delete> |
||||
|
|
||||
|
<delete id="delSplitInventoryById" parameterType="int"> |
||||
|
delete from `split_inventory` WHERE id = #{id} |
||||
|
</delete> |
||||
|
|
||||
|
<delete id="delSplitInventoryByIds" parameterType="int"> |
||||
|
delete from `split_inventory` |
||||
|
where id in |
||||
|
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> |
||||
|
#{id} |
||||
|
</foreach> |
||||
|
</delete> |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
</mapper> |
||||
@ -0,0 +1,27 @@ |
|||||
|
package com.dreamchaser.depository_manage.service; |
||||
|
|
||||
|
import com.dreamchaser.depository_manage.entity.SplitInfo; |
||||
|
import com.dreamchaser.depository_manage.entity.SplitInventory; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* 用于进行拆单操作的service |
||||
|
*/ |
||||
|
public interface SplitUnitService { |
||||
|
|
||||
|
/** |
||||
|
* 用于添加一条拆单记录 |
||||
|
* @param map 待添加数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer addSplitInfo(Map<String,Object> map); |
||||
|
|
||||
|
/** |
||||
|
* 用于添加一条拆单库存处理记录 |
||||
|
* @param map 待添加数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
Integer addSplitInventory(Map<String,Object> map); |
||||
|
} |
||||
@ -0,0 +1,136 @@ |
|||||
|
package com.dreamchaser.depository_manage.service.impl; |
||||
|
|
||||
|
import com.dreamchaser.depository_manage.entity.Inventory; |
||||
|
import com.dreamchaser.depository_manage.entity.SplitInfo; |
||||
|
import com.dreamchaser.depository_manage.entity.SplitInventory; |
||||
|
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; |
||||
|
import com.dreamchaser.depository_manage.mapper.MaterialMapper; |
||||
|
import com.dreamchaser.depository_manage.mapper.PlaceMapper; |
||||
|
import com.dreamchaser.depository_manage.mapper.SplitUnitMapper; |
||||
|
import com.dreamchaser.depository_manage.service.DepositoryRecordService; |
||||
|
import com.dreamchaser.depository_manage.service.MaterialService; |
||||
|
import com.dreamchaser.depository_manage.service.SplitUnitService; |
||||
|
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
|
||||
|
@Service |
||||
|
public class SplitUnitServiceImpl implements SplitUnitService { |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
SplitUnitMapper splitUnitMapper; |
||||
|
|
||||
|
@Autowired |
||||
|
MaterialMapper materialMapper; |
||||
|
|
||||
|
@Autowired |
||||
|
PlaceMapper placeMapper; |
||||
|
|
||||
|
@Autowired |
||||
|
DepositoryMapper depositoryMapper; |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
DepositoryRecordService depositoryRecordService; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 用于添加一条拆单记录 |
||||
|
* @param map 待添加数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
@Override |
||||
|
public Integer addSplitInfo(Map<String, Object> map) { |
||||
|
// 查询该物料拆单前是否存在该计量单位
|
||||
|
Map<String,Object> paramForUnit = new HashMap<>(); |
||||
|
// 获取物料id
|
||||
|
paramForUnit.put("mid",map.get("mid")); |
||||
|
// 获取拆单前的计量单位
|
||||
|
paramForUnit.put("oldUnit",map.get("oldUnit")); |
||||
|
// 查询当前要拆单的记录是否已经是拆单过的
|
||||
|
SplitInfo splitInfoForUnit = splitUnitMapper.findSplitInfoByMidAndUnit(paramForUnit); |
||||
|
if(splitInfoForUnit != null){ |
||||
|
// 如果是拆单过
|
||||
|
map.put("parentId",splitInfoForUnit.getId()); |
||||
|
}else{ |
||||
|
// 如果没有
|
||||
|
map.put("parentId",null); |
||||
|
} |
||||
|
// 插入
|
||||
|
return splitUnitMapper.addSplitInfo(map); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用于添加一条拆单库存处理记录 |
||||
|
* @param map 待添加数据 |
||||
|
* @return |
||||
|
*/ |
||||
|
@Override |
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public Integer addSplitInventory(Map<String, Object> map) { |
||||
|
Map<String,Object> paramForUnit = new HashMap<>(); |
||||
|
paramForUnit.put("newUnit",map.get("unit")); |
||||
|
paramForUnit.put("mid",map.get("mid")); |
||||
|
// 查询当前拆单是否存在
|
||||
|
SplitInfo splitInfoForUnit = splitUnitMapper.findSplitInfoByMidAndUnit(paramForUnit); |
||||
|
|
||||
|
// 用于存储最终计算结果
|
||||
|
Integer result = 0; |
||||
|
if(splitInfoForUnit != null) { |
||||
|
// 获取当前处理的类型
|
||||
|
String type = (String) map.get("type"); |
||||
|
|
||||
|
// 获取当前操作的库存id
|
||||
|
Integer iid = ObjectFormatUtil.toInteger(map.get("iid")); |
||||
|
// 用于存储拆单库存处理操作的数据
|
||||
|
Map<String,Object> paramForInsertSplitInventory = new HashMap<>(); |
||||
|
paramForInsertSplitInventory.put("iid",iid); |
||||
|
paramForInsertSplitInventory.put("sid",splitInfoForUnit.getId()); |
||||
|
// 查询当前库存是否有该拆单的处理记录
|
||||
|
SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); |
||||
|
// 获取要操作的数量
|
||||
|
Double quantity = ObjectFormatUtil.toDouble(map.get("quantity")); |
||||
|
if ("in".equals(type)) { |
||||
|
// 如果是入库操作
|
||||
|
|
||||
|
// 计算处理数量(下取整)
|
||||
|
Integer disposeQuantity = ObjectFormatUtil.toInteger(Math.floor(quantity / splitInfoForUnit.getQuantity())); |
||||
|
// 最终存储到拆单处理的数量
|
||||
|
double saveQuantity = quantity - disposeQuantity; |
||||
|
if(splitInventory != null){ |
||||
|
// 如果有过记录
|
||||
|
// 设置当前计量单位的库存
|
||||
|
splitInventory.setSaveQuantity(ObjectFormatUtil.toInteger(saveQuantity) + splitInventory.getSaveQuantity()); |
||||
|
// 设置当前计量单位的入库数目
|
||||
|
splitInventory.setInQuantity(ObjectFormatUtil.toInteger(splitInventory.getInQuantity() + quantity)); |
||||
|
splitUnitMapper.updateSplitInventory(splitInventory); |
||||
|
}else{ |
||||
|
// 如果没有记录
|
||||
|
|
||||
|
paramForInsertSplitInventory.put("inQuantity",quantity); |
||||
|
paramForInsertSplitInventory.put("saveQuantity",saveQuantity); |
||||
|
splitUnitMapper.addSplitInventory(paramForInsertSplitInventory); |
||||
|
} |
||||
|
|
||||
|
map.put("quantity",disposeQuantity); |
||||
|
|
||||
|
result += depositoryRecordService.applicationInPlace(map); |
||||
|
|
||||
|
|
||||
|
} else if ("out".equals(type)) { |
||||
|
// 如果是出库操作
|
||||
|
|
||||
|
// 设置出库标志位
|
||||
|
paramForInsertSplitInventory.put("outFlag",1); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
return result; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue