resource_provision_util.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  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 warehouse_id_get_material_list(db,id):
  141. query = db.query(ResourceProvisionMaterialInfo)
  142. query = query.filter_by(warehouse_id = id,del_flag = '0')
  143. return query.all()
  144. def material_id_get_material_barcode_info(db,id):
  145. query = db.query(ResourceProvisionMaterialBarcode)
  146. query = query.filter_by(material_code = id,del_flag = '0')
  147. return query.first()
  148. def material_barcode_id_get_material_barcode_info(db,id):
  149. query = db.query(ResourceProvisionMaterialBarcode)
  150. query = query.filter_by(id = id,del_flag = '0')
  151. return query.first()
  152. def delete_resource_provision_file(db,from_scenario,foreign_key):
  153. file_query = db.query(ResourceProvisionFile)
  154. file_query = file_query.filter(ResourceProvisionFile.del_flag != '2')
  155. file_query = file_query.filter(ResourceProvisionFile.from_scenario == from_scenario)
  156. file_query = file_query.filter(ResourceProvisionFile.foreign_key == foreign_key)
  157. files = file_query.all()
  158. for file in files:
  159. file.del_flag = '2'
  160. def get_resource_provision_file_query_fun(db,from_scenario,foreign_key):
  161. file_query = db.query(ResourceProvisionFile)
  162. file_query = file_query.filter(ResourceProvisionFile.del_flag != '2')
  163. file_query = file_query.filter(ResourceProvisionFile.from_scenario == from_scenario)
  164. file_query = file_query.filter(ResourceProvisionFile.foreign_key == foreign_key)
  165. files = file_query.all()
  166. result = [{
  167. "uid": file.file_id,
  168. "status": file.status,
  169. "name": file.file_name_desc,
  170. "url": file.file_name #"/api/file/download/%s" %
  171. } for file in files]
  172. return result
  173. # 申报采购部分
  174. def declaration_id_get_declaration_info(db,id):
  175. query = db.query(ResourceProvisionProcurementDeclaration)
  176. query = query.filter_by(id = id,del_flag = '0')
  177. return query.first()
  178. def declaration_id_get_declaration_detail_list(db,id):
  179. query = db.query(ResourceProvisionProcurementDeclarationDetail)
  180. query = query.filter_by(declaration_id = id,del_flag = '0')
  181. query = query.order_by(ResourceProvisionProcurementDeclarationDetail.serial_number)
  182. return query.all()
  183. def detail_id_get_declaration_detail_info(db,id):
  184. query = db.query(ResourceProvisionProcurementDeclarationDetail)
  185. query = query.filter_by(id = id,del_flag = '0')
  186. return query.first()
  187. def declaration_id_get_declaration_review_info(db,id):
  188. query = db.query(ResourceProvisionProcurementReview)
  189. query = query.filter_by(declaration_id = id,del_flag = '0')
  190. return query.first()
  191. def get_declaration_review_list(db):
  192. query = db.query(ResourceProvisionProcurementReview)
  193. query = query.filter_by(del_flag = '0')
  194. return query.all()
  195. # 申请调度部分
  196. def dispatch_id_get_dispatch_info(db,id):
  197. query = db.query(ResourceProvisionDispatch)
  198. query = query.filter_by(id = id,del_flag = '0')
  199. return query.first()
  200. def dispatch_id_get_dispatch_detail_list(db,id):
  201. query = db.query(ResourceProvisionDispatchDetail)
  202. query = query.filter_by(dispatch_id = id,del_flag = '0')
  203. query = query.order_by(ResourceProvisionDispatchDetail.serial_number)
  204. return query.all()
  205. def detail_id_get_dispatch_detail_info(db,id):
  206. query = db.query(ResourceProvisionDispatchDetail)
  207. query = query.filter_by(id = id,del_flag = '0')
  208. return query.first()
  209. def dispatch_id_get_dispatch_review_info(db,id):
  210. query = db.query(ResourceProvisionDispatchReview)
  211. query = query.filter_by(dispatch_id = id,del_flag = '0')
  212. return query.first()
  213. def get_dispatch_review_list(db):
  214. query = db.query(ResourceProvisionDispatchReview)
  215. query = query.filter_by(del_flag = '0')
  216. return query.all()
  217. def inbound_id_get_inbound_info(db,id):
  218. query = db.query(ResourceProvisionInboundBasic)
  219. query = query.filter_by(id = id,del_flag = '0')
  220. return query.first()
  221. def outbound_id_get_outbound_info(db,id):
  222. query = db.query(ResourceProvisionOutboundBasic)
  223. query = query.filter_by(id = id,del_flag = '0')
  224. return query.first()
  225. def create_movement(db,movement:list,io_number,io_flag,user_id,warehouse_id,room_id):
  226. for data in movement:
  227. material_id= data['物资编码']
  228. changed_stock = data['数量']
  229. remaining_stock = 0
  230. query = db.query(ResourceProvisionWarehouseMovement)
  231. query = query.filter_by(warehouse_id=warehouse_id,room_id=room_id)
  232. query = query.filter_by(del_flag='0')
  233. if material_id:
  234. query = query.filter(ResourceProvisionWarehouseMovement.material_id==material_id)
  235. material_info = query.order_by(ResourceProvisionWarehouseMovement.create_time.desc()).first()
  236. if material_info:
  237. if io_flag=='I':
  238. remaining_stock = material_info.remaining_stock+changed_stock
  239. else:
  240. if material_info.remaining_stock<changed_stock:
  241. return '剩余库存小于出库量'
  242. remaining_stock = material_info.remaining_stock-changed_stock
  243. else:
  244. if io_flag == 'I':
  245. remaining_stock = changed_stock
  246. else:
  247. return '物资不存在,无法出库'
  248. new_movement = ResourceProvisionWarehouseMovement(
  249. material_id=material_id, # Column(String(255), nullable=False, comment='物资id')
  250. warehouse_id = warehouse_id,
  251. room_id = room_id,
  252. io_number=io_number, # Column(String(255), nullable=False, comment='出入库单号')
  253. io_flag=io_flag, # Column(String(10), nullable=False, comment='出入库标识')
  254. changed_stock=changed_stock, # Column(Integer, nullable=False, comment='变动库存')
  255. remaining_stock=remaining_stock, # Column(Integer, nullable=False, comment='剩余库存')
  256. create_by=user_id
  257. )
  258. db.add(new_movement)
  259. db.commit()
  260. return '成功'