Browse Source

加入统计字段

master
feng 3 years ago
parent
commit
7530b82e64
  1. 15
      src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs
  2. 107
      src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs
  3. 53
      src/Coldairarrow.Entity/DTO/TaskInfoDto.cs
  4. 4
      src/Coldairarrow.Entity/HuiYan/pricetasklog.cs
  5. 10
      src/Coldairarrow.Entity/HuiYan/teamitems.cs
  6. 3
      src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs
  7. 5
      客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
  8. 2
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/api/http.js
  9. 6
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/router/index.js
  10. 58
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/info/Index.vue
  11. 22
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/items/Index.vue
  12. 20
      客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/pricetask/Index.vue

15
src/Coldairarrow.Api/Controllers/HuiYan/teamitemsController.cs

@ -4,6 +4,7 @@ using Coldairarrow.Entity.HuiYan;
using Coldairarrow.Util;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@ -114,5 +115,19 @@ namespace Coldairarrow.Api.Controllers.HuiYan
{
return _teamitemsBus.GetTeamCount();
}
/// <summary>
/// 获取比价统计信息
/// </summary>
/// <param name="type"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
[HttpGet]
public Task<PriceTaskInfo> GetMyTaskInfo(int type, DateTime start, DateTime end)
{
return _teamitemsBus.GetMyTaskInfo(type, start, end);
}
}
}

107
src/Coldairarrow.Business/HuiYan/teamitemsBusiness.cs

@ -255,6 +255,57 @@ namespace Coldairarrow.Business.HuiYan
return Error("操作失败!");
}
public async Task<PriceTaskInfo> GetMyTaskInfo(int type,DateTime start,DateTime end)
{
Expression<Func< pricetasklog, teamitems, TaskInfoDto >> select = (a, b) => new TaskInfoDto
{
IsPass = b.IsQualified==true,
TeamId = b.TeamId,
TeamUserId = b.UserId,
TeamDate = b.CreateTime,
TeamOverDate = b.UpdateDate
};
select = select.BuildExtendSelectExpre();
var q_titem = Db.GetIQueryable<teamitems>();
var q = from a in q_titem.AsExpandable()
join b in Db.GetIQueryable<pricetasklog>() on a.Id equals b.TeamItemId into ab
from b in ab.DefaultIfEmpty()
select @select.Invoke(b, a);
var where = LinqHelper.True<TaskInfoDto>();
where = where.And(c => c.CreateTime >= start && c.CreateTime <= end);
//团队
if (type == 0)
{
where = where.And(c => c.TeamId == _operator.TeamId);
}
//比价
else
{
where = where.And(c => c.UserId == _operator.UserId);
}
var list = await q.Where(where).ToListAsync();
var model = new PriceTaskInfo()
{
AuditCount = list.Count(c => c.State == PriceTaskState.),
OverCount = list.Count(c => c.State == PriceTaskState.),
PassCount = list.Count(c => c.IsPass),
PublishCount = list.Count
};
if (list.Count > 0) {
model.PassRate = Math.Round(((decimal)model.PassCount / list.Count) * 100, 2);
}
return model;
}
public AjaxResult SetState(string id, int state)
{
@ -271,6 +322,14 @@ namespace Coldairarrow.Business.HuiYan
int row = Db.Update<teamitems>(c => c.Id == id, (item) =>
{
item.State = state;
if ((Entity.Enum.TeamItemState)state == TeamItemState.)
{
//完成日期
item.UpdateDate = DateTime.Now;
//判断是否合格
item.IsQualified = CheckIsPass(item);
}
});
if (row <= 0)
@ -313,6 +372,54 @@ namespace Coldairarrow.Business.HuiYan
return Error("操作失败!");
}
/// <summary>
/// 检测是否合格
/// </summary>
/// <returns></returns>
private bool CheckIsPass(teamitems item)
{
decimal profits = 0;
var extList= Newtonsoft.Json.JsonConvert.DeserializeObject<List<TeamItemExtension>>(item.ExtensionJson);
var ex= extList.OrderByDescending(c => c.Profits).FirstOrDefault();
if (ex == null)
return false;
//利润率
profits = ex.Profits;
//竞品客单为50元以下,利润率达80%
if (item.RivalPrice < 50)
{
return profits >= 80;
}
//竞品客单为50-100元,利润率达70%
if (item.RivalPrice >= 50&&item.RivalPrice<100)
{
return profits >= 70;
}
//竞品客单为100-150元,利润率达60%
if (item.RivalPrice >= 100 && item.RivalPrice < 150)
{
return profits >= 60;
}
//竞品客单为150-300元,利润率达50%
if (item.RivalPrice >= 150 && item.RivalPrice < 300)
{
return profits >= 50;
}
//竞品客单为300元以上,利润率达40%
if (item.RivalPrice >= 300)
{
return profits >= 40;
}
return false;
}
public AjaxResult DeleteItem(string id)
{

53
src/Coldairarrow.Entity/DTO/TaskInfoDto.cs

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Coldairarrow.Entity.DTO
{
public class TaskInfoDto:HuiYan.pricetasklog
{
/// <summary>
/// 是否通过
/// </summary>
public bool IsPass { get; set; }
public string TeamId { get; set; }
public string TeamUserId { get; set; }
public DateTime? TeamDate { get; set; }
public DateTime? TeamOverDate { get; set; }
}
public class PriceTaskInfo
{
/// <summary>
/// 待审核任务数量
/// </summary>
public int AuditCount { get; set; }
/// <summary>
/// 完成任务数量
/// </summary>
public int OverCount { get; set; }
/// <summary>
/// 合格任务数量
/// </summary>
public int PassCount { get; set; }
/// <summary>
/// 发布任务数
/// </summary>
public int PublishCount { get; set; }
/// <summary>
/// 合格率
/// </summary>
public decimal PassRate { get; set; }
}
}

4
src/Coldairarrow.Entity/HuiYan/pricetasklog.cs

@ -53,5 +53,9 @@ namespace Coldairarrow.Entity.HuiYan
/// </summary>
public PriceTaskState State { get; set; }
/// <summary>
/// 审核提交时间,超过24小时将自动完成
/// </summary>
public DateTime? WorkDate { get; set; }
}
}

