1. /// <summary>
  2. /// 生成SKU价格表
  3. /// </summary>
  4. /// <param name="model"></param>
  5. /// <returns></returns>
  6. public Result<IList<SkuGroup>> GeneratePriceList(IList<SkuGroup> model)
  7. {
  8. try {
  9. var result = new List<SkuGroup>();
  10. var data = new SkuGroup();
  11. data.Items = new List<SkuItem>();
  12. //过滤掉无效的SkuGroup
  13. model = model.Where(x => x.Items != null && x.Items.Count > ).ToList();
  14. Descartes(model, , result, data);
  15. return new Result<IList<SkuGroup>>(true, "操作成功!", result);
  16. //return result;
  17. }
  18. catch (Exception ex)
  19. {
  20. //LogException(ex);
  21. return new Result<IList<SkuGroup>>(false, "操作失败!");
  22. }
  23.  
  24. }
  25. /// <summary>
  26. /// 笛卡尔积
  27. /// </summary>
  28. /// <param name="list"></param>
  29. /// <param name="count"></param>
  30. /// <param name="result"></param>
  31. /// <param name="data"></param>
  32. /// <returns></returns>
  33. public IList<SkuItem> Descartes(IList<SkuGroup> list,int count, IList<SkuGroup> result, SkuGroup data)
  34. {
  35. var temp = new List<SkuItem>();
  36. //获取当前SkuGroup
  37. var astr = new SkuGroup();
  38. astr = list[count];
  39. var group = new SkuGroup();
  40. group.Id = astr.Id;
  41. group.Name = astr.Name;
  42. group.Selected = astr.Selected;
  43. group.ItemType = astr.ItemType;
  44. //循环当前SkuGroup的Items
  45. foreach (var item in astr.Items)
  46. {
  47. item.Group = group;
  48. if (count + < list.Count)
  49. {
  50. //中转,以达成传输本层及上层的item
  51. var transfer = new SkuGroup();
  52. transfer.Items = new List<SkuItem>();
  53. foreach (var i in data.Items)
  54. {
  55. transfer.Items.Add(i);
  56. }
  57. transfer.Items.Add(item);
  58. Descartes(list, count + , result, transfer);
  59. }
  60. else
  61. {
  62. var sku = new SkuGroup();
  63. sku.Items = new List<SkuItem>();
  64. //var items = new List<SkuItem>();
  65. //存入上层的item
  66. foreach (var i in data.Items)
  67. {
  68. sku.Items.Add(i);
  69. }
  70. //存入本次item
  71. sku.Items.Add(item);
  72. result.Add(sku);
  73. }
  74. }
  75.  
  76. return temp;
  77. }
  1. public class SkuGroup
  2. {
  3. public long Id { get; set; }
  4. public string Name { get; set; }
  5.  
  6. public ICollection<SkuItem> Items { get; set; }
  7.  
  8. public bool Selected { get; set; }
  9.  
  10. /// <summary>
  11. /// SkuItem数据表类名称
  12. /// </summary>
  13. /// <remarks>例:平台销售属性值为PlatformInfo,平台类目销售属性为PlatformIndustryInfo,版本销售属性为SkuItem</remarks>
  14. public string ItemType { get; set; }
  15.  
  16. public Guid? CategoryId { get; set; }
  17. }
  1. public class SkuItem
  2. {
  3. public long Id { get; set; }
  4.  
  5. public long GroupId { get; set; }
  6.  
  7. public string Name { get; set; }
  8.  
  9. /// <summary>
  10. /// 选中
  11. /// </summary>
  12. public bool Selected { get; set; }
  13.  
  14. public virtual SkuGroup Group { get; set; }
  15. }

使用笛卡尔积生成sku的更多相关文章

  1. 结合element-ui表格自动生成sku规格列表

    最近在写一个根据输入的规格,属性值动态生成sku表格,实现的效果大致如图,这是在vue项目里,结合element-UI表格写的,写好了就整理了一下,把代码贴上来,方便以后使用,不过代码里还是有一些重复 ...

  2. 动态生成sku组合输入列表

    <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...

  3. 一个商品SKU是怎么生成的

    首先说一说什么是SKU.......自己百度去... 类似京东上面,未来人类S5这个台笔记本(没错,我刚入手了) 都是S5这个型号,但是因为CPU,显卡,内存,硬盘等不同,价格也不一样.CPU,显卡, ...

  4. 商品的spu、sku及其之间的关系

    今日来总结一下,电商系统中涉及到商品时必然会遇到的几个概念,SPU.SKU.单品等.彻底搞懂和明白了这几个概念对我们设计商品表是十分必要的前提条件. SPU:标准化产品单元 SPU = Standar ...

  5. 【知识点】SPU&SKU

    SPU:标准化产品单元 SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性. ...

  6. B2C电子商务系统研发——商品SKU分析和设计(二)

    转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过 ...

  7. B2C电子商务系统研发——商品SKU分析和设计(一)

    一.SKU及相关概念定义 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念. # 什么是SKU: SKU=Stock Keeping Unit(库存量单位) 同一型号的商品,或者说是同一 ...

  8. 你真的会玩SQL吗?之逻辑查询处理阶段

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. 关于join时显示no join predicate的那点事

    我们偶尔,非常偶尔的情况下会在一个查询计划中看到这样的警告: 大红叉,好吓人啊! 把鼠标放上去一看显示这样的信息 No join predicate 直译过来就是:没有连接谓词 在真实的生产环境下我们 ...

随机推荐

  1. pat 1050 String Subtraction(20 分)

    1050 String Subtraction(20 分) Given two strings S​1​​ and S​2​​, S=S​1​​−S​2​​ is defined to be the ...

  2. suseoj 1209: 独立任务最优调度问题(动态规划)

    1209: 独立任务最优调度问题 时间限制: 1 Sec  内存限制: 128 MB提交: 3  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 用2台处理机A和B处理 ...

  3. Docker从入门到实践(1)

    一.Docker简介 1.1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多 ...

  4. C语言|博客作业08

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9976 我在这个课程的 ...

  5. Linux系统中文件行末尾出现^M的原因及解决办法

    不同系统,有不同的换行符号: 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r') 在linux下的文本文件的每一行结尾,只有一个回车('\n'); 在Mac下的文本文 ...

  6. python容器类型字典的操作

    字典(dict):由大括号进行描述一组键值对,其键值对之间使用冒号隔开,键值对与键值对之间使用逗号隔开: 注意:字典的key可以为数字,但是不可以重复,因为key是唯一标识符: 1.声明一个字典:语法 ...

  7. IDM下载工具使用

    平时网上找资料,找视频,难免都需要下载到本地,奈何下载速度都一般,最近发现一款多线程下载工具,堪称无敌!!

  8. ArrayList实现原理(JDK1.8)

    ArrayList实现原理(JDK1.8) public class ArrayList<E> extends AbstractList<E> implements List& ...

  9. 5. 彤哥说netty系列之Java NIO核心组件之Channel

    你好,我是彤哥,本篇是netty系列的第五篇. 简介 上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一--Channel. 思维转变 首先, ...

  10. CCNA 之 十三 广域网概述

    广域网概述 为什么需要WAN ? 分区或分支机构的员工需要与总部通信并共享数据: 组织经常需要与其他组织远距离共享信息: 经常出差的员工需要访问公司网络信息: 什么事广域网链路? 用于连接LAN的.跨 ...