示例#1
0
 def post(self, request, format=None):
     if ShippingModel.objects.filter(appid=request.user.appid).exists():
         if GoodsModel.objects.filter(appid=request.user.appid).exists():
             if BaseInfoModel.objects.filter(appid=request.user.appid).exists():
                 contacts = ShippingModel.objects.filter(appid=request.user.appid)
                 goods_code = contacts.values('goods_code').distinct()
                 data = []
                 for i in range(len(goods_code)):
                     if GoodsModel.objects.filter(appid=request.user.appid, goods_code=goods_code[i]['goods_code']).exists():
                         if BaseInfoModel.objects.filter(appid=request.user.appid, goods_code=goods_code[i]['goods_code']).exists():
                             on_hand_stock = GoodsModel.objects.filter(appid=request.user.appid,
                                                                       goods_code=goods_code[i][
                                                                           'goods_code']).first().on_hand_stock
                             total_leadtime = BaseInfoModel.objects.filter(appid=request.user.appid,
                                                                           goods_code=goods_code[i][
                                                                               'goods_code']).first().total_leadtime
                             if on_hand_stock == 0:
                                 today = datetime.date.today()
                                 delta1 = datetime.timedelta(days=29)
                                 delta2 = datetime.timedelta(days=59)
                                 delta3 = datetime.timedelta(days=89)
                                 end_date1 = (today - delta1).strftime('%Y-%m-%d')
                                 end_date2 = (today - delta2).strftime('%Y-%m-%d')
                                 end_date3 = (today - delta3).strftime('%Y-%m-%d')
                                 plan_date = today.strftime('%Y-%m-%d')
                                 shipping_data1 = contacts.filter(goods_code=goods_code[i]['goods_code'], shipping_time__range=[end_date1, today]).aggregate(
                                     Sum('shipping_qty'))
                                 shipping_data2 = contacts.filter(goods_code=goods_code[i]['goods_code'], shipping_time__range=[end_date2, today]).aggregate(
                                     Sum('shipping_qty'))
                                 shipping_data3 = contacts.filter(goods_code=goods_code[i]['goods_code'], shipping_time__range=[end_date3, today]).aggregate(
                                     Sum('shipping_qty'))
                                 analyst = {
                                     "goods_code": goods_code[i]['goods_code'],
                                     "shipping_data1": shipping_data1['shipping_qty__sum'],
                                     "shipping_data2": shipping_data2['shipping_qty__sum'],
                                     "shipping_data3": shipping_data3['shipping_qty__sum'],
                                     "plan_date1": plan_date,
                                     "plan_date2": plan_date,
                                     "plan_date3": plan_date,
                                     "plan_date4": 0,
                                     "oos_lv": "已经断货"
                                 }
                                 data.append(analyst)
                             else:
                                 today = datetime.date.today()
                                 delta1 = datetime.timedelta(days=29)
                                 delta2 = datetime.timedelta(days=59)
                                 delta3 = datetime.timedelta(days=89)
                                 end_date1 = (today - delta1).strftime('%Y-%m-%d')
                                 end_date2 = (today - delta2).strftime('%Y-%m-%d')
                                 end_date3 = (today - delta3).strftime('%Y-%m-%d')
                                 shipping_data1 = contacts.filter(goods_code=goods_code[i]['goods_code'], shipping_time__range=[end_date1, today]).aggregate(
                                     Sum('shipping_qty'))
                                 shipping_data2 = contacts.filter(goods_code=goods_code[i]['goods_code'], shipping_time__range=[end_date2, today]).aggregate(
                                     Sum('shipping_qty'))
                                 shipping_data3 = contacts.filter(goods_code=goods_code[i]['goods_code'], shipping_time__range=[end_date3, today]).aggregate(
                                     Sum('shipping_qty'))
                                 avg_qty1 = shipping_data1['shipping_qty__sum'] / 30
                                 avg_qty2 = shipping_data2['shipping_qty__sum'] / 60
                                 avg_qty3 = shipping_data3['shipping_qty__sum'] / 90
                                 avg_qty4 = (avg_qty1 + avg_qty2 + avg_qty3) / 3
                                 stock_check1 = int(on_hand_stock / avg_qty1)
                                 stock_check2 = int(on_hand_stock / avg_qty2)
                                 stock_check3 = int(on_hand_stock / avg_qty3)
                                 stock_check4 = int(on_hand_stock / avg_qty4)
                                 plan_day1 = datetime.timedelta(days=stock_check1)
                                 plan_day2 = datetime.timedelta(days=stock_check2)
                                 plan_day3 = datetime.timedelta(days=stock_check3)
                                 plan_day4 = datetime.timedelta(days=stock_check4)
                                 plan_date1 = (today + plan_day1).strftime('%Y-%m-%d')
                                 plan_date2 = (today + plan_day2).strftime('%Y-%m-%d')
                                 plan_date3 = (today + plan_day3).strftime('%Y-%m-%d')
                                 oos_notice = plan_day4.days / total_leadtime
                                 if oos_notice >= 3:
                                     oos_lv = "库存过多"
                                 elif 3 > oos_notice >= 2:
                                     oos_lv = "库存充足"
                                 elif 2 > oos_notice >= 1:
                                     oos_notice = plan_day4.days / (total_leadtime + 7)
                                     if oos_notice > 1:
                                         oos_lv = "库存正常"
                                     elif oos_notice <= 1:
                                         oos_lv = "断货风险"
                                     else:
                                         oos_lv = "断货风险极大"
                                 else:
                                     oos_lv = "断货风险极大"
                                 analyst = {
                                     "goods_code": goods_code[i]['goods_code'],
                                     "shipping_data1": shipping_data1['shipping_qty__sum'],
                                     "shipping_data2": shipping_data2['shipping_qty__sum'],
                                     "shipping_data3": shipping_data3['shipping_qty__sum'],
                                     "plan_date1": plan_date1,
                                     "plan_date2": plan_date2,
                                     "plan_date3": plan_date3,
                                     "plan_date4": plan_day4.days,
                                     "oos_lv": oos_lv
                                 }
                                 data.append(analyst)
                                 # end_date = (today + delta).strftime('%Y-%m-%d')
                                 # date = [int(x) for x in date_end.split('-')]
                                 # old = datetime.datetime(date[0], date[1], date[2])
                                 # end_date = (old + delta).strftime('%Y-%m-%d')
                         else:
                             continue
                     else:
                         continue
                 ret = FBMsg.ret()
                 ret['data'] = data
                 return Response(ret)
             else:
                 return Response(FBMsg.err_req_baseinfo_list())
         else:
             return Response(FBMsg.err_req_stock_list())
     else:
         return Response(FBMsg.err_req_shipping_list())
