using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using MadRunFabric.Common;
using WorkOrderApi.IRepositories;
using Microsoft.Extensions.Logging;
using System.Security.Claims;
using MadRunFabric.Model.WorkOrderApi;
using WorkOrderApi.Areas.Hy_Order.Input;
using MongoDB.Bson;
using Microsoft.Extensions.Configuration;
using System.Reflection;
using ConfigurationApi.IRepositories;
using System.Data;
using WorkOrderApi.Model.Dto;
using MongoDB.Driver;
// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace WorkOrderApi.Areas.Hy_Order.Controllers
{
///
/// 客户档案 - 售后管理系统
///
[Area("hy")]
//[Authorize]
[ApiVersion("6.0")]
[Route("api/[controller]")]
[Produces("application/json")]
public class CusCustomerController : BaseController
{
private readonly ILogger _logger;
private readonly ICus_Customer_BaseRepository _cus_customer_baseRepository;
private readonly ICus_Customer_ProjectRepository _cus_customer_projectepository;
private readonly IConfiguration _configuration;
private readonly ISys_DictionaryValueRepository _sys_dictionaryValuerepository;
private readonly ICus_FollowRecordRepository _cus_followrecordrepository;
private readonly ISys_ProvincesRepository _sys_provincesrepository;
private readonly ISys_CityRepository _sys_cityrepository;
public CusCustomerController(
ILogger logger,
ICus_Customer_BaseRepository cus_customer_baseRepository,
IConfiguration configuration,
ICus_Customer_ProjectRepository cus_customer_projectepository,
ISys_DictionaryValueRepository sys_dictionaryValuerepository,
ICus_FollowRecordRepository cus_followrecordrepository,
ISys_ProvincesRepository sys_provincesrepository,
ISys_CityRepository sys_cityrepository
)
{
_logger = logger;
_cus_customer_baseRepository = cus_customer_baseRepository;
_configuration = configuration;
_cus_customer_projectepository = cus_customer_projectepository;
_sys_dictionaryValuerepository = sys_dictionaryValuerepository;
_cus_followrecordrepository = cus_followrecordrepository;
_sys_provincesrepository = sys_provincesrepository;
_sys_cityrepository = sys_cityrepository;
}
#region 客户档案
///
/// 获取客户分页
///
[HttpGet("getlistbypage")]
public IActionResult GetListsByPageAsync(string keyword, string province, string city, string stime, string etime, int pageindex = 1, int pagesize = 10)
{
string rolecode = User.Claims.FirstOrDefault(c => c.Type == "RoleCode").Value;
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
int recordCount = 0;
var result = _cus_customer_baseRepository.GetListsByPage(keyword, province, city, stime, etime, rolecode, usercode, pageindex, pagesize, out recordCount);
var obj = new
{
rows = result.ToList(),
total = recordCount
};
return Success("获取成功", obj);
}
///
/// 获取客户详情 by 手机,单位名称
///
///
///
///
[HttpGet("getsinglebytelcompanyame")]
public async Task GetSingleByTelCompanyameAsync(string tel, string companyame)
{
if (string.IsNullOrEmpty(tel))
return Success("参数错误", null);
var model = (await _cus_customer_baseRepository.GetSingle(x => x.mobilephone == tel && x.companyame == companyame && x.isdelete == 0));
return Success("获取成功", model);
}
///
/// 获取客户详情
///
[HttpGet("getsingle")]
public async Task GetSingleAsync(string id)
{
var model = await _cus_customer_baseRepository.GetSingle(x => x.id == id && x.isdelete == 0);
return Success("获取成功", model);
}
///
/// 添加客户
///
[HttpPost("add")]
public async Task AddAsync(CusCustomerInput input)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
try
{
#region 判断验证
if (string.IsNullOrWhiteSpace(input.name))
return Error("请输入联系人");
if (string.IsNullOrEmpty(input.mobilephone))
return Error("请输入手机号码");
var listCus = await _cus_customer_baseRepository.Get(x => x.mobilephone == input.mobilephone && x.isdelete == 0);
var model = listCus.FirstOrDefault();
if (model != null)
return Error("手机号码已存在");
#endregion
model = new Cus_Customer_Base();
#region model 添加客户对象
//model.id = cusid;
model.name = input.name;
model.mobilephone = input.mobilephone;
model.telephone = input.telephone;
model.manager = input.manager;
model.customername = input.customername;
model.companyame = input.companyame;
model.province = input.province; //省
model.city = input.city; //市
model.address = input.address;
model.iscustomer = input.iscustomer;
model.customfields = input.customfields;
model.rolecode = input.rolecodes;
model.usercode = input.usercodes;
model.createuser = usercode;
model.createusername = username;
#endregion
string customerid = await _cus_customer_baseRepository.AddRetID(model);
if (!string.IsNullOrEmpty(customerid))
{
return Success("保存成功");
}
else
return Error("保存失败");
}
catch (Exception ex)
{
return Error(ex.Message);
}
}
///
/// 修改客户
///
[HttpPost("update")]
public async Task UpdateAsync(CusCustomerInput input)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
var model = (await _cus_customer_baseRepository.Get(p => p.id == input.id)).FirstOrDefault();
if (model != null)
{
#region 判断验证
if (model.isdelete == 1)
return Error("用户已删除");
if (string.IsNullOrWhiteSpace(input.name))
return Error("请输入联系人");
if (string.IsNullOrEmpty(input.mobilephone))
return Error("请输入联系电话");
#endregion
#region model 客户对象
model.name = input.name;
model.mobilephone = input.mobilephone;
model.telephone = input.telephone;
model.manager = input.manager;
model.customername = input.customername;
model.companyame = input.companyame;
model.province = input.province; //省
model.city = input.city; //市
model.address = input.address;
model.iscustomer = input.iscustomer;
model.customfields = input.customfields;
model.rolecode = input.rolecodes;
model.usercode = input.usercodes;
#endregion
bool b = await _cus_customer_baseRepository.UpdateOne(model);
if (b)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
return Error("参数错误");
}
///
/// 删除客户
///
///
///
[HttpPost("delete")]
public async Task DeleteAsync(string[] ids)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
//使用逻辑删除
var res = 0;
if (ids != null && ids.Length > 0)
{
foreach (var id in ids)
{
var model = await _cus_customer_baseRepository.GetSingle(id);
model.isdelete = 1;
model.deleteuser = usercode;
model.deletetime = DateTime.Now;
if (await _cus_customer_baseRepository.UpdateOne(model))
{
#region 删除相关表数据
var listCus_Pro = await _cus_customer_projectepository.Get(p => p.customerid == model.id && p.isdelete == 0);
foreach (var modelPro in listCus_Pro)
{
modelPro.isdelete = 1;
modelPro.deleteuser = usercode;
modelPro.deletetime = DateTime.Now;
await _cus_customer_projectepository.UpdateOne(modelPro);
}
#endregion
res += 1;
}
}
if (res == ids.Length)
return Success("删除成功");
else if (res > 0 && res < ids.Length)
return Error("部分删除失败");
else
return Error("删除失败");
}
else
return Error("请选择要删除的记录");
}
///
/// 上传文件并导入数据库 - 客户档案
///
/// 默认为-1:1、为-1时,获取excel标题;2、为0时,不获取excel标题
///
[HttpPost("importexcelcus")]
public async Task ImportExcelCus(int headrow = -1)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
Microsoft.AspNetCore.Http.IFormFile _upfile = Request.Form.Files[0];
if (!_upfile.ContentType.Equals("application/vnd.ms-excel") && !_upfile.ContentType.Equals("application/x-xls") && !_upfile.ContentType.Equals("application/x-xlsx") && !_upfile.ContentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !_upfile.ContentType.Equals("application/octet-stream"))
return Error($"请正确上传Excel文件:file.ContentType={_upfile.ContentType}");
NPOIHelper npoi = new NPOIHelper();
var dtExcel = npoi.ExcelToTable1(_upfile, headrow);
int num = dtExcel.Rows.Count;
var cols = dtExcel.Columns;
int colnum = cols.Count;
string dbkeys = _configuration["upload:acotdbkeys"].ToString();
string[] dbcols = dbkeys.Split(",");
string errmsg = string.Empty;
if (num > 0)
{
var list_pro = (await _sys_provincesrepository.Get()).ToList();
var list_city = (await _sys_cityrepository.GetAll()).ToList();
int index = 1;
// 初始化新增列(字段名称)
string fields_names = string.Empty;
foreach (System.Data.DataRow dr in dtExcel.Rows)
{
var dbcolslist = dbcols.ToList();
if (index == 1)
{
// 获取第一行标题 dbcolslist.Count
for (int i = 0; i < colnum; i++)
{
fields_names = dr[i].ToString() + ",";
}
fields_names = fields_names.TrimEnd(',');
}
else
{
// 获取数据
var model = new Cus_Customer_Base();
model.createuser = usercode;
model.createusername = username;
//model.cusname = dr.cusname;
//model.phone = dr.phone;
//model.cusaddr = dr.cusaddr;
model.createtime = DateTime.Now.ToLocalTime();
Type t = model.GetType();
PropertyInfo[] PropertyList = t.GetProperties();
var province_code = "";
foreach (PropertyInfo item in PropertyList)
{
if (dbcolslist.Contains(item.Name))
{
object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
#region 省市获取code by name
if (item.Name == "province")
{
var model_pro = list_pro.FirstOrDefault(x => x.provincename.Equals(v.ToString()));
province_code = model_pro != null ? model_pro.provincecode : "";
item.SetValue(model, province_code, null);
}
if (item.Name == "city")
{
var model_city = list_city.FirstOrDefault(x => x.provincecode.Equals(province_code) && x.cityname.Equals(v.ToString()));
var city_code = model_city != null ? model_city.citycode : "";
item.SetValue(model, city_code, null);
}
#endregion
item.SetValue(model, v, null);
}
}
#region 自定义新增列 - 处理
var fields_names_list = fields_names.Split(",").ToList();
var customfields = new List();
for (int i = dbcolslist.Count; i < colnum; i++)
{
var model_fields = new CustomfieldsList();
string name = fields_names_list[i];
string fields = ChineseToPinYin.Convert(name);
string value = dr[i].ToString();
model_fields.name = name;
model_fields.fields = fields;
model_fields.value = value;
customfields.Add(model_fields);
}
#endregion
model.customfields = customfields;
bool b = await _cus_customer_baseRepository.Add(model);
if (!b)
{
if (!string.IsNullOrEmpty(errmsg))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!";
}
else
{
errmsg = "第" + index + "行导入失败!";
}
}
}
index++;
}
}
else
{
return Error("文件中无数据");
}
if (!string.IsNullOrEmpty(errmsg))
{
//删除已导入的部分
return Error(errmsg);
}
return Success("导入成功");
}
///
/// 导出excel - 客户档案
///
///
///
///
[Authorize]
[HttpGet("exportexcelcus")]
[AllowAnonymous]
public IActionResult ExportExcelCusAsync(string keyword, string province, string city, string stime, string etime)
{
string rolecode = User.Claims.FirstOrDefault(c => c.Type == "RoleCode").Value;
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
try
{
var result = _cus_customer_baseRepository.GetListsExport(keyword, province, city, stime, etime, rolecode, usercode);
//导出
NPOIHelper npoi = new NPOIHelper();
var tlist = result.ToList();
var tb = ModelConvertHelper.ConvertListToDataTable(tlist);
string[] cols = { "姓名", "手机号码", "固定号码", "所在省", "所在市", "具体地址" };
string[] colname = { "name", "mobilephone", "telephone", "provincename", "cityname", "address" };
byte[] sm = npoi.ExportToExcel1(tb, cols, colname);
if (sm != null)
{
return File(sm, "application/vnd.ms-excel", "客户档案信息.xlsx");
}
else
{
return Error("导出失败");
}
}
catch (Exception ex)
{
_logger.LogError(ex, "导出异常");
return Error("导出失败");
}
}
///
/// 转移客户
///
[HttpPost("move")]
public async Task MoveAsync(string id,string rolecode, string usercode)
{
string nowusercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
var model = (await _cus_customer_baseRepository.Get(p => p.id == id)).FirstOrDefault();
if (model != null)
{
#region 判断验证
if (model.isdelete == 1)
return Error("用户已删除");
//if (string.IsNullOrWhiteSpace(model.rolecode))
// return Error("无需转移客户信息");
if (string.IsNullOrEmpty(model.usercode))
return Error("此用户不是个人用户,无转移权限");
#endregion
#region model 客户对象
model.rolecode = rolecode;
model.usercode = usercode;
#endregion
bool b = await _cus_customer_baseRepository.UpdateOne(model);
if (b)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
return Error("参数错误");
}
#endregion
#region 来电弹屏
///
/// 获取客户详情 by tel - 来电弹屏
///
[HttpGet("getsinglebytelold")]
public async Task GetSingleByTelAsyncOLD(string tel)
{
if (string.IsNullOrEmpty(tel))
return Success("参数错误", null);
var list = (await _cus_customer_baseRepository.Get(x => x.mobilephone == tel && x.isdelete == 0)).ToList();
var model = list.FirstOrDefault();
return Success("获取成功", model);
}
//2019-2-20去掉客户信息部分做修改
///
/// 获取客户项目详情 by tel - 来电弹屏
///
[HttpGet("getsinglebytel")]
public async Task GetSingleByTelAsync(string tel)
{
if (string.IsNullOrEmpty(tel))
return Success("参数错误", null);
var list = (await _cus_customer_projectepository.Get(x => (x.project_mobilephone == tel || x.mobilephone == tel) && x.isdelete == 0)).ToList();
var model = list.FirstOrDefault();
return Success("获取成功", model);
}
///
/// 获取客户项目列表 by tel - 来电弹屏
///
[HttpGet("getinfobytel")]
public async Task GetInfoByTelAsync(string tel)
{
if (string.IsNullOrEmpty(tel))
return Success("参数错误", null);
var list = (await _cus_customer_projectepository.Get(x => (x.project_mobilephone == tel || x.mobilephone == tel) && x.isdelete == 0)).ToList();
//var model = list.FirstOrDefault();
return Success("获取成功", list);
}
///
/// 添加修改客户档案 - 来电弹屏
///
[HttpPost("save")]
public async Task SaveAsync(CusCustomerInput input)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
#region 判断验证
if (string.IsNullOrWhiteSpace(input.name))
return Error("请输入联系人 asdfasdf");
if (string.IsNullOrEmpty(input.mobilephone))
return Error("请输入联系电话");
#endregion
var list = await _cus_customer_baseRepository.Get(x => x.mobilephone == input.mobilephone && x.isdelete == 0);
var model = list.FirstOrDefault();
if (model == null)
{
model = new Cus_Customer_Base();
//添加客户信息
#region model 添加客户对象
model.name = input.name;
model.mobilephone = input.mobilephone;
model.telephone = input.telephone;
model.manager = input.manager;
model.customername = input.customername;
model.companyame = input.companyame;
model.province = input.province; //省
model.city = input.city; //市
model.address = input.address;
model.createuser = usercode;
model.createusername = username;
#endregion
string customerid = await _cus_customer_baseRepository.AddRetID(model);
if (!string.IsNullOrEmpty(customerid))
{
return Success("保存成功");
}
else
return Error("保存失败");
}
else
{
//model = (await _cus_customer_baseRepository.Get(p => p.id == input.id)).FirstOrDefault();
#region model 客户对象
model.name = input.name;
model.mobilephone = input.mobilephone;
model.telephone = input.telephone;
model.manager = input.manager;
model.customername = input.customername;
model.companyame = input.companyame;
model.province = input.province; //省
model.city = input.city; //市
model.address = input.address;
#endregion
bool b = await _cus_customer_baseRepository.UpdateOne(model);
if (b)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
}
///
/// 添加修改客户项目 - 来电弹屏
///
[HttpPost("savepro")]
public async Task SaveProAsync(CusCustomerProInput input)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
#region 判断验证
//if (string.IsNullOrWhiteSpace(input.pro_customerid))
// return Error("用户id不能为空");
if (string.IsNullOrEmpty(input.pro_mobilephone))
return Error("请输入联系电话");
//if (string.IsNullOrEmpty(input.pro_project_name))
// return Error("请输入项目名称");
#endregion
//var list = (await _cus_customer_projectepository.Get(x => x.id == input.pro_id && x.customerid == input.pro_customerid && x.isdelete == 0)).ToList();
var list = (await _cus_customer_projectepository.Get(x => x.name == input.pro_name && x.project_name == input.pro_project_name && x.isdelete == 0)).ToList();
var model = list.FirstOrDefault();
if (model == null)
{
model = new Cus_Customer_Project();
//添加客户信息
#region model 添加客户对象
model.customerid = input.pro_customerid;
model.name = input.pro_name;
model.mobilephone = input.pro_mobilephone;
model.telephone = input.pro_telephone;
model.customername = input.pro_customername;
model.companyame = input.pro_companyame;
model.address = input.pro_address;
model.project_name = input.pro_project_name;
model.ordertime = input.pro_ordertime;
model.acceptancetime = input.pro_acceptancetime;
model.orderendtime = input.pro_orderendtime;
model.guarantee_period = input.pro_guarantee_period;
model.isend = input.pro_isend;
model.project_amount = input.pro_project_amount;
model.project_typeid = input.pro_project_typeid;
model.oem_name = input.pro_oem_name;
model.content = input.pro_content;
model.servicecontent = input.pro_servicecontent;
model.createuser = usercode;
model.createusername = username;
//2019-2-20 添加项目负责人信息
model.project_cusname = input.project_cusname;
model.project_mobilephone = input.project_mobilephone;
model.project_telephone = input.project_telephone;
model.project_address = input.project_address;
//2019-4-12添加客户类型
model.customerdept = input.customerdept;
model.customeremail = input.customeremail;
model.customertype = input.customertype;
#endregion
bool bl = await _cus_customer_projectepository.Add(model);
if (bl)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
else
{
#region model 客户对象
model.name = input.pro_name;
model.mobilephone = input.pro_mobilephone;
model.telephone = input.pro_telephone;
model.customername = input.pro_customername;
model.companyame = input.pro_companyame;
model.address = input.pro_address;
model.project_name = input.pro_project_name;
model.ordertime = input.pro_ordertime;
model.acceptancetime = input.pro_acceptancetime;
model.orderendtime = input.pro_orderendtime;
model.guarantee_period = input.pro_guarantee_period;
model.isend = input.pro_isend;
model.project_amount = input.pro_project_amount;
model.project_typeid = input.pro_project_typeid;
model.oem_name = input.pro_oem_name;
model.content = input.pro_content;
model.servicecontent = input.pro_servicecontent;
//2019-2-20 添加项目负责人信息
model.project_cusname = input.project_cusname;
model.project_mobilephone = input.project_mobilephone;
model.project_telephone = input.project_telephone;
model.project_address = input.project_address;
//2019-4-12添加客户类型
model.customerdept = input.customerdept;
model.customeremail = input.customeremail;
model.customertype = input.customertype;
#endregion
bool b = await _cus_customer_projectepository.UpdateOne(model);
if (b)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
}
#endregion
#region 客户项目
///
/// 获取客户分页
///
[HttpGet("getprolistbypage")]
public IActionResult GetProListsByPageAsync(string keyword, string customerid, string stime, string etime, string projecttypeid, string qdstime, string qdetime, string dqstime, string dqetime, string customertype, string gjstime, string gjetime, int? isend, int pageindex = 1, int pagesize = 10)
{
int recordCount = 0;
var result = _cus_customer_projectepository.GetProListsByPage(keyword, customerid, stime, etime, projecttypeid, qdstime, qdetime, dqstime, dqetime, customertype, gjstime, gjetime, isend, pageindex, pagesize, out recordCount);
var obj = new
{
rows = result.ToList(),
total = recordCount
};
return Success("获取成功", obj);
}
///
/// 获取客户项目下拉
///
[HttpGet("getprolist")]
public IActionResult GetProListsAsync()
{
int recordCount = 0;
var result = _cus_customer_projectepository.GetProLists();
var obj = new
{
rows = result.ToList(),
total = recordCount
};
return Success("获取成功", obj);
}
///
/// 获取客户项目下拉
///
[HttpGet("getpro")]
public IActionResult GetProAsync()
{
int recordCount = 0;
var result = _cus_customer_projectepository.GetPro();
var resu = result.Distinct().ToList();//去重
var obj = new
{
rows = resu,
total = resu.Count
};
return Success("获取成功", obj);
}
///
/// 获取客户详情
///
[HttpGet("getprosingle")]
public IActionResult GetProSingleAsync(string id)
{
var model = _cus_customer_projectepository.GetProDetails(id);
return Success("获取成功", model);
}
///
/// 添加客户
///
[HttpPost("addpro")]
public async Task AddProAsync(CusCustomerProInput input)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
#region 判断验证
//if (string.IsNullOrWhiteSpace(input.pro_customerid))
// return Error("用户id不能为空");
if (string.IsNullOrWhiteSpace(input.pro_name))
return Error("请输入联系人");
if (string.IsNullOrEmpty(input.pro_mobilephone))
return Error("请输入联系电话");
//if (string.IsNullOrEmpty(input.pro_project_name))
// return Error("请输入项目名称");
if (!string.IsNullOrEmpty(input.pro_companyame))
{
var listCus = (await _cus_customer_projectepository.Get(x => x.companyame == input.pro_companyame && x.isdelete == 0)).ToList();
var models = listCus.FirstOrDefault();
if (models != null)
return Error("单位名称已存在");
}
#endregion
var model = new Cus_Customer_Project();
#region model 添加客户对象
model.customerid = input.pro_customerid;
model.name = input.pro_name;
model.mobilephone = input.pro_mobilephone;
model.telephone = input.pro_telephone;
model.customername = input.pro_customername;
model.companyame = input.pro_companyame;
//model.province = input.province; //省
//model.city = input.city; //市
model.address = input.pro_address;
model.project_name = input.pro_project_name;
model.ordertime = input.pro_ordertime;
model.acceptancetime = input.pro_acceptancetime;
model.orderendtime = input.pro_orderendtime;
model.guarantee_period = input.pro_guarantee_period;
model.isend = input.pro_isend;
model.project_amount = input.pro_project_amount;
model.project_typeid = input.pro_project_typeid;
model.oem_name = input.pro_oem_name;
model.content = input.pro_content;
model.servicecontent = input.pro_servicecontent;
model.createuser = usercode;
model.createusername = username;
//2019-2-20 添加项目负责人信息
model.project_cusname = input.project_cusname;
model.project_mobilephone = input.project_mobilephone;
model.project_telephone = input.project_telephone;
model.project_address = input.project_address;
//2019-4-12添加客户类型
model.customerdept = input.customerdept;
model.customeremail = input.customeremail;
model.customertype = input.customertype;
//2019-5-6添加附件
if (input.attachment != null)
{
model.attachment = input.attachment;
}
else
{
model.attachment = new List();
}
#endregion
bool bl = await _cus_customer_projectepository.Add(model);
if (bl)
{
return Success("保存成功");
}
else
return Error("保存失败");
}
///
/// 上传文件并导入数据库
///
///
[HttpPost("importexcelpro")]
public async Task ImportExcelPro(string customerid, int headrow = 0)//string customerid,
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
if (Request.Form.Files.Count <= 0)
{
return Error("获取不到要导入的文件");
}
Microsoft.AspNetCore.Http.IFormFile _upfile = Request.Form.Files[0];
if (!_upfile.ContentType.Equals("application/vnd.ms-excel") && !_upfile.ContentType.Equals("application/x-xls") && !_upfile.ContentType.Equals("application/x-xlsx") && !_upfile.ContentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !_upfile.ContentType.Equals("application/octet-stream"))
return Error($"请正确上传Excel文件:file.ContentType={_upfile.ContentType}");
NPOIHelper npoi = new NPOIHelper();
var dtExcel = npoi.ExcelToTable1(_upfile, headrow);
int num = dtExcel.Rows.Count;
var cols = dtExcel.Columns;
int colnum = cols.Count;
string dbkeys = _configuration["upload:prodbkeys"].ToString();
string[] dbcols = dbkeys.Split(",");
string errmsg = string.Empty;
if (num > 0)
{
int index = 1;
foreach (System.Data.DataRow dr in dtExcel.Rows)
{
var model = new Cus_Customer_Project();
model.createuser = usercode;
model.createusername = username;
//model.cusname = dr.cusname;
//model.phone = dr.phone;
//model.cusaddr = dr.cusaddr;
model.createtime = DateTime.Now.ToLocalTime();
//model.customerid = customerid;
model.customertype = "签约客户";
var dbcolslist = dbcols.ToList();
Type t = model.GetType();
PropertyInfo[] PropertyList = t.GetProperties();
foreach (PropertyInfo item in PropertyList)
{
if (dbcolslist.Contains(item.Name))
{
if (item.Name == "project_typeid")
{
var models = await _sys_dictionaryValuerepository.GetSingle(x => x.name == dr[dbcolslist.IndexOf(item.Name)].ToString());
if (models != null)
{
model.project_typeid = models.id;
}
}
else
{
if (dr[dbcolslist.IndexOf(item.Name)].ToString() != null)
{
if (item.PropertyType == typeof(DateTime))
{
if (dr[dbcolslist.IndexOf(item.Name)].ToString() != "")
{
object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
item.SetValue(model, v, null);
}
}
else
{
if (dr[dbcolslist.IndexOf(item.Name)].ToString() != "")
{
object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
item.SetValue(model, v, null);
}
}
}
}
}
}
bool b = await _cus_customer_projectepository.Add(model);
if (!b)
{
if (!string.IsNullOrEmpty(errmsg))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!";
}
else
{
errmsg = "第" + index + "行导入失败!";
}
}
index++;
}
}
else
{
return Error("文件中无数据");
}
if (!string.IsNullOrEmpty(errmsg))
{
//删除已导入的部分
return Error(errmsg);
}
return Success("导入成功");
}
///
/// 修改客户
///
[HttpPost("updatepro")]
public async Task UpdateProAsync(CusCustomerProInput input)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
var model = (await _cus_customer_projectepository.Get(p => p.id == input.pro_id)).FirstOrDefault();
if (model != null)
{
#region 判断验证
if (model.isdelete == 1)
return Error("用户已删除");
//if (string.IsNullOrWhiteSpace(input.pro_customerid))
// return Error("用户id不能为空");
if (string.IsNullOrWhiteSpace(input.pro_name))
return Error("请输入联系人");
if (string.IsNullOrEmpty(input.pro_mobilephone))
return Error("请输入联系电话");
//if (string.IsNullOrEmpty(input.pro_project_name))
// return Error("请输入项目名称");
#endregion
#region model 客户对象
model.name = input.pro_name;
model.mobilephone = input.pro_mobilephone;
model.telephone = input.pro_telephone;
model.customername = input.pro_customername;
model.companyame = input.pro_companyame;
//model.province = input.province; //省
//model.city = input.city; //市
model.address = input.pro_address;
model.project_name = input.pro_project_name;
model.ordertime = input.pro_ordertime;
model.acceptancetime = input.pro_acceptancetime;
model.orderendtime = input.pro_orderendtime;
model.guarantee_period = input.pro_guarantee_period;
model.isend = input.pro_isend;
model.project_amount = input.pro_project_amount;
model.project_typeid = input.pro_project_typeid;
model.oem_name = input.pro_oem_name;
model.content = input.pro_content;
model.servicecontent = input.pro_servicecontent;
//2019-2-20 添加项目负责人信息
model.project_cusname = input.project_cusname;
model.project_mobilephone = input.project_mobilephone;
model.project_telephone = input.project_telephone;
model.project_address = input.project_address;
//2019-4-12添加客户类型
model.customerdept = input.customerdept;
model.customeremail = input.customeremail;
model.customertype = input.customertype;
model.followcontent = input.followcontent;
model.followtime = input.followtime;
//2019-5-6添加附件
if (input.attachment != null)
{
model.attachment = input.attachment;
}
else
{
model.attachment = new List();
}
#endregion
bool b = await _cus_customer_projectepository.UpdateOne(model);
if (b)
{
#region 修改最新一条跟进记录
if (string.IsNullOrEmpty(input.followcontent))
{
var sort = Builders.Sort.Descending("createTime");
var dModel = await _cus_followrecordrepository.GetSingle(s => s.proid.Equals(input.pro_id), sort);
if (dModel != null)
{
dModel.content = input.followcontent;
dModel.createTime = (DateTime)input.followtime;
await _cus_followrecordrepository.UpdateOne(dModel);
}
}
#endregion
return Success("保存成功");
}
else
return Error("保存失败");
}
return Error("参数错误");
}
///
/// 删除客户
///
///
///
[HttpPost("deletepro")]
public async Task DeleteProAsync(string[] ids)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
//使用逻辑删除
var res = 0;
if (ids != null && ids.Length > 0)
{
foreach (var id in ids)
{
var model = await _cus_customer_projectepository.GetSingle(id);
model.isdelete = 1;
model.deleteuser = usercode;
model.deletetime = DateTime.Now;
if (await _cus_customer_projectepository.UpdateOne(model))
{
res += 1;
}
}
if (res == ids.Length)
return Success("删除成功");
else if (res > 0 && res < ids.Length)
return Error("部分删除失败");
else
return Error("删除失败");
}
else
return Error("请选择要删除的记录");
}
#endregion
#region 潜在客户信息
///
/// 添加跟进信息
///
[HttpPost("addfollowinfo")]
public async Task AddFollowAsync(string id, string content)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
var model = new Cus_FollowRecord();
#region model 添加跟进信息
model.content = content;
model.createName = usercode;
model.createTime = DateTime.Now.ToLocalTime();
model.proid = id;
#endregion
bool bl = await _cus_followrecordrepository.Add(model);
if (bl)
{
//更新客户项目表跟进时间
var modelc = await _cus_customer_projectepository.GetSingle(id);
modelc.followtime = DateTime.Now;
modelc.followcontent = content;
if (await _cus_customer_projectepository.UpdateOne(modelc))
{
return Success("跟进信息保存成功");
}
else
return Error("信息更新失败");
}
else
return Error("信息保存失败");
}
///
/// 获取跟进信息
///
[HttpGet("getfollowlist")]
public async Task GetFollowListsAsync(string id)
{
var lists = (await _cus_followrecordrepository.Get(p => p.proid == id)).ToList();
return Success("获取成功", lists);
}
///
/// 用于项目负责人、客户类型相互转移
///
///
///
[HttpPost("changeinfo")]
public async Task ChangeInfoAsync(string id, string cusname, string customertype, string cusphone)
{
var model = await _cus_customer_projectepository.GetSingle(id);
if (!string.IsNullOrEmpty(cusname))
{
model.project_cusname = cusname;
}
if (!string.IsNullOrEmpty(customertype))
{
model.customertype = customertype;
}
if (!string.IsNullOrEmpty(cusphone))
{
model.project_mobilephone = cusphone;
}
if (await _cus_customer_projectepository.UpdateOne(model))
{
return Success("转移成功"); ;
}
else
return Error("转移失败");
}
///
/// 导出excel
///
///
///
///
[Authorize]
[HttpGet("exportexcel")]
[AllowAnonymous]
public async Task ExportExcelAsync(string keyword, string customerid, string stime, string etime, string projecttypeid, string qdstime, string qdetime, string dqstime, string dqetime, string customertype, string gjstime, string gjetime, int? isend)
{
try
{
int recordCount = 0;
var result = _cus_customer_projectepository.GetProLists(keyword, customerid, stime, etime, projecttypeid, qdstime, qdetime, dqstime, dqetime, customertype, gjstime, gjetime, isend, out recordCount);
//导出
NPOIHelper npoi = new NPOIHelper();
var tlist = result.ToList();
var tb = ModelConvertHelper.ConvertListToDataTable(tlist);
if (customertype == "签约客户")
{
string[] cols = { "姓名", "手机号码", "固定号码", "客户名称", "单位名称", "地址", "项目名称", "项目负责人", "负责人手机号", "负责人固话", "负责人地址", "项目类型", "项目金额", "合同签订时间", "验收日期", "到期日期", "质保期", "是否到期", "设备厂家 / 中间件", "授权内容", "售后服务内容" };
string[] colname = { "name", "mobilephone", "telephone", "customername", "companyame", "address", "project_name", "project_cusname", "project_mobilephone", "project_telephone", "project_address", "project_typeid", "project_amount", "ordertime", "acceptancetime", "orderendtime", "guarantee_period", "isend", "oem_name", "content", "servicecontent" };
byte[] sm = npoi.ExportToExcel1(tb, cols, colname);
if (sm != null)
{
return File(sm, "application/vnd.ms-excel", "客户信息.xlsx");
}
else
{
return Error("导出失败");
}
}
else if (customertype == "潜在客户")
{
//获取历史跟进信息
DataTable dtnew = tb;
dtnew.Columns.Add("followRecord");
for (int i = 0; i < tb.Rows.Count; i++)
{
string id = tb.Rows[i]["id"].ToString();
var lists = (await _cus_followrecordrepository.Get(p => p.proid == id)).ToList();
string fr = "";
int n = 1;
foreach (var l in lists)
{
fr += n.ToString() + "、" + l.createTime.ToString("yyyy-MM-dd") + " " + l.content + "\n";
n++;
}
dtnew.Rows[i]["followRecord"] = fr;
}
string[] cols = { "单位名称", "客户部门", "手机号码", "联系人", "邮箱", "项目负责人", "跟进日期", "跟进内容", "跟进记录" };
string[] colname = { "companyame", "customerdept", "mobilephone", "name", "customeremail", "project_cusname", "followtime", "followcontent", "followRecord" };
byte[] sm = npoi.ExportToExcel1(dtnew, cols, colname);
if (sm != null)
{
return File(sm, "application/vnd.ms-excel", "潜在客户信息.xlsx");
}
else
{
return Error("导出失败");
}
}
return Error("导出失败");
}
catch (Exception ex)
{
_logger.LogError(ex, "导出异常");
return Error("导出失败");
}
//return Success("导出成功");
}
///
/// 上传文件并导入数据库--导入潜在客户
///
///
[HttpPost("importexcelqz")]
public async Task ImportQExcel(int headrow = 0)
{
string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
string username = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
//if (string.IsNullOrEmpty(taskid))
// return Error("任务id不能为空");
//string usercode = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
Microsoft.AspNetCore.Http.IFormFile _upfile = Request.Form.Files[0];
if (!_upfile.ContentType.Equals("application/vnd.ms-excel") && !_upfile.ContentType.Equals("application/x-xls") && !_upfile.ContentType.Equals("application/x-xlsx") && !_upfile.ContentType.Equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !_upfile.ContentType.Equals("application/octet-stream"))
return Error($"请正确上传Excel文件:file.ContentType={_upfile.ContentType}");
NPOIHelper npoi = new NPOIHelper();
var dtExcel = npoi.ExcelToTable1(_upfile, headrow);
int num = dtExcel.Rows.Count;
var cols = dtExcel.Columns;
int colnum = cols.Count;
string dbkeys = _configuration["upload:qrodbkeys"].ToString();
string[] dbcols = dbkeys.Split(",");
string errmsg = string.Empty;
if (num > 0)
{
int index = 1;
foreach (System.Data.DataRow dr in dtExcel.Rows)
{
DateTime ftime = DateTime.Now;//跟进时间
string fcontent = "";//跟进内容
var model = new Cus_Customer_Project();
model.createuser = usercode;
model.createusername = username;
//model.cusname = dr.cusname;
//model.phone = dr.phone;
//model.cusaddr = dr.cusaddr;
model.createtime = DateTime.Now.ToLocalTime();
model.customertype = "潜在客户";
var dbcolslist = dbcols.ToList();
Type t = model.GetType();
PropertyInfo[] PropertyList = t.GetProperties();
foreach (PropertyInfo item in PropertyList)
{
_logger.LogError(item.Name.ToString(), "导出异常");
_logger.LogError(dbcolslist.ToString(), "导出异常");
if (dbcolslist != null && item != null && item.Name != null && dbcolslist.Contains(item.Name))
{
//object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
//item.SetValue(model, v, null);
if (dr[dbcolslist.IndexOf(item.Name)].ToString() != null)
{
if (item.PropertyType == typeof(DateTime?) || item.PropertyType == typeof(DateTime))
{
if (dr[dbcolslist.IndexOf(item.Name)] != null && dr[dbcolslist.IndexOf(item.Name)].ToString() != "")
{
#region 可空类型
/*Type ty = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");
DateTime? date = DateTime.Now;
string s = dr[dbcolslist.IndexOf(item.Name)].ToString();
if (ty.IsGenericType && ty.GetGenericTypeDefinition() == typeof(Nullable<>))
{
if (String.IsNullOrEmpty(s))
item.SetValue(model, null, null);
else
{
//date = Convert.ChangeType(s, t.GetGenericArguments()[0]);
//object y = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
item.SetValue(model, Convert.ChangeType(s, t.GetGenericArguments()[0]), null);
}
}
else
{
item.SetValue(model, null, null);
}*/
#endregion
object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
item.SetValue(model, v, null);
if (item.Name == "followtime")
{
ftime = DateTime.Parse(dr[dbcolslist.IndexOf(item.Name)].ToString());
}
else if (item.Name == "followcontent")
{
fcontent = dr[dbcolslist.IndexOf(item.Name)].ToString();
}
}
}
else
{
if (dr[dbcolslist.IndexOf(item.Name)].ToString() != "")
{
object v = Convert.ChangeType(dr[dbcolslist.IndexOf(item.Name)].ToString(), item.PropertyType);
item.SetValue(model, v, null);
if (item.Name == "followcontent")
{
fcontent = dr[dbcolslist.IndexOf(item.Name)].ToString();
}
}
}
}
}
}
string addid = await _cus_customer_projectepository.AddRetID(model);//bool b = await _cus_customer_projectepository.Add(model)
//保存跟进记录
if (fcontent != "")
{
var modelr = new Cus_FollowRecord();
modelr.content = fcontent;
modelr.createName = usercode;
modelr.createTime = ftime;
modelr.proid = addid;
bool bl = await _cus_followrecordrepository.Add(modelr);
}
if (string.IsNullOrEmpty(addid))
{
if (!string.IsNullOrEmpty(errmsg))
{
errmsg = errmsg + "\r\n第" + index + "行导入失败!";
}
else
{
errmsg = "第" + index + "行导入失败!";
}
}
index++;
}
}
else
{
return Error("文件中无数据");
}
if (!string.IsNullOrEmpty(errmsg))
{
//删除已导入的部分
return Error(errmsg);
}
return Success("导入成功");
}
#endregion
//2019-5-6 获取合同到期提醒
[Authorize]
[HttpGet("gettxlist")]
public async Task GetListAsync(int daykind = 0)//到期前一月或前几天提醒
{
#region 条件信息
var listfilter = new List>();
listfilter.Add(Builders.Filter.Eq("isdelete", 0));
var filter = Builders.Filter.And(listfilter);
DateTime dtstart = DateTime.Now;
var sort = Builders.Sort.Descending("orderendtime");
var list = await _cus_customer_projectepository.Get(filter, null, sort); ;
switch (daykind)
{
case 0://到期前一月orderendtime到期时间减去现在时间大于0小于等于30
DateTime dtend = dtstart.AddDays(30);
DateTime dt = DateTime.Now.ToLocalTime();
if (DateTime.TryParse(dtstart.ToString("yyyy-MM-dd") + " 00:00:00", out dt))
listfilter.Add(Builders.Filter.Gt("orderendtime", dt));
if (DateTime.TryParse(dtend.ToString("yyyy-MM-dd") + " 23:59:59", out dt))
listfilter.Add(Builders.Filter.Lt("orderendtime", dt));
var filter0 = Builders.Filter.And(listfilter);
list = await _cus_customer_projectepository.Get(filter0, null, sort);
break;
case 1://到期当天
DateTime dtend1 = dtstart;//.AddDays(30);
DateTime dt1 = DateTime.Now.ToLocalTime();
if (DateTime.TryParse(dtstart.ToString("yyyy-MM-dd") + " 00:00:00", out dt1))
listfilter.Add(Builders.Filter.Gt("orderendtime", dt1));
if (DateTime.TryParse(dtend1.ToString("yyyy-MM-dd") + " 23:59:59", out dt1))
listfilter.Add(Builders.Filter.Lt("orderendtime", dt1));
var filter1 = Builders.Filter.And(listfilter);
list = await _cus_customer_projectepository.Get(filter1, null, sort);
break;
default:
break;
}
#endregion
var obj = new
{
data = list
};
return Success("成功", obj);
}
}
}