| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { IRationAss, IThirdRation } from '@sc/types';
- import { ceil, floor, round, sortBy } from 'lodash';
- import { roundForObj } from '@sc/util';
- export interface IAssTime {
- times: number;
- ass: IRationAss | IThirdRation;
- }
- export interface IStateList {
- index: number;
- content: string;
- addCode?: string; // 添加工料机的编号,用来标记,如果是子目换算中的单个人材机生成的,改成 调:...
- }
- export const stateSeq = {
- ass: 1,
- proportion: 2,
- replace: 3,
- coe: 4,
- add: 5,
- cusQuantity: 6,
- cusCoe: 7,
- area: 8,
- adjMak: 9,
- };
- // 处理多个辅助定额的情况
- export const handleMulAss = (rationAssList: IRationAss[]) => {
- const assList = [];
- for (const ass of rationAssList) {
- // 处理多个辅助定额的情况
- if (ass.groupList && ass.groupList.length > 0) {
- const newAss = { ...ass };
- const newList = sortBy(ass.groupList, item => parseFloat(item.param || '0')); // 按参数排序
- let pre = 0;
- for (const tem of newList) {
- if (ass.actualValue) {
- if (ass.actualValue > pre && ass.actualValue <= parseFloat(tem.param || '0')) {
- // 落在中间,则用组里的这条定额
- newAss.param = tem.param;
- newAss.paramName = tem.paramName;
- newAss.assistCode = tem.assistCode;
- break;
- }
- pre = parseFloat(tem.param || '0');
- }
- }
- assList.push(newAss);
- } else {
- assList.push(ass);
- }
- }
- return assList;
- };
- export const calcAssTime = (ass: IRationAss) => {
- if (ass.isAdjust === false) return undefined;
- const actualValue = ass.actualValue ? ass.actualValue : 0;
- const stdValue = ass.stdValue ? parseFloat(ass.stdValue) : 0;
- const stepValue = ass.stepValue ? parseFloat(ass.stepValue) : 1;
- let times = (actualValue - stdValue) / stepValue;
- let r = false; // 是否负数
- if (times < 0) {
- r = true;
- times *= -1;
- }
- if (ass.carryBit === '四舍五入') {
- times = round(times, ass.decimal);
- } else if (ass.carryBit === '进一') {
- times = ceil(times, ass.decimal);
- } else if (ass.carryBit === '舍一') {
- times = floor(times, ass.decimal);
- }
- if (r) {
- times *= -1;
- }
- return roundForObj(times, 6);
- };
- export const calcRationAssTimes = (
- rationAssList?: IRationAss[],
- thirdRation?: IThirdRation,
- stateList?: IStateList[]
- ) => {
- const timeList: IAssTime[] = [];
- if (rationAssList) {
- const assList = handleMulAss(rationAssList);
- const temTimes = [];
- const thirdRationCodes = [];
- for (const rationAss of assList) {
- const times = calcAssTime(rationAss);
- if (times) {
- const { thirdRationCode } = rationAss;
- if (thirdRationCode) {
- temTimes.push(times);
- thirdRationCodes.push(thirdRationCode);
- }
- timeList.push({ times, ass: rationAss });
- if (stateList)
- stateList.push({
- index: stateSeq.ass,
- content: `${rationAss.name} ${rationAss.actualValue} : ${rationAss.assistCode}x${times}`,
- });
- }
- }
- if (thirdRation && temTimes.length === 2 && thirdRationCodes[0] === thirdRationCodes[1]) {
- // 说明有第三定额
- const timesT = temTimes[0] * temTimes[1];
- timeList.push({ times: timesT, ass: thirdRation });
- if (stateList) stateList.push({ index: stateSeq.ass, content: `+${thirdRationCodes[0]}x${timesT}` });
- }
- }
- return timeList;
- };
|