You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
335 lines
12 KiB
335 lines
12 KiB
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
|
|
{
|
|
/// <summary>
|
|
/// 物料仓库
|
|
/// </summary>
|
|
public class MaterialRepository :
|
|
Domain.Material.Repositories.IMaterialRepository
|
|
{
|
|
private readonly IMapper _mapper; // 模型映射
|
|
private readonly IDefaultDb _database; // 默认数据库
|
|
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
public MaterialRepository(
|
|
IMapper mapper,
|
|
IDefaultDb database)
|
|
{
|
|
_mapper = mapper;
|
|
_database = database;
|
|
}
|
|
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsMaterialExist 方法
|
|
*/
|
|
public async Task<bool> IsMaterialExist(int id)
|
|
{
|
|
return (await _database.From<T_GOODS_MAIN>()
|
|
.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<bool> IsMaterialCodeExist(string code, int? igrone)
|
|
{
|
|
var schema = _database.From<T_GOODS_MAIN>()
|
|
.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<bool> IsMaterialNameExist(string name, int? igrone)
|
|
{
|
|
var schema = _database.From<T_GOODS_MAIN>()
|
|
.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<int> CreateMaterial(Material material)
|
|
{
|
|
//@=@ 固定值
|
|
var entity = _mapper.Map<T_GOODS_MAIN>(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<T_GOODS_MAIN>().Add(entity);
|
|
return Convert.ToInt32(id);
|
|
}
|
|
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.ModifyMaterial 方法
|
|
*/
|
|
public async Task ModifyMaterial(Material material)
|
|
{
|
|
var entity = _mapper.Map<T_GOODS_MAIN>(material);
|
|
entity.GOODS_FLAG = true;
|
|
entity.UPDATE_TIME = DateTime.Now;
|
|
await _database.From<T_GOODS_MAIN>().Update(entity, nameof(T_GOODS_MAIN.CREATE_TIME));
|
|
}
|
|
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.DeleteMaterial 方法
|
|
*/
|
|
public async Task DeleteMaterial(int id)
|
|
{
|
|
await _database.From<T_GOODS_MAIN>()
|
|
.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<T_GOODS_MAIN>()
|
|
.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<bool> IsCategoryExist(int id)
|
|
{
|
|
return (await _database.From<T_GOODS_CLASS>()
|
|
.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<bool> IsCategoryExist(string name, int? igrone)
|
|
{
|
|
var schema = _database.From<T_GOODS_CLASS>()
|
|
.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<int> CreateCategory(Category category)
|
|
{
|
|
var entity = _mapper.Map<T_GOODS_CLASS>(category);
|
|
entity.CLASS_FLAG = true;
|
|
entity.UPDATE_TIME = entity.CREATE_TIME = DateTime.Now;
|
|
var id = await _database.From<T_GOODS_CLASS>().Add(entity);
|
|
return Convert.ToInt32(id);
|
|
}
|
|
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.ModifyCategory 方法
|
|
*/
|
|
public async Task ModifyCategory(Category category)
|
|
{
|
|
var entity = _mapper.Map<T_GOODS_CLASS>(category);
|
|
entity.CLASS_FLAG = true;
|
|
entity.UPDATE_TIME = DateTime.Now;
|
|
await _database.From<T_GOODS_CLASS>().Update(entity, nameof(T_GOODS_CLASS.CREATE_TIME));
|
|
}
|
|
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.DeleteCategory 方法
|
|
*/
|
|
public async Task DeleteCategory(int id)
|
|
{
|
|
await _database.From<T_GOODS_CLASS>()
|
|
.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<T_GOODS_CLASS>()
|
|
.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<bool> IsSafetyExist(int id)
|
|
{
|
|
return (await _database.From<T_GOODS_SAFETY>()
|
|
.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<bool> IsSafetyExist(int material, IEnumerable<int> warehouse, int? igrone)
|
|
{
|
|
var schema = _database.From<T_GOODS_SAFETY>()
|
|
.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<int> CreateSafety(Safety safety)
|
|
{
|
|
var timestamp = DateTime.Now;
|
|
var entity = _mapper.Map<T_GOODS_SAFETY>(safety);
|
|
entity.UPDATE_TIME = entity.CREATE_TIME = timestamp;
|
|
var id = Convert.ToInt32(await _database.From<T_GOODS_SAFETY>().Add(entity));
|
|
foreach (var item in safety.Warehouse)
|
|
{
|
|
await _database.From<T_GOODS_SAFETY_LIST>().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<T_GOODS_SAFETY>(safety);
|
|
entity.UPDATE_TIME = timestamp;
|
|
await _database.From<T_GOODS_SAFETY>().Update(entity, nameof(T_GOODS_SAFETY.CREATE_TIME));
|
|
await _database.From<T_GOODS_SAFETY_LIST>().Where(s => s.SAFETY_ID == safety.Id).Delete();
|
|
//foreach (var item in safety.Warehouse)
|
|
//{
|
|
await _database.From<T_GOODS_SAFETY_LIST>().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<T_GOODS_SAFETY>().Where(s => s.SAFETY_ID == id).Delete();
|
|
await _database.From<T_GOODS_SAFETY_LIST>().Where(s => s.SAFETY_ID == id).Delete();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.GetMaterial 方法
|
|
*/
|
|
public async Task<string> GetMaterial(int? goodsid, string code, bool bLike)
|
|
{
|
|
var schema = _database.From<T_GOODS_MAIN>();
|
|
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>(material));
|
|
}
|
|
|
|
/*
|
|
* 实现 Kean.Domain.Material.Repositories.IMaterialRepository.IsPallet 方法
|
|
*/
|
|
public async Task<bool> IsPallet(int goodsid)
|
|
{
|
|
return (await _database.From<T_GOODS_MAIN, T_GOODS_CLASS>()
|
|
.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<string> GetMaterialClass(int goodsid)
|
|
{
|
|
var material = _database.From<T_GOODS_MAIN>()
|
|
.Where(r=>r.GOODS_ID == goodsid)
|
|
.Query(r => r.CLASS_ID);
|
|
|
|
var calss = await _database.From<T_GOODS_CLASS>()
|
|
.Where(r=> material.Contains(r.CLASS_ID))
|
|
.Single();
|
|
|
|
return JsonConvert.SerializeObject(_mapper.Map<Category>(calss));
|
|
}
|
|
}
|
|
}
|