resource_provision_util.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from models import *
  4. def warehouse_room_id_get_warehouse_room_info(db,id):
  5. query = db.query(ResourceProvisionWarehouseRoomInfo)
  6. query = query.filter_by(id = id,del_flag = '0')
  7. return query.first()
  8. def warehouse_id_get_warehouse_info(db,id):
  9. query = db.query(ResourceProvisionWarehouseInfo)
  10. query = query.filter_by(warehouse_id = id,del_flag = '0')
  11. # query = query.filter(ResourceProvisionWarehouseInfo.warehouse_id== id)
  12. # query = query.filter(ResourceProvisionWarehouseInfo.del_flag != '2')
  13. return query.first()
  14. def type_id_get_material_type_info(db,id):
  15. query = db.query(ResourceProvisionMaterialType)
  16. query = query.filter_by(id = id,del_flag = '0')
  17. return query.first()
  18. def parent_id_get_type_info(db,parent_id):
  19. query = db.query(ResourceProvisionMaterialType)
  20. query = query.filter(ResourceProvisionMaterialType.del_flag != '2')
  21. query = query.filter(ResourceProvisionMaterialType.parent_id == parent_id)
  22. query = query.filter(ResourceProvisionMaterialType.display_status == '1')
  23. query = query.order_by(ResourceProvisionMaterialType.sort_order.asc())
  24. return query.all()
  25. def count_warehouse(db):
  26. query = db.query(ResourceProvisionWarehouseInfo)
  27. query = query.filter_by(del_flag = '0')
  28. return query.count()
  29. def count_material(db):
  30. query = db.query(func.sum(ResourceProvisionMaterialInfo.inventory).label('warehouse_num'))
  31. query = query.filter_by(del_flag = '0')
  32. result = query.first()
  33. warehouse_num = result.warehouse_num if result else 0
  34. return warehouse_num
  35. def count_area_material(db):
  36. query = db.query(
  37. ResourceProvisionWarehouseInfo.area_name.label('name'),
  38. func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
  39. ).select_from(
  40. ResourceProvisionMaterialInfo
  41. ).join(
  42. ResourceProvisionWarehouseInfo,
  43. ResourceProvisionMaterialInfo.warehouse_id == ResourceProvisionWarehouseInfo.warehouse_id
  44. ).filter(
  45. ResourceProvisionMaterialInfo.del_flag == '0',
  46. ResourceProvisionWarehouseInfo.del_flag == '0'
  47. ).group_by(
  48. ResourceProvisionWarehouseInfo.area_name
  49. )
  50. # 执行查询并获取结果
  51. results = query.all()
  52. data = {"茂南区":0,"电白区":0,"高州市":0,"化州市":0,"信宜市":0,"高新区":0,"滨海新区":0}
  53. # 打印结果
  54. for result in results:
  55. data[result.name]=result.value
  56. return [{"name": key, "value": value} for key, value in data.items()]
  57. def count_warehouse_material(db):
  58. query = db.query(
  59. ResourceProvisionWarehouseInfo.warehouse_name.label('name'),
  60. func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
  61. ).select_from(
  62. ResourceProvisionMaterialInfo
  63. ).join(
  64. ResourceProvisionWarehouseInfo,
  65. ResourceProvisionMaterialInfo.warehouse_id == ResourceProvisionWarehouseInfo.warehouse_id
  66. ).filter(
  67. ResourceProvisionMaterialInfo.del_flag == '0',
  68. ResourceProvisionWarehouseInfo.del_flag == '0'
  69. ).group_by(
  70. ResourceProvisionWarehouseInfo.warehouse_name
  71. )
  72. # 执行查询并获取结果
  73. results = query.all()
  74. data = []
  75. # 打印结果
  76. for result in results:
  77. data.append({"name":result.name,"value":result.value})
  78. return data
  79. def count_type_material(db):
  80. query = db.query(
  81. ResourceProvisionMaterialType.material_category_name.label('name'),
  82. func.sum(ResourceProvisionMaterialInfo.inventory).label('value')
  83. ).select_from(
  84. ResourceProvisionMaterialInfo
  85. ).join(
  86. ResourceProvisionMaterialType,
  87. ResourceProvisionMaterialInfo.material_type == ResourceProvisionMaterialType.id
  88. ).filter(
  89. ResourceProvisionMaterialInfo.del_flag == '0',
  90. ResourceProvisionMaterialType.del_flag == '0'
  91. ).group_by(
  92. ResourceProvisionMaterialType.material_category_name
  93. )
  94. # 执行查询并获取结果
  95. results = query.all()
  96. data = []
  97. # 打印结果
  98. for result in results:
  99. data.append({"name":result.name,"value":result.value})
  100. return data
  101. def count_room_material(db,warehouseId):
  102. room_list = db.query(ResourceProvisionWarehouseRoomInfo)\
  103. .filter(ResourceProvisionWarehouseRoomInfo.del_flag == '0',
  104. ResourceProvisionWarehouseRoomInfo.warehouse == warehouseId).all()
  105. data = []
  106. for room in room_list:
  107. inventory = db.query(func.sum(ResourceProvisionMaterialInfo.inventory).label('value'))\
  108. .filter( ResourceProvisionMaterialInfo.del_flag == '0',
  109. ResourceProvisionMaterialInfo.room_id ==room.id).first()
  110. value = 0
  111. if inventory.value:
  112. value = inventory.value
  113. data.append({"name":room.room_name,"value":value})
  114. # query = db.query(
  115. # ResourceProvisionWarehouseRoomInfo.room_name.label('name'),
  116. # func.coalesce(func.sum(ResourceProvisionMaterialInfo.inventory), 0).label('value')
  117. # ).select_from(
  118. # ResourceProvisionWarehouseRoomInfo
  119. # ).outerjoin(
  120. # ResourceProvisionMaterialInfo,
  121. # ResourceProvisionMaterialInfo.room_id == ResourceProvisionWarehouseRoomInfo.id
  122. # ).filter(
  123. # ResourceProvisionMaterialInfo.del_flag == '0',
  124. # ResourceProvisionWarehouseRoomInfo.del_flag == '0',
  125. # ResourceProvisionWarehouseRoomInfo.warehouse == warehouseId
  126. # ).group_by(
  127. # ResourceProvisionWarehouseRoomInfo.room_name
  128. # )
  129. # 执行查询并获取结果
  130. # print(str(query))
  131. # results = query.all()
  132. # 打印结果
  133. # for result in results:
  134. # data.append({"name":result.name,"value":result.value})
  135. return data
  136. def material_id_get_material_info(db,id):
  137. query = db.query(ResourceProvisionMaterialInfo)
  138. query = query.filter_by(material_id = id,del_flag = '0')
  139. return query.first()
  140. def material_id_get_material_remaining_stock(db,id):
  141. query = db.query(ResourceProvisionWarehouseMovement)
  142. query = query.filter_by(material_id = id,del_flag = '0').order_by(ResourceProvisionWarehouseMovement.create_time.desc())
  143. data = query.first()
  144. if data:
  145. return data.remaining_stock
  146. return 0
  147. def warehouse_id_get_material_list(db,id):
  148. query = db.query(ResourceProvisionMaterialInfo)
  149. query = query.filter_by(warehouse_id = id,del_flag = '0')
  150. return query.all()
  151. def material_id_get_material_barcode_info(db,id):
  152. query = db.query(ResourceProvisionMaterialBarcode)
  153. query = query.filter_by(material_code = id,del_flag = '0')
  154. return query.first()
  155. def material_barcode_id_get_material_barcode_info(db,id):
  156. query = db.query(ResourceProvisionMaterialBarcode)
  157. query = query.filter_by(id = id,del_flag = '0')
  158. return query.first()
  159. def delete_resource_provision_file(db,from_scenario,foreign_key):
  160. file_query = db.query(ResourceProvisionFile)
  161. file_query = file_query.filter(ResourceProvisionFile.del_flag != '2')
  162. file_query = file_query.filter(ResourceProvisionFile.from_scenario == from_scenario)
  163. file_query = file_query.filter(ResourceProvisionFile.foreign_key == foreign_key)
  164. files = file_query.all()
  165. for file in files:
  166. file.del_flag = '2'
  167. def get_resource_provision_file_query_fun(db,from_scenario,foreign_key):
  168. file_query = db.query(ResourceProvisionFile)
  169. file_query = file_query.filter(ResourceProvisionFile.del_flag != '2')
  170. file_query = file_query.filter(ResourceProvisionFile.from_scenario == from_scenario)
  171. file_query = file_query.filter(ResourceProvisionFile.foreign_key == foreign_key)
  172. files = file_query.all()
  173. result = [{
  174. "uid": file.file_id,
  175. "status": file.status,
  176. "name": file.file_name_desc,
  177. "url": file.file_name #"/api/file/download/%s" %
  178. } for file in files]
  179. return result
  180. # 申报采购部分
  181. def declaration_id_get_declaration_info(db,id):
  182. query = db.query(ResourceProvisionProcurementDeclaration)
  183. query = query.filter_by(id = id,del_flag = '0')
  184. return query.first()
  185. def declaration_id_get_declaration_detail_list(db,id):
  186. query = db.query(ResourceProvisionProcurementDeclarationDetail)
  187. query = query.filter_by(declaration_id = id,del_flag = '0')
  188. query = query.order_by(ResourceProvisionProcurementDeclarationDetail.serial_number)
  189. return query.all()
  190. def detail_id_get_declaration_detail_info(db,id):
  191. query = db.query(ResourceProvisionProcurementDeclarationDetail)
  192. query = query.filter_by(id = id,del_flag = '0')
  193. return query.first()
  194. def declaration_id_get_declaration_review_info(db,id):
  195. query = db.query(ResourceProvisionProcurementReview)
  196. query = query.filter_by(declaration_id = id,del_flag = '0')
  197. return query.first()
  198. def get_declaration_review_list(db):
  199. query = db.query(ResourceProvisionProcurementReview)
  200. query = query.filter_by(del_flag = '0')
  201. return query.all()
  202. # 申请调度部分
  203. def dispatch_id_get_dispatch_info(db,id):
  204. query = db.query(ResourceProvisionDispatch)
  205. query = query.filter_by(id = id,del_flag = '0')
  206. return query.first()
  207. def dispatch_id_get_dispatch_detail_list(db,id):
  208. query = db.query(ResourceProvisionDispatchDetail)
  209. query = query.filter_by(dispatch_id = id,del_flag = '0')
  210. query = query.order_by(ResourceProvisionDispatchDetail.serial_number)
  211. return query.all()
  212. def detail_id_get_dispatch_detail_info(db,id):
  213. query = db.query(ResourceProvisionDispatchDetail)
  214. query = query.filter_by(id = id,del_flag = '0')
  215. return query.first()
  216. def dispatch_id_get_dispatch_review_info(db,id):
  217. query = db.query(ResourceProvisionDispatchReview)
  218. query = query.filter_by(dispatch_id = id,del_flag = '0')
  219. return query.first()
  220. def get_dispatch_review_list(db):
  221. query = db.query(ResourceProvisionDispatchReview)
  222. query = query.filter_by(del_flag = '0')
  223. return query.all()
  224. def inbound_id_get_inbound_info(db,id):
  225. query = db.query(ResourceProvisionInboundBasic)
  226. query = query.filter_by(id = id,del_flag = '0')
  227. return query.first()
  228. def outbound_id_get_outbound_info(db,id):
  229. query = db.query(ResourceProvisionOutboundBasic)
  230. query = query.filter_by(id = id,del_flag = '0')
  231. return query.first()
  232. def create_movement(db,movement:list,io_number,io_flag,user_id,warehouse_id,room_id):
  233. for data in movement:
  234. material_id= data['物资编码']
  235. changed_stock = data['数量']
  236. remaining_stock = 0
  237. query = db.query(ResourceProvisionWarehouseMovement)
  238. query = query.filter_by(warehouse_id=warehouse_id,room_id=room_id)
  239. query = query.filter_by(del_flag='0')
  240. if material_id:
  241. query = query.filter(ResourceProvisionWarehouseMovement.material_id==material_id)
  242. material_info = query.order_by(ResourceProvisionWarehouseMovement.create_time.desc()).first()
  243. if material_info:
  244. if io_flag=='I':
  245. remaining_stock = material_info.remaining_stock+changed_stock
  246. else:
  247. if material_info.remaining_stock<changed_stock:
  248. return '剩余库存小于出库量'
  249. remaining_stock = material_info.remaining_stock-changed_stock
  250. else:
  251. if io_flag == 'I':
  252. remaining_stock = changed_stock
  253. else:
  254. return '物资不存在,无法出库'
  255. new_movement = ResourceProvisionWarehouseMovement(
  256. material_id=material_id, # Column(String(255), nullable=False, comment='物资id')
  257. warehouse_id = warehouse_id,
  258. room_id = room_id,
  259. io_number=io_number, # Column(String(255), nullable=False, comment='出入库单号')
  260. io_flag=io_flag, # Column(String(10), nullable=False, comment='出入库标识')
  261. changed_stock=changed_stock, # Column(Integer, nullable=False, comment='变动库存')
  262. remaining_stock=remaining_stock, # Column(Integer, nullable=False, comment='剩余库存')
  263. create_by=user_id
  264. )
  265. db.add(new_movement)
  266. db.commit()
  267. return '成功'