MoneyProduceServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. package vip.xiaonuo.money.service.impl;
  2. import cn.hutool.core.date.DateTime;
  3. import cn.hutool.core.date.DateUtil;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import org.checkerframework.checker.units.qual.A;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import vip.xiaonuo.common.pojo.CommonResult;
  12. import vip.xiaonuo.money.entity.MoneyProduce;
  13. import vip.xiaonuo.money.entity.MoneyProduce0422;
  14. import vip.xiaonuo.money.entity.MoneyProduceIncome;
  15. import vip.xiaonuo.money.entity.vo.MoneyProduce0422Vo;
  16. import vip.xiaonuo.money.entity.vo.MoneyProduceScreenVo;
  17. import vip.xiaonuo.money.mapper.MoneyProduce0422Mapper;
  18. import vip.xiaonuo.money.mapper.MoneyProduceIncomeMapper;
  19. import vip.xiaonuo.money.mapper.MoneyProduceMapper;
  20. import vip.xiaonuo.money.param.*;
  21. import vip.xiaonuo.money.service.IMoneyProduceService;
  22. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  23. import org.springframework.stereotype.Service;
  24. import java.math.BigDecimal;
  25. import java.math.RoundingMode;
  26. import java.text.DecimalFormat;
  27. import java.text.SimpleDateFormat;
  28. import java.util.*;
  29. /**
  30. * <p>
  31. * 财务产品销售收入 服务实现类
  32. * </p>
  33. *
  34. * @author author
  35. * @since 2024-11-19
  36. */
  37. @Service
  38. public class MoneyProduceServiceImpl extends ServiceImpl<MoneyProduceMapper, MoneyProduce> implements IMoneyProduceService {
  39. @Autowired
  40. private MoneyProduceMapper produceMapper;
  41. @Autowired
  42. private MoneyProduce0422Mapper produce0422Mapper;
  43. @Override
  44. public List<MoneyProduce0422Vo> analysisIncome(MoneyAnalysisParam analysisParam) {
  45. String orgId = analysisParam.getOrgId();
  46. Integer type = analysisParam.getType();//是否包含关联交易
  47. String time = analysisParam.getTime();//2024-10
  48. QueryWrapper<MoneyProduce0422> produce0422QueryWrapper = new QueryWrapper<>();
  49. produce0422QueryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  50. if ("".equals(time) || null == time) {
  51. DateTime dateTime = DateUtil.beginOfYear(new Date());
  52. produce0422QueryWrapper.ge("create_time", dateTime);
  53. } else {
  54. // String year = time.substring(0, 4);
  55. produce0422QueryWrapper.between("create_time", time + "-01 00:00:00", time + "-31 23:59:59");
  56. }
  57. if (1 == type) {
  58. produce0422QueryWrapper.in("is_write",0, 1);
  59. } else {
  60. produce0422QueryWrapper.eq("is_write", 0);
  61. }
  62. produce0422QueryWrapper.groupBy("g.fname");
  63. List<MoneyProduce0422Vo> moneyProduce0422Vos = produce0422Mapper.analysisIncome(produce0422QueryWrapper);
  64. List<MoneyProduce0422Vo> list = new ArrayList<>();
  65. int i = 0;
  66. for (MoneyProduce0422Vo moneyProduce0422Vo : moneyProduce0422Vos) {
  67. if (i < 9){
  68. list.add(moneyProduce0422Vo);
  69. i++;
  70. }else if (i == 9){
  71. MoneyProduce0422Vo moneyProduce0422Vo1 = new MoneyProduce0422Vo();
  72. moneyProduce0422Vo1.setCreateTime(moneyProduce0422Vo.getCreateTime());
  73. moneyProduce0422Vo1.setMaterialAmount(moneyProduce0422Vo.getMaterialAmount());
  74. moneyProduce0422Vo1.setMaterialName("其它");
  75. list.add(moneyProduce0422Vo1);
  76. i++;
  77. }else {
  78. MoneyProduce0422Vo moneyProduce0422Vo2 = list.get(9);
  79. moneyProduce0422Vo2.setMaterialAmount( getSum(moneyProduce0422Vo2.getMaterialAmount() , moneyProduce0422Vo.getMaterialAmount()));
  80. list.set(9,moneyProduce0422Vo2);
  81. }
  82. }
  83. return list;
  84. // double v1 = 0.0000;
  85. // double v2 = 0.0000;
  86. // double v3 = 0.0000;
  87. // double v4 = 0.0000;
  88. // double v5 = 0.0000;
  89. // double v6 = 0.0000;
  90. // if (produce0422s.size() != 0) {
  91. // for (MoneyProduce0422 produce0422 : produce0422s) {
  92. // if (produce0422.getMaterialType() == 0) {
  93. // if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
  94. // v1 = v1;
  95. // } else {
  96. // v1 = v1 + Double.parseDouble(produce0422.getMaterialAmount());
  97. // }
  98. // } else if (produce0422.getMaterialType() == 1) {
  99. // if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
  100. // v2 = v2;
  101. // } else {
  102. // v2 = v2 + Double.parseDouble(produce0422.getMaterialAmount());
  103. // }
  104. //
  105. // }else if (produce0422.getMaterialType() == 2) {
  106. // if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
  107. // v3 = v3;
  108. // } else {
  109. // v3 = v3 + Double.parseDouble(produce0422.getMaterialAmount());
  110. // }
  111. //
  112. // }else if (produce0422.getMaterialType() == 3) {
  113. // if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
  114. // v4 = v4;
  115. // } else {
  116. // v4 = v4 + Double.parseDouble(produce0422.getMaterialAmount());
  117. // }
  118. //
  119. // }else if (produce0422.getMaterialType() == 4) {
  120. // if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
  121. // v5 = v5;
  122. // } else {
  123. // v5 = v5 + Double.parseDouble(produce0422.getMaterialAmount());
  124. // }
  125. //
  126. // }else if (produce0422.getMaterialType() == 5) {
  127. // if ("".equals(produce0422.getMaterialAmount()) || null == produce0422.getMaterialAmount()) {
  128. // v6 = v6;
  129. // } else {
  130. // v6 = v6 + Double.parseDouble(produce0422.getMaterialAmount());
  131. // }
  132. //
  133. // }
  134. // }
  135. //
  136. // }
  137. // MoneyProduce produce = new MoneyProduce();
  138. // BigDecimal math = new BigDecimal("10000");
  139. //
  140. // BigDecimal bd = new BigDecimal(v1);
  141. // bd = bd.divide(math, 2, RoundingMode.HALF_UP);
  142. // BigDecimal bd1 = new BigDecimal(v2);
  143. // bd1 = bd1.divide(math, 2, RoundingMode.HALF_UP);
  144. // BigDecimal bd2 = new BigDecimal(v3);
  145. // bd2 = bd2.divide(math, 2, RoundingMode.HALF_UP);
  146. // BigDecimal bd3 = new BigDecimal(v4);
  147. // bd3 = bd3.divide(math, 2, RoundingMode.HALF_UP);
  148. // BigDecimal bd4 = new BigDecimal(v5);
  149. // bd4 = bd4.divide(math, 2, RoundingMode.HALF_UP);
  150. // BigDecimal bd5 = new BigDecimal(v6);
  151. // bd5 = bd5.divide(math, 2, RoundingMode.HALF_UP);
  152. //
  153. //
  154. // produce.setNfCholesterol(bd.toString());
  155. // produce.setBreedCholesterol(bd1.toString());
  156. // produce.setSheepAlcohol(bd2.toString());
  157. // produce.setSheepSour(bd3.toString());
  158. // produce.setSheepSourBing(bd4.toString());
  159. // produce.setOther(bd5.toString());
  160. // return produce;
  161. }
  162. private String getSum(String materialAmount, String parseDouble) {
  163. return String.format("%.2f",Double.parseDouble(materialAmount),+Double.parseDouble(parseDouble));
  164. }
  165. @Override
  166. public JSONArray produceAnalysis(MoneyProduceParam moneyProduceParam) {
  167. String orgId = moneyProduceParam.getOrgId();
  168. Integer type = moneyProduceParam.getType();//是否包含关联交易
  169. Integer timeType = moneyProduceParam.getTimeType();
  170. Integer number = moneyProduceParam.getNumber();
  171. QueryWrapper<MoneyProduce0422> produce0422QueryWrapper = new QueryWrapper<>();
  172. produce0422QueryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  173. if (0 == timeType) {
  174. Calendar calendar = Calendar.getInstance();
  175. if (null == number) {
  176. calendar.add(Calendar.YEAR, -2);
  177. } else {
  178. calendar.add(Calendar.YEAR, -number+1);
  179. }
  180. produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
  181. produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y'),material_type").orderByAsc("create_time");
  182. } else {
  183. Calendar calendar = Calendar.getInstance();
  184. if (null == number) {
  185. calendar.add(Calendar.MONTH, -12);
  186. } else {
  187. calendar.add(Calendar.MONTH, -number+1);
  188. }
  189. produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
  190. produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m'),material_type").orderByAsc("create_time");
  191. }
  192. if (1 == type) {
  193. produce0422QueryWrapper.in("is_write",0, 1);
  194. } else {
  195. produce0422QueryWrapper.eq("is_write", 0);
  196. }
  197. produce0422QueryWrapper.select("IFNUll(sum(material_amount),'0') materialAmount,material_type materialType,create_time createTime");
  198. List<MoneyProduce0422> list = produce0422Mapper.selectList(produce0422QueryWrapper);
  199. JSONArray jsonArray = new JSONArray();
  200. BigDecimal math = new BigDecimal("10000");
  201. for (MoneyProduce0422 produce : list) {
  202. if (moneyProduceParam.getPType().equals(produce.getMaterialType())) {
  203. JSONObject jsonObject = new JSONObject();
  204. BigDecimal bg=new BigDecimal(produce.getMaterialAmount());
  205. bg = bg.divide(math, 2, RoundingMode.HALF_UP);
  206. jsonObject.put("value", bg.toString());
  207. jsonObject.put("createTime", produce.getCreateTime());
  208. jsonArray.add(jsonObject);
  209. }
  210. }
  211. return jsonArray;
  212. }
  213. @Override
  214. public JSONObject getInOut(MoneyInOutParam inOutParam) {
  215. String orgId = inOutParam.getOrgId();
  216. String time = inOutParam.getTime();
  217. QueryWrapper<MoneyProduce> queryWrapper = new QueryWrapper<>();
  218. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  219. queryWrapper.select(" IFNULL(sum(in_money),'0') inMoney,IFNULL(sum(out_money),'0') outMoney");
  220. if ("".equals(time) || null == time) {
  221. DateTime dateTime = DateUtil.beginOfYear(new Date());
  222. queryWrapper.ge("create_time", dateTime);
  223. } else {
  224. // String year = time.substring(0, 4);
  225. queryWrapper.between("create_time", time + "-01 00:00:00", time + "-31 23:59:59");
  226. }
  227. MoneyProduce moneyProduce = produceMapper.selectOne(queryWrapper);
  228. JSONObject jsonObject = new JSONObject();
  229. BigDecimal math = new BigDecimal("10000");
  230. BigDecimal bg=new BigDecimal(moneyProduce.getInMoney());
  231. bg = bg.divide(math, 2, RoundingMode.HALF_UP);
  232. BigDecimal bg1=new BigDecimal(moneyProduce.getOutMoney());
  233. bg1 = bg1.divide(math, 2, RoundingMode.HALF_UP);
  234. jsonObject.put("in", bg.toString());
  235. jsonObject.put("out", bg1.toString());
  236. return jsonObject;
  237. }
  238. @Override
  239. public JSONArray produceIncomeAnalysis(MoneyProduceIncomeParam moneyProduceParam) {
  240. String orgId = moneyProduceParam.getOrgId();
  241. Integer timeType = moneyProduceParam.getTimeType();
  242. Integer number = moneyProduceParam.getNumber();
  243. QueryWrapper<MoneyProduce0422> produce0422QueryWrapper = new QueryWrapper<>();
  244. produce0422QueryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  245. produce0422QueryWrapper.select("IFNUll(sum(material_qty),'0') materialQty,material_type materialType,create_time createTime");
  246. if (0 == timeType) {
  247. Calendar calendar = Calendar.getInstance();
  248. if (null == number) {
  249. calendar.add(Calendar.YEAR, -2);
  250. } else {
  251. calendar.add(Calendar.YEAR, -number+1);
  252. }
  253. produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
  254. produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y'),material_type").orderByAsc("create_time");
  255. } else {
  256. Calendar calendar = Calendar.getInstance();
  257. if (null == number) {
  258. calendar.add(Calendar.MONTH, -12);
  259. } else {
  260. calendar.add(Calendar.MONTH, -number+1);
  261. }
  262. produce0422QueryWrapper.between("create_time", calendar.getTime(), new Date());
  263. produce0422QueryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m'),material_type").orderByAsc("create_time");
  264. }
  265. List<MoneyProduce0422> list = produce0422Mapper.selectList(produce0422QueryWrapper);
  266. JSONArray jsonArray = new JSONArray();
  267. BigDecimal math = new BigDecimal("10000");
  268. for (MoneyProduce0422 produce : list) {
  269. if (moneyProduceParam.getPType().equals(produce.getMaterialType())) {
  270. JSONObject jsonObject = new JSONObject();
  271. jsonObject.put("value", produce.getMaterialQty());
  272. jsonObject.put("createTime", produce.getCreateTime());
  273. jsonArray.add(jsonObject);
  274. }
  275. }
  276. return jsonArray;
  277. }
  278. @Override
  279. public List<MoneyProduceScreenVo> getList(MoneyInOutParam inOutParam) {
  280. String orgId = inOutParam.getOrgId();
  281. QueryWrapper<MoneyProduce> queryWrapper = new QueryWrapper<>();
  282. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  283. // queryWrapper.ge("create_time", DateUtil.beginOfYear(new Date()));
  284. queryWrapper.select(" IFNULL(sum(in_money),'0') inMoney,IFNULL(sum(out_money),'0') outMoney,create_time createTime");
  285. queryWrapper.orderByAsc("create_time");
  286. queryWrapper.groupBy("DATE_FORMAT(create_time,'%Y-%m')");
  287. List<MoneyProduce> produces = produceMapper.selectList(queryWrapper);
  288. List<MoneyProduceScreenVo> list = new ArrayList<>();
  289. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  290. if (produces.size() != 0) {
  291. for (MoneyProduce produce : produces) {
  292. BigDecimal math = new BigDecimal("10000");
  293. BigDecimal bg=new BigDecimal(produce.getInMoney());
  294. BigDecimal bg1=new BigDecimal(produce.getOutMoney());
  295. MoneyProduceScreenVo vo = new MoneyProduceScreenVo();
  296. vo.setCreateTime(sdf.format(produce.getCreateTime()));
  297. vo.setInMoney(bg.divide(math, 2, RoundingMode.HALF_UP).toString());
  298. vo.setOutMoney(bg1.divide(math, 2, RoundingMode.HALF_UP).toString());
  299. list.add(vo);
  300. }
  301. }
  302. return list;
  303. }
  304. @Override
  305. public CommonResult add(MoneyProduceAddParam addParam) {
  306. String materialName = addParam.getMaterialName();
  307. String orgId = addParam.getOrgId();
  308. if ("".equals(orgId) || null == orgId) {
  309. return CommonResult.error("公司不能为空");
  310. }
  311. Integer materType = getMaterType(materialName);
  312. MoneyProduce0422 produce0422 = new MoneyProduce0422();
  313. produce0422.setCreateTime(DateUtil.parse(addParam.getCreateTime()));
  314. produce0422.setMaterialName(materialName);
  315. produce0422.setMaterialType(materType);
  316. // produce0422.setMaterialAmount("-"+addParam.getMaterialAmount());
  317. produce0422.setMaterialAmount(String.format("%.2f", Double.parseDouble( addParam.getMaterialAmount()) * -1.0));
  318. produce0422.setWriteMoney(addParam.getMaterialAmount());
  319. produce0422.setOrgName(addParam.getOrgName());
  320. produce0422.setCustomerName(addParam.getCustomerName());
  321. produce0422.setIsWrite(1);
  322. produce0422.setOrgId(orgId);
  323. produce0422Mapper.insert(produce0422);
  324. return CommonResult.ok();
  325. }
  326. @Override
  327. public CommonResult edit(MoneyProduceEditParam editParam) {
  328. String materialName = editParam.getMaterialName();
  329. Integer materType = getMaterType(materialName);
  330. MoneyProduce0422 produce0422 = produce0422Mapper.selectById(editParam.getId());
  331. produce0422.setCreateTime(DateUtil.parse(editParam.getCreateTime()));
  332. produce0422.setMaterialName(materialName);
  333. produce0422.setMaterialType(materType);
  334. // produce0422.setMaterialAmount("-"+editParam.getMaterialAmount());
  335. produce0422.setMaterialAmount(String.format("%.2f", Double.parseDouble( editParam.getMaterialAmount()) * -1.0));
  336. produce0422.setWriteMoney(editParam.getMaterialAmount());
  337. produce0422.setOrgName(editParam.getOrgName());
  338. produce0422.setCustomerName(editParam.getCustomerName());
  339. produce0422.setIsWrite(1);
  340. produce0422.setOrgId(editParam.getOrgId());
  341. produce0422Mapper.updateById(produce0422);
  342. return CommonResult.ok();
  343. }
  344. @Override
  345. public CommonResult delete(Map<String, String> paramsMap) {
  346. String id = paramsMap.get("id");
  347. produce0422Mapper.deleteById(id);
  348. return CommonResult.ok();
  349. }
  350. @Override
  351. public Page<MoneyProduce0422> page(MoneyInOutPageParam inOutPageParam) {
  352. String orgId = inOutPageParam.getOrgId();
  353. Integer pageNum = inOutPageParam.getPageNum();
  354. Integer pageSize = inOutPageParam.getPageSize();
  355. QueryWrapper<MoneyProduce0422> queryWrapper = new QueryWrapper<>();
  356. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId).isNotNull("write_money");
  357. Page<MoneyProduce0422> page = new Page(pageNum, pageSize);
  358. return produce0422Mapper.selectPage(page, queryWrapper);
  359. }
  360. private Integer getMaterType(String fname) {
  361. if ("NF级胆固醇".equals(fname)){
  362. return 0;
  363. }
  364. if ("羊毛酸异丙酯".equals(fname)){
  365. return 4;
  366. }
  367. if (fname.contains( "饲料级胆固醇")){
  368. return 1;
  369. }
  370. if (fname.contains( "羊毛醇")){
  371. return 2;
  372. }
  373. if (fname.contains( "羊毛酸")){
  374. return 3;
  375. }
  376. return 5;
  377. }
  378. }