count.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /**
  2. * 处理扫描的二维码链接
  3. * @param {string} qrUrl - 扫描到的二维码链接
  4. * @returns {Object} 解析后的二维码信息
  5. */
  6. function processQRCode(qrUrl) {
  7. // 解析URL参数
  8. const parseUrlParams = (url) => {
  9. try {
  10. const query = url.split('?')[1];
  11. if (!query) return {};
  12. return query.split('&').reduce((params, param) => {
  13. const [key, value] = param.split('=');
  14. if (key && value !== undefined) {
  15. params[key] = decodeURIComponent(value);
  16. }
  17. return params;
  18. }, {});
  19. } catch (e) {
  20. console.error('解析二维码链接失败:', e);
  21. return {};
  22. }
  23. };
  24. // 更新扫码次数(加1)
  25. const updateScanCount = (params) => {
  26. if (params.scanCount !== undefined) {
  27. params.scanCount = parseInt(params.scanCount || '0', 10) + 1;
  28. }
  29. return params;
  30. };
  31. // 确定来源类型和ID
  32. const determineSource = (params) => {
  33. if (params.employeeId) {
  34. return { type: 'employee', id: params.employeeId };
  35. } else if (params.ownerId) {
  36. return { type: 'owner', id: params.ownerId };
  37. } else if (params.partnerId) {
  38. return { type: 'partner', id: params.partnerId };
  39. }
  40. return { type: 'unknown', id: null };
  41. };
  42. // 主处理逻辑
  43. const params = parseUrlParams(qrUrl);
  44. if (!params.storeId) {
  45. throw new Error('无效的二维码:缺少店铺ID');
  46. }
  47. // 更新扫码次数
  48. const updatedParams = updateScanCount(params);
  49. // 确定来源
  50. const source = determineSource(updatedParams);
  51. return {
  52. storeId: updatedParams.storeId,
  53. sourceType: source.type,
  54. sourceId: source.id,
  55. scanCount: updatedParams.scanCount || 1,
  56. rawParams: updatedParams
  57. };
  58. }
  59. //加法
  60. function addNum(arg1, arg2) {
  61. arg1 = arg1 ? arg1 : 0
  62. arg2 = arg2 ? arg2 : 0
  63. let r1, r2, m, c;
  64. try {
  65. r1 = arg1.toString().split(".")[1].length;
  66. } catch (e) {
  67. r1 = 0;
  68. }
  69. try {
  70. r2 = arg2.toString().split(".")[1].length;
  71. } catch (e) {
  72. r2 = 0;
  73. }
  74. c = Math.abs(r1 - r2);
  75. m = Math.pow(10, Math.max(r1, r2));
  76. if (c > 0) {
  77. let cm = Math.pow(10, c);
  78. if (r1 > r2) {
  79. arg1 = Number(arg1.toString().replace(".", ""));
  80. arg2 = Number(arg2.toString().replace(".", "")) * cm;
  81. } else {
  82. arg1 = Number(arg1.toString().replace(".", "")) * cm;
  83. arg2 = Number(arg2.toString().replace(".", ""));
  84. }
  85. } else {
  86. arg1 = Number(arg1.toString().replace(".", ""));
  87. arg2 = Number(arg2.toString().replace(".", ""));
  88. }
  89. return (arg1 + arg2) / m;
  90. }
  91. //减法
  92. function subtraction(num1, num2) {
  93. var r1, r2, m, floatNum;
  94. try {
  95. r1 = num1.toString().split(".")[1].length;
  96. } catch (e) {
  97. r1 = 0;
  98. }
  99. try {
  100. r2 = num2.toString().split(".")[1].length;
  101. } catch (e) {
  102. r2 = 0;
  103. }
  104. m = Math.pow(10, Math.max(r1, r2));
  105. return (num1 * m - num2 * m) / m;
  106. }
  107. //相乘
  108. function multiply(arg1, arg2) {
  109. arg1 = arg1 ? arg1 : 0
  110. arg2 = arg2 ? arg2 : 0
  111. let r1, r2, m, c;
  112. try {
  113. r1 = arg1.toString().split(".")[1].length;
  114. } catch (e) {
  115. r1 = 0;
  116. }
  117. try {
  118. r2 = arg2.toString().split(".")[1].length;
  119. } catch (e) {
  120. r2 = 0;
  121. }
  122. c = Math.abs(r1 - r2);
  123. m = Math.pow(10, Math.max(r1, r2) * 2);
  124. if (c > 0) {
  125. let cm = Math.pow(10, c);
  126. if (r1 > r2) {
  127. arg1 = Number(arg1.toString().replace(".", ""));
  128. arg2 = Number(arg2.toString().replace(".", "")) * cm;
  129. } else {
  130. arg1 = Number(arg1.toString().replace(".", "")) * cm;
  131. arg2 = Number(arg2.toString().replace(".", ""));
  132. }
  133. } else {
  134. arg1 = Number(arg1.toString().replace(".", ""));
  135. arg2 = Number(arg2.toString().replace(".", ""));
  136. }
  137. return (arg1 * arg2) / m;
  138. }
  139. module.exports = {
  140. processQRCode,
  141. addNum,
  142. subtraction,
  143. multiply
  144. };