10
src/Coldairarrow.Entity/HuiYan/teamitems.cs

@ -115,5 +115,15 @@ namespace Coldairarrow.Entity.HuiYan
/// 品类词ID
/// </summary>
public string CatId { get; set; }
/// <summary>
/// 是否合格
/// </summary>
public bool? IsQualified { get; set; }
/// <summary>
/// 完成时间
/// </summary>
public DateTime? UpdateDate { get; set; }
}
}

3
src/Coldairarrow.IBusiness/HuiYan/IteamitemsBusiness.cs

@ -1,6 +1,7 @@
using Coldairarrow.Entity.DTO;
using Coldairarrow.Entity.HuiYan;
using Coldairarrow.Util;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@ -22,5 +23,7 @@ namespace Coldairarrow.Business.HuiYan
AjaxResult SetItem(TeamitemDto model);
AjaxResult SetState(string id, int state);
AjaxResult GetTeamCount();
Task<PriceTaskInfo> GetMyTaskInfo(int type, DateTime start, DateTime end);
}
}

5
客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs

@ -103,6 +103,11 @@ namespace 齐越慧眼.UserControls
return ApiHelper.JwtToken;
}
public bool getType()
{
return App.IsPriceTaskUser;
}
public string getItemInfoByUrl(string url)
{
// https://item.jd.com/10030884795783.html

2
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/api/http.js

@ -19,7 +19,7 @@ else if (process.env.NODE_ENV == 'production') {
let ipAddress = axios.defaults.baseURL;
//axios.defaults.baseURL = 'http://localhost:5000/';
axios.defaults.baseURL = 'http://localhost:5000/';
//axios.defaults.baseURL = 'http://hyapi.qiyue666.com/';
axios.interceptors.request.use((config) => {

6
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/router/index.js

@ -3,6 +3,7 @@ import VueRouter from 'vue-router'
import Home from '../views/cats/Index.vue'
import Items from '../views/items/Index.vue'
import PriceTask from '../views/pricetask/Index.vue'
import Info from '../views/info/Index.vue'
Vue.use(VueRouter)
@ -21,6 +22,11 @@ const routes = [
path: '/task',
name: 'task',
component: PriceTask
},
{
path: '/info',
name: 'info',
component: Info
}
]

58
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/info/Index.vue

@ -0,0 +1,58 @@
<template>
<a-card>
<a-row>
<a-col :span="8">
时间
<a-date-picker v-model="startDate" />
~
<a-date-picker v-model="endDate" />
</a-col>
<a-col :span="4">
<a-button style="margin-left:15px;" @click="getInfoData">查询</a-button>
</a-col>
</a-row>
<div style="margin-top:10px">
<a-tag @click="changeDate(item.value)" style="width:73px;text-align: center;" color="#02A7F0" v-for="item in timeTypes" :key="item.value">{{item.name}}</a-tag>
</div>
</a-card>
</template>
<script>
import moment from "moment"
export default {
data() {
return {
infoData:{},
startDate:undefined,
endDate:undefined,
isPriceTaskUser:false,
//0,1,3,7,15,30
timeTypes:[{name:'今天',value:0},{name:'昨天',value:1},{name:'近3天',value:3},{name:'近7天',value:7},{name:'近15天',value:15},{name:'近30天',value:30}]
}
},
mounted() {
if(hyCoreModel){
hyCoreModel.getType().then(type=>{
this.isPriceTaskUser=type
console.log(this.isPriceTaskUser,'this.isPriceTaskUser')
})
}
},
methods: {
changeDate(day){
//.format('YYYY-MM-DD'),
this.endDate=moment()
this.startDate=moment().add(day*-1,'days')
},
getInfoData(){
var start=this.startDate.format('YYYY-MM-DD')
var end=this.endDate.format('YYYY-MM-DD')
this.http.get(`/HuiYan/teamitems/GetMyTaskInfo?type=${this.isPriceTaskUser?1:0}&start=${start}&end=${end}`).then(res=>{
console.log(res)
})
}
}
}
</script>

22
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/items/Index.vue

@ -366,7 +366,7 @@
<a-row justify="center" type="flex" :align="'middle'">
<a-col :span="4">
<div class="borderNoTop">
<a style="text-align: left;" class=" itemtitle" :title="item.Title">{{
<a style="text-align: left;" class=" itemtitle" :title="item.Title" target="_black" :href="item.GoodsUrl">{{
item.Title
}}</a>
<div style="text-align: left;">
@ -398,6 +398,26 @@
</a-button>
</a-dropdown>
<a-dropdown style="margin-left: 10px" v-if="item.RivalImg">
<a-menu slot="overlay">
<a-menu-item
key="1"
@click="getImgBase64(getImgPath(item.RivalImg), 1)"
>
阿里巴巴
</a-menu-item>
<a-menu-item
key="2"
@click="getImgBase64(getImgPath(item.RivalImg), 2)"
>
京东
</a-menu-item>
</a-menu>
<a-button type="primary">
竞品图搜款 <a-icon type="down" />
</a-button>
</a-dropdown>
<a-button
style="margin-left: 10px"
type="primary"

20
客户端/齐越慧眼/齐越慧眼/vuepage/client/src/views/pricetask/Index.vue

@ -380,6 +380,26 @@
搜图 <a-icon type="down" />
</a-button>
</a-dropdown>
<a-dropdown style="margin-left: 10px" v-if="item.RivalImg">
<a-menu slot="overlay">
<a-menu-item
key="1"
@click="getImgBase64(getImgPath(item.RivalImg), 1)"
>
阿里巴巴
</a-menu-item>
<a-menu-item
key="2"
@click="getImgBase64(getImgPath(item.RivalImg), 2)"
>
京东
</a-menu-item>
</a-menu>
<a-button type="primary">
竞品图搜款 <a-icon type="down" />
</a-button>
</a-dropdown>
</span>
<a-button

Loading…
Cancel
Save