You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

96 lines
5.2 KiB

import math
from pypinyin import lazy_pinyin, Style
from utils.Dict2Obj import *
from utils.configOperatingTypeHelper import GetOperatingTypeOutStock, GetOperatingTypeBad
from utils.listHelper import list2String
from utils.logHelper import *
def priorityDelivery(item, index, token, data):
entity = Dict2Obj(item)
toBeOutEntities = ReagtStock.query.join(ReagtReagent, ReagtStock.ReagentId == ReagtReagent.ReagentId). \
filter(ReagtReagent.Name == entity.Name, ReagtStock.Position == entity.Position,
ReagtReagent.Specification == entity.Specification,
ReagtStock.ProductionBatch == entity.ProductionBatch).order_by(ReagtStock.Expiration.asc()).all()
if data.get('status') == 'firstIN':
# 先入先出
toBeOutEntities = ReagtStock.query.join(ReagtReagent, ReagtStock.ReagentId == ReagtReagent.ReagentId). \
filter(ReagtReagent.Name == entity.Name, ReagtStock.Position == entity.Position,
ReagtReagent.Specification == entity.Specification,
ReagtStock.ProductionBatch == entity.ProductionBatch).order_by(ReagtStock.InTime.desc()).all()
outNumber = entity.OutStockNumber
minOutNumber = entity.OutStockMinNumber
for toBeOutEntity in toBeOutEntities:
singleNumber = toBeOutEntity.LastNumber
if outNumber is 0:
break
# 出库数量大于当条数量
if outNumber > singleNumber:
OutStockAndBadLog(index, token, entity.Name, entity.Specification, singleNumber, data,
toBeOutEntity.Code, toBeOutEntity.Position, minOutNumber, toBeOutEntity.ReagentId,
data.get('receiver'))
db.session.delete(toBeOutEntity)
outNumber -= singleNumber
continue
# 出库数量小于当条数量
if outNumber < singleNumber:
OutStockAndBadLog(index, token, entity.Name, entity.Specification, outNumber, data,
toBeOutEntity.Code, toBeOutEntity.Position, minOutNumber, toBeOutEntity.ReagentId,
data.get('receiver'))
toBeOutEntity.LastNumber -= outNumber
toBeOutEntity.MinNumberUnit -= outNumber*ReagtReagent.query.filter_by(ReagentId=toBeOutEntity.ReagentId)\
.first().Ratio
break
if outNumber == singleNumber:
OutStockAndBadLog(index, token, entity.Name, entity.Specification, singleNumber, data,
toBeOutEntity.Code, toBeOutEntity.Position, minOutNumber, toBeOutEntity.ReagentId,
data.get('receiver'))
db.session.delete(toBeOutEntity)
break
if minOutNumber > 0:
for toBeOutEntity in toBeOutEntities:
minSingleNumber = toBeOutEntity.MinNumberUnit
if minOutNumber is 0:
break
# 出库数量大于当条数量
if minOutNumber > minSingleNumber:
OutStockAndBadLog(index, token, entity.Name, entity.Specification, singleNumber, data,
toBeOutEntity.Code, toBeOutEntity.Position, minOutNumber, toBeOutEntity.ReagentId,
data.get('receiver'))
db.session.delete(toBeOutEntity)
minOutNumber -= minSingleNumber
continue
# 出库数量小于当条数量
if minOutNumber < minSingleNumber:
OutStockAndBadLog(index, token, entity.Name, entity.Specification, outNumber, data,
toBeOutEntity.Code, toBeOutEntity.Position, minOutNumber, toBeOutEntity.ReagentId,
data.get('receiver'))
toBeOutEntity.MinNumberUnit -= minOutNumber
toBeOutEntity.LastNumber -= math.ceil(minOutNumber/ReagtReagent.query.
filter_by(ReagentId=toBeOutEntity.ReagentId)
.first().Ratio)
break
if minOutNumber == minSingleNumber:
OutStockAndBadLog(index, token, entity.Name, entity.Specification, singleNumber, data,
toBeOutEntity.Code, toBeOutEntity.Position, minOutNumber, toBeOutEntity.ReagentId,
data.get('receiver'))
db.session.delete(toBeOutEntity)
break
db.session.commit()
def OutStockAndBadLog(index, token, name, specification, number, data, code, position, minOutNumber, reagentId, receiver):
if index is 1:
# 出库
LogAdd(token, GetOperatingTypeOutStock(), data, code, name,
list2String(lazy_pinyin(name+specification, style=Style.FIRST_LETTER)),
number, specification, position, operateMinNumber=minOutNumber, reagentId=reagentId, receiver=receiver)
if index is 2:
# 报损
LogAdd(token, GetOperatingTypeBad(), data, code, name,
list2String(lazy_pinyin(name+specification, style=Style.FIRST_LETTER)),
number, specification, position, reagentId=reagentId)