示例#2
0
 def post(self, request, format=None):
     data = DataSolve.datasolve(request)
     try:
         if data['code'] == "1031":
             return Response(FBMsg.err_bad())
     except:
         if ShippingModel.objects.filter(appid=request.user.appid).exists():
             if GoodsModel.objects.filter(appid=request.user.appid).exists():
                 if BaseInfoModel.objects.filter(appid=request.user.appid).exists():
                     if ShippingModel.objects.filter(goods_code=data, appid=request.user.appid).exists():
                         if GoodsModel.objects.filter(goods_code=data, appid=request.user.appid).exists():
                             if BaseInfoModel.objects.filter(goods_code=data, appid=request.user.appid).exists():
                                 on_hand_stock = GoodsModel.objects.filter(goods_code=data, appid=request.user.appid).first().on_hand_stock
                                 lead_time = BaseInfoModel.objects.filter(goods_code=data,
                                                                           appid=request.user.appid).first().total_leadtime
                                 today = datetime.date.today()
                                 delta = datetime.timedelta(days=89)
                                 demand_data = ShippingModel.objects.filter(goods_code=data, appid=request.user.appid,
                                 shipping_time__range=[(today - delta).strftime('%Y-%m-%d'), today])
                                 demand = []
                                 for i in range(len(demand_data)):
                                     demand.append({
                                         "goods_code": data,
                                         "forcast_day": demand_data[i].shipping_time,
                                         "forcast_shipping": demand_data[i].shipping_qty,
                                         "forcast_on_hand": 0,
                                         "plan_order_qty": 0,
                                         "oos": ''
                                     })
                                 for j in range(0, 90):
                                     delta = datetime.timedelta(days=j)
                                     a_date = (today - delta).strftime('%Y-%m-%d')
                                     date = [int(x) for x in a_date.split('-')]
                                     b_date = datetime.date(date[0], date[1], date[2])
                                     check_date = 0
                                     for k in demand:
                                         if (k['forcast_day'] - b_date).days == 0:
                                             check_date = 1
                                     if check_date == 0:
                                         demand.append({
                                             "goods_code": data,
                                             "forcast_day": b_date,
                                             "forcast_shipping": 0,
                                             "forcast_on_hand": 0,
                                             "plan_order_qty": 0,
                                             "oos": ''
                                         })
                                 for k in range(1, 91):
                                     delta = datetime.timedelta(days=k)
                                     plan_date = (today + delta).strftime('%Y-%m-%d')
                                     demand.append({
                                         "goods_code": data,
                                         "forcast_day": plan_date,
                                         "forcast_shipping": 0,
                                         "forcast_on_hand": 0,
                                         "plan_order_qty": 0,
                                         "oos": ''
                                     })
                                 ret = FBMsg.ret()
                                 ret["forcast_on_hand"] = on_hand_stock
                                 ret['lead_time'] = lead_time
                                 ret['data'] = demand
                                 return Response(ret)
                             else:
                                 return Response(FBMsg.err_goods_code())
                         else:
                             return Response(FBMsg.err_goods_code())
                     else:
                         return Response(FBMsg.err_goods_code())
                 else:
                     return Response(FBMsg.err_req_baseinfo_list())
             else:
                 return Response(FBMsg.err_req_stock_list())
         else:
             return Response(FBMsg.err_req_shipping_list())