|
|
|
@ -53,8 +53,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
private RedisTemplate<String, String> redisTemplate; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private RedissonClient redissonClient; |
|
|
|
private PlaceMapper placeMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private RedissonClient redissonClient; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -92,12 +94,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
Map<String, Object> temp = new HashMap<>(); |
|
|
|
temp.put("dname", depositoryRecordById.getDname()); |
|
|
|
temp.put("dcode", depositoryRecordById.getCode()); |
|
|
|
// 获取当前仓库库存
|
|
|
|
Double Inventory = depositoryMapper.getToDayInventoryByDName(temp); |
|
|
|
String code = createCode(depositoryRecordById.getDname(), "InOrderNumber"); |
|
|
|
String code = createCode(depositoryRecordById.getDname(), "InOrderNumber");//构造单号
|
|
|
|
Double quantity = Double.parseDouble((String) map.get("quantity")); |
|
|
|
Double price = Double.parseDouble((String)map.get("price")); |
|
|
|
Double price = Double.parseDouble((String) map.get("price")); |
|
|
|
Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); |
|
|
|
|
|
|
|
Material material = materialMapper.findMaterialById(mid); |
|
|
|
// 判断剩余容量是否可以存入
|
|
|
|
if (depositoryRecordById.getMaxNumber() - Inventory < quantity) { |
|
|
|
@ -108,17 +110,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
param.put("mname", material.getMname()); |
|
|
|
List<Material> materialByCondition = materialMapper.findMaterialByCondition(param); |
|
|
|
// 获取当前入库金额
|
|
|
|
Double amounts = (quantity * price * 100); |
|
|
|
Double amounts = (quantity * price * 100); |
|
|
|
// 获取平均价格
|
|
|
|
Double avgPrice = (material.getAmounts() + amounts) / (material.getQuantity() + quantity); |
|
|
|
map.put("amounts", amounts); |
|
|
|
map.put("price",price * 100); |
|
|
|
map.put("price", price * 100); |
|
|
|
String simpleTime = DateUtil.getSimpleTime(new Date()); |
|
|
|
map.put("applicant_time", DateUtil.DateTimeToTimeStamp(simpleTime)); |
|
|
|
map.put("code", code); |
|
|
|
// 获取当前物料
|
|
|
|
if (materialByCondition.size() > 0) { // 如果当前存在
|
|
|
|
Material mt = materialByCondition.get(0); |
|
|
|
map.put("oldPrice",mt.getPrice()); |
|
|
|
mt.setAmounts(mt.getAmounts() + amounts); |
|
|
|
mt.setQuantity((int) (mt.getQuantity() + quantity)); |
|
|
|
mt.setPrice(avgPrice); |
|
|
|
@ -150,6 +153,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Integer insertApplicationOutRecord(Map<String, Object> map) { |
|
|
|
String placeId = (String) map.get("placeId"); |
|
|
|
if("".equals(placeId)){ |
|
|
|
map.put("placeId",0); |
|
|
|
} |
|
|
|
Double quantity = Double.parseDouble((String) map.get("quantity")); |
|
|
|
Long time = DateUtil.DateTimeToTimeStamp(DateUtil.getSimpleTime(new Date())); |
|
|
|
map.put("applicantTime", time); |
|
|
|
@ -165,7 +172,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
Map<String, Object> update = new HashMap<>(); |
|
|
|
update.put("id", materialById.getId()); |
|
|
|
Integer numberOfTemporary = materialById.getNumberOfTemporary(); |
|
|
|
if(numberOfTemporary == null){ |
|
|
|
if (numberOfTemporary == null) { |
|
|
|
numberOfTemporary = 0; |
|
|
|
} |
|
|
|
update.put("numberOfTemporary", numberOfTemporary + quantity); |
|
|
|
@ -226,6 +233,114 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
return sum; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 将物料入库到库位 |
|
|
|
* |
|
|
|
* @param map |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Integer applicationInPlace(Map<String, Object> map) { |
|
|
|
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); |
|
|
|
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); |
|
|
|
Place placeById = placeMapper.findPlaceById(placeId); |
|
|
|
// 获取当前物料基本信息
|
|
|
|
Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); |
|
|
|
Material materialById = materialMapper.findMaterialById(mid); |
|
|
|
// 获取当前物料在当前仓库是否有库存记录
|
|
|
|
Map<String, Object> param = new HashMap<>(); |
|
|
|
param.put("code", materialById.getCode()); |
|
|
|
param.put("mname", materialById.getMname()); |
|
|
|
param.put("depositoryId", placeById.getDid()); |
|
|
|
List<Material> inventory = materialMapper.findInventory(param); |
|
|
|
if (inventory.size() == 0) { |
|
|
|
throw new MyException("未知错误,联系开发人员"); |
|
|
|
} |
|
|
|
Material material = inventory.get(0); |
|
|
|
if (placeById.getMid() != null) { |
|
|
|
// 如果当前库位有物品
|
|
|
|
if (quantity > placeById.getMax() - placeById.getQuantity()) { |
|
|
|
return -1; |
|
|
|
}else { |
|
|
|
// 添加库存
|
|
|
|
Map<String, Object> insert = new HashMap<>(); |
|
|
|
insert.put("mid",material.getId()); |
|
|
|
insert.put("pid", placeById.getId()); |
|
|
|
insert.put("quantity", quantity); |
|
|
|
// 修改该库位容量
|
|
|
|
Map<String, Object> update = new HashMap<>(); |
|
|
|
update.put("id", placeById.getId()); |
|
|
|
update.put("quantity", quantity + placeById.getQuantity()); |
|
|
|
placeMapper.UpdatePlace(update); |
|
|
|
return placeMapper.addMaterialOnPlace(insert); |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
if (quantity > placeById.getMax() - placeById.getQuantity()) { |
|
|
|
return -1; |
|
|
|
} else { |
|
|
|
Map<String, Object> update = new HashMap<>(); |
|
|
|
update.put("id", placeById.getId()); |
|
|
|
update.put("quantity", quantity + placeById.getQuantity()); |
|
|
|
placeMapper.UpdatePlace(update); |
|
|
|
// 添加库存
|
|
|
|
Map<String, Object> insert = new HashMap<>(); |
|
|
|
insert.put("mid",material.getId()); |
|
|
|
insert.put("pid", placeById.getId()); |
|
|
|
insert.put("quantity", quantity); |
|
|
|
return placeMapper.addMaterialOnPlace(insert); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 将刚入库的记录删除 |
|
|
|
* @param map |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Integer deleteApplicaionInPlace(Map<String, Object> map) { |
|
|
|
String code = map.get("code").toString(); |
|
|
|
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); |
|
|
|
Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); |
|
|
|
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); |
|
|
|
// 获取材料基本信息
|
|
|
|
Material materialById = materialMapper.findMaterialById(mid); |
|
|
|
Object oldPrice1 = map.get("oldPrice"); |
|
|
|
Double oldPrice = 0.0; |
|
|
|
if(oldPrice1 != null) { |
|
|
|
oldPrice = Double.parseDouble(oldPrice1.toString()); |
|
|
|
} |
|
|
|
Double price = Double.parseDouble(map.get("price").toString()); |
|
|
|
Integer id = ObjectFormatUtil.toInteger(map.get("id")); |
|
|
|
String deleteType = map.get("delete").toString(); |
|
|
|
Map<String,Object> params = new HashMap<>(); |
|
|
|
params.put("code",materialById.getCode()); |
|
|
|
params.put("depositoryId",depositoryId); |
|
|
|
List<Material> materialByCondition = materialMapper.findMaterialByCondition(params); |
|
|
|
if(materialByCondition.size() < 1){ |
|
|
|
throw new MyException("出现未知错误,联系开发人员"); |
|
|
|
} |
|
|
|
if("in".equals(deleteType)){ |
|
|
|
// 删除入库记录
|
|
|
|
depositoryRecordMapper.deleteApplicationInRecordById(id); |
|
|
|
// 将库存还原
|
|
|
|
Material material = materialByCondition.get(0); |
|
|
|
Map<String,Object> update = new HashMap<>(); |
|
|
|
update.put("quantity",material.getQuantity() - quantity); |
|
|
|
update.put("price",oldPrice); |
|
|
|
update.put("amounts",material.getAmounts() - quantity * price); |
|
|
|
update.put("id",material.getId()); |
|
|
|
return materialMapper.updateMaterial(update); |
|
|
|
|
|
|
|
}else if("out".equals(deleteType)){ |
|
|
|
return null; |
|
|
|
}else { |
|
|
|
throw new MyException("请求参数错误"); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 转移申请 |
|
|
|
* |
|
|
|
@ -293,13 +408,39 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
Material material = materialMapper.findMaterialById(record.getMid()); |
|
|
|
Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass"); |
|
|
|
if (depositoryManagerPass == 1) { |
|
|
|
if (material.getQuantity() >= record.getQuantity()) { |
|
|
|
boolean flag = true; |
|
|
|
Integer placeId = record.getPlaceId(); |
|
|
|
MaterialAndPlace placeAndMaterialByMidAndPid = null; |
|
|
|
if(placeId != 0){ |
|
|
|
Map<String,Object> params = new HashMap<>(); |
|
|
|
params.put("mid",material.getId()); |
|
|
|
params.put("pid",placeId); |
|
|
|
// 获取当前物料所存放库位的数量
|
|
|
|
placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); |
|
|
|
if(placeAndMaterialByMidAndPid.getQuantity() < record.getQuantity()){ |
|
|
|
// 如果当前库位数量不足
|
|
|
|
flag = false; |
|
|
|
} |
|
|
|
} |
|
|
|
if (material.getQuantity() >= record.getQuantity() && flag) { |
|
|
|
// 当前出库金额
|
|
|
|
Double sum = material.getPrice() * record.getQuantity(); |
|
|
|
material.setAmounts(material.getAmounts() - sum); |
|
|
|
material.setQuantity(material.getQuantity() - record.getQuantity()); |
|
|
|
material.setNumberOfTemporary(material.getNumberOfTemporary() - record.getQuantity()); |
|
|
|
materialMapper.updateMaterial(material); |
|
|
|
|
|
|
|
if(placeAndMaterialByMidAndPid != null){ |
|
|
|
// 修改当前库位存放物料的数量
|
|
|
|
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - record.getQuantity()); |
|
|
|
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); |
|
|
|
} |
|
|
|
|
|
|
|
// 修改库位数量
|
|
|
|
Place placeById = placeMapper.findPlaceById(placeId); |
|
|
|
placeById.setQuantity(placeById.getQuantity() - record.getQuantity()); |
|
|
|
placeMapper.UpdatePlace(placeById); |
|
|
|
|
|
|
|
if (record.getIstransfer() == 1) { |
|
|
|
map.put("quantity", record.getQuantity().toString()); |
|
|
|
map.put("applicantId", record.getApplicantId()); |
|
|
|
@ -956,21 +1097,21 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { |
|
|
|
private String createCode(String depositoryName, String key) { |
|
|
|
RLock lock = redissonClient.getLock(key); |
|
|
|
// 单号(公司简称+仓库简称+年月日+数字(位数设置>=9))
|
|
|
|
String code = "GK"; |
|
|
|
String nowTime = DateUtil.getNowTime(); |
|
|
|
depositoryName = WordUtil.getPinYinHeadChar(depositoryName); |
|
|
|
lock.lock(5,TimeUnit.SECONDS); |
|
|
|
String orderNumber = redisTemplate.opsForValue().get(key); |
|
|
|
if (orderNumber == null) { |
|
|
|
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); |
|
|
|
orderNumber = "1"; |
|
|
|
} |
|
|
|
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1; |
|
|
|
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); |
|
|
|
lock.unlock(); |
|
|
|
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber)); |
|
|
|
code = code + depositoryName + nowTime + orderNumber; |
|
|
|
return code; |
|
|
|
String code = "GK"; |
|
|
|
String nowTime = DateUtil.getNowTime(); |
|
|
|
depositoryName = WordUtil.getPinYinHeadChar(depositoryName); |
|
|
|
lock.lock(5, TimeUnit.SECONDS); |
|
|
|
String orderNumber = redisTemplate.opsForValue().get(key); |
|
|
|
if (orderNumber == null) { |
|
|
|
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); |
|
|
|
orderNumber = "1"; |
|
|
|
} |
|
|
|
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1; |
|
|
|
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); |
|
|
|
lock.unlock(); |
|
|
|
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber)); |
|
|
|
code = code + depositoryName + nowTime + orderNumber; |
|
|
|
return code; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|