Skip to content

Instantly share code, notes, and snippets.

@yicone
Last active May 12, 2018 01:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yicone/21bea21204081bc58f204dfab974041b to your computer and use it in GitHub Desktop.
Save yicone/21bea21204081bc58f204dfab974041b to your computer and use it in GitHub Desktop.
“旧值保留”:勾选项切换为未勾选时,并不删除整项或者变更属性值,而仅是在数据库中将其标记为未勾选
public void ModifyInstsAndChannels(ChannelEditRequest request)
{
var merchantInsts = _dbfd.MerchantInst.Where(mi => mi.MerchantId == request.MerchantId).ToList();
var query = (from miNew in request.MerchantInsts
join mi in merchantInsts
on miNew.InstCode equals mi.InstCode into g
from miOld in g.DefaultIfEmpty()
select new { miNew, miOld });
var list = query.ToList();
foreach (var pair in list)
{
var miNew = pair.miNew;
var miOld = pair.miOld;
if (miOld == null)
{
if (!miNew.Checked) continue;
var mi = miNew;
mi.Guid = Guid.NewGuid().ToString("N");
mi.CreateTime = DateTime.Now;
mi.OptUser = request.OptUser;
mi.MerchantChannels = miNew.MerchantChannels.Where(mc => mc.Checked).Select(mc =>
{
mc.CreateTime = DateTime.Now;
mc.OptUser = request.OptUser;
mc.Guid = Guid.NewGuid().ToString("N");
return mc;
}).ToList();
_dbfd.MerchantInst.Add(mi);
}
else if (miNew.Checked)
{
miOld.InstMerchantId = miNew.InstMerchantId;
miOld.InstKey = miNew.InstKey;
miOld.InstShowName = miNew.InstShowName;
miOld.Checked = miNew.Checked;
miOld.UpdateTime = DateTime.Now;
miOld.OptUser = request.OptUser;
miOld.Guid = Guid.NewGuid().ToString("N");
ModifyMerchantChannels(request.MerchantId, miNew.InstCode, request.OptUser, miNew.MerchantChannels);
}
else if (miOld.Checked && !miNew.Checked)
{
miOld.Checked = false;
miOld.OptUser = request.OptUser;
miOld.UpdateTime = DateTime.Now;
miOld.Guid = Guid.NewGuid().ToString("N");
}
}
_dbfd.SaveChanges();
}
private void ModifyMerchantChannels(string merchantId, string instCode, string optUser, IEnumerable<MerchantChannel> newMerchantChannels)
{
var oldMerchantChannels = _dbfd.MerchantChannel.Where(mc => mc.MerchantId == merchantId && mc.InstCode == instCode).ToList();
var query = (from mcNew in newMerchantChannels
join mcOld in oldMerchantChannels
on mcNew.ChannelId equals mcOld.ChannelId into g
from mcOld in g.DefaultIfEmpty()
select new { mcNew, mcOld });
var list = query.ToList();
foreach (var pair in list)
{
var mcOld = pair.mcOld;
var mcNew = pair.mcNew;
if (mcOld == null)
{
if (!mcNew.Checked) continue;
MerchantChannel mc = mcNew;
mc.CreateTime = DateTime.Now;
mc.OptUser = optUser;
mc.Guid = Guid.NewGuid().ToString("N");
_dbfd.MerchantChannel.Add(mc);
}
else if (mcNew.Checked)
{
mcOld.InstCode = mcNew.InstCode;
mcOld.ApplyingType = mcNew.ApplyingType;
mcOld.Fee = mcNew.Fee;
mcOld.Checked = mcNew.Checked;
mcOld.UpdateTime = DateTime.Now;
mcOld.OptUser = optUser;
mcOld.Guid = Guid.NewGuid().ToString("N");
}
else if (mcOld.Checked && !mcNew.Checked)
{
mcOld.Checked = false;
mcOld.UpdateTime = DateTime.Now;
mcOld.OptUser = optUser;
mcOld.Guid = Guid.NewGuid().ToString("N");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment