using AutoMapper;
using Kean.Domain.Material.Models;
using Kean.Infrastructure.Database;
using Kean.Infrastructure.Database.Repository.Default;
using Kean.Infrastructure.Database.Repository.Default.Entities;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Kean.Infrastructure.Repository
{
///
/// 物料仓库
///
public class MaterialRepository :
Domain.Material.Repositories.IMaterialRepository
{
private readonly IMapper _mapper; // 模型映射
private readonly IDefaultDb _database; // 默认数据库
///
/// 构造函数
///
public MaterialRepository(
IMapper mapper,
IDefaultDb database)
{
_mapper = mapper;
_database = database;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsMaterialExist 方法
*/
public async Task IsMaterialExist(int id)
{
return (await _database.From()
.Where(g => g.GOODS_FLAG == true && g.GOODS_ID == id)
.Single(g => new { Count = Function.Count(g.GOODS_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsMaterialCodeExist 方法
*/
public async Task IsMaterialCodeExist(string code, int? igrone)
{
var schema = _database.From()
.Where(g => g.GOODS_FLAG == true && g.GOODS_CODE == code);
if (igrone.HasValue)
{
schema = schema.Where(g => g.GOODS_ID != igrone.Value);
}
return (await schema.Single(g => new { Count = Function.Count(g.GOODS_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsMaterialCodeExist 方法
*/
public async Task IsMaterialNameExist(string name, int? igrone)
{
var schema = _database.From()
.Where(g => g.GOODS_FLAG == true && g.GOODS_NAME == name);
if (igrone.HasValue)
{
schema = schema.Where(g => g.GOODS_ID != igrone.Value);
}
return (await schema.Single(g => new { Count = Function.Count(g.GOODS_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.CreateMaterial 方法
*/
public async Task CreateMaterial(Material material)
{
//@=@ 固定值
var entity = _mapper.Map(material);
entity.TYPE_ID = "1";
if (entity.CLASS_ID == 5 || entity.CLASS_ID == 6 || entity.CLASS_ID == 9)
{
entity.TYPE_ID = "4";
}
entity.GOODS_FLAG = true;
entity.UPDATE_TIME = entity.CREATE_TIME = DateTime.Now;
var id = await _database.From().Add(entity);
return Convert.ToInt32(id);
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.ModifyMaterial 方法
*/
public async Task ModifyMaterial(Material material)
{
var entity = _mapper.Map(material);
entity.GOODS_FLAG = true;
entity.UPDATE_TIME = DateTime.Now;
await _database.From().Update(entity, nameof(T_GOODS_MAIN.CREATE_TIME));
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.DeleteMaterial 方法
*/
public async Task DeleteMaterial(int id)
{
await _database.From()
.Where(g => g.GOODS_ID == id)
.Update(new
{
GOODS_FLAG = false,
UPDATE_TIME = DateTime.Now
});
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.UnbindMaterialCategory 方法
*/
public async Task UnbindMaterialCategory(int category)
{
await _database.From()
.Where(g => g.CLASS_ID == category)
.Update(new
{
CLASS_ID = default(int?),
UPDATE_TIME = DateTime.Now
});
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsCategoryExist 方法
*/
public async Task IsCategoryExist(int id)
{
return (await _database.From()
.Where(c => c.CLASS_FLAG == true && c.CLASS_ID == id)
.Single(c => new { Count = Function.Count(c.CLASS_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsCategoryExist 方法
*/
public async Task IsCategoryExist(string name, int? igrone)
{
var schema = _database.From()
.Where(c => c.CLASS_FLAG == true && c.CLASS_NAME == name);
if (igrone.HasValue)
{
schema = schema.Where(c => c.CLASS_ID != igrone.Value);
}
return (await schema.Single(c => new { Count = Function.Count(c.CLASS_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.CreateCategory 方法
*/
public async Task CreateCategory(Category category)
{
var entity = _mapper.Map(category);
entity.CLASS_FLAG = true;
entity.UPDATE_TIME = entity.CREATE_TIME = DateTime.Now;
var id = await _database.From().Add(entity);
return Convert.ToInt32(id);
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.ModifyCategory 方法
*/
public async Task ModifyCategory(Category category)
{
var entity = _mapper.Map(category);
entity.CLASS_FLAG = true;
entity.UPDATE_TIME = DateTime.Now;
await _database.From().Update(entity, nameof(T_GOODS_CLASS.CREATE_TIME));
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.DeleteCategory 方法
*/
public async Task DeleteCategory(int id)
{
await _database.From()
.Where(c => c.CLASS_ID == id)
.Update(new
{
CLASS_FLAG = false,
UPDATE_TIME = DateTime.Now
});
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.UnbindCategoryParent 方法
*/
public async Task UnbindCategoryParent(int id)
{
await _database.From()
.Where(c => c.CLASS_PARENT_ID == id)
.Update(new
{
CLASS_PARENT_ID = 0,
UPDATE_TIME = DateTime.Now
});
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsSafetyExist 方法
*/
public async Task IsSafetyExist(int id)
{
return (await _database.From()
.Where(s => s.SAFETY_ID == id)
.Single(s => new { Count = Function.Count(s.SAFETY_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsSafetyExist 方法
*/
public async Task IsSafetyExist(int material, IEnumerable warehouse, int? igrone)
{
var schema = _database.From()
.Where(s => s.GOODS_ID == material);
if (igrone.HasValue)
{
schema = schema.Where(c => c.SAFETY_ID != igrone.Value);
}
return (await schema.Single(c => new { Count = Function.Count(c.SAFETY_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.CreateSafety 方法
*/
public async Task CreateSafety(Safety safety)
{
var timestamp = DateTime.Now;
var entity = _mapper.Map(safety);
entity.UPDATE_TIME = entity.CREATE_TIME = timestamp;
var id = Convert.ToInt32(await _database.From().Add(entity));
foreach (var item in safety.Warehouse)
{
await _database.From().Add(new()
{
SAFETY_ID = id,
WAREHOUSE_ID = item,
CREATE_TIME = timestamp,
UPDATE_TIME = timestamp
});
}
return id;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.ModifySafety 方法
*/
public async Task ModifySafety(Safety safety)
{
var timestamp = DateTime.Now;
var entity = _mapper.Map(safety);
entity.UPDATE_TIME = timestamp;
await _database.From().Update(entity, nameof(T_GOODS_SAFETY.CREATE_TIME));
await _database.From().Where(s => s.SAFETY_ID == safety.Id).Delete();
//foreach (var item in safety.Warehouse)
//{
await _database.From().Add(new()
{
SAFETY_ID = safety.Id,
//WAREHOUSE_ID = item,
CREATE_TIME = timestamp,
UPDATE_TIME = timestamp
});
//}
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.DeleteSafety 方法
*/
public async Task DeleteSafety(int id)
{
await _database.From().Where(s => s.SAFETY_ID == id).Delete();
await _database.From().Where(s => s.SAFETY_ID == id).Delete();
}
/////////////////////////////////////////////////////////
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.GetMaterial 方法
*/
public async Task GetMaterial(int? goodsid, string code, bool bLike)
{
var schema = _database.From();
if (goodsid.HasValue)
{
schema.Where(r => r.GOODS_ID == goodsid);
}
else
{
if (bLike)
{
schema.Where(r => r.GOODS_CODE.StartsWith(code));
}
else
{
schema.Where(r => r.GOODS_CODE == code);
}
}
var material = await schema.Single();
return JsonConvert.SerializeObject(_mapper.Map(material));
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsPallet 方法
*/
public async Task IsPallet(int goodsid)
{
return (await _database.From()
.Join(Join.Inner, (m, c) => m.CLASS_ID == c.CLASS_ID)
.Where((m, c) => c.CLASS_FLAG == true && m.GOODS_ID == goodsid && c.CLASS_PARENT_ID == 4)
.Single((m, c) => new { Count = Function.Count(c.CLASS_ID) })).Count > 0;
}
/*
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.GetMaterialClass 方法
*/
public async Task GetMaterialClass(int goodsid)
{
var material = _database.From()
.Where(r=>r.GOODS_ID == goodsid)
.Query(r => r.CLASS_ID);
var calss = await _database.From()
.Where(r=> material.Contains(r.CLASS_ID))
.Single();
return JsonConvert.SerializeObject(_mapper.Map(calss));
}
}
}