/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.stockrecord.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import lombok.AllArgsConstructor; import javax.validation.Valid; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.modules.soldr.entity.Soldr; import org.springblade.modules.soldr.service.ISoldrService; import org.springblade.modules.soldr.vo.SoldrVO; import org.springblade.modules.soldrecord.entity.Soldrecord; import org.springblade.modules.soldrecord.service.ISoldrecordService; import org.springblade.modules.stock.entity.Stock; import org.springblade.modules.stock.service.IStockService; import org.springblade.modules.system.entity.DictBiz; import org.springblade.modules.system.service.IDictBizService; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestParam; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.modules.stockrecord.entity.Stockrecord; import org.springblade.modules.stockrecord.vo.StockrecordVO; import org.springblade.modules.stockrecord.service.IStockrecordService; import org.springblade.core.boot.ctrl.BladeController; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 出入库记录 控制器 * * @author BladeX * @since 2022-05-12 */ @RestController @AllArgsConstructor @RequestMapping("/stockrecord/stockrecord") @Api(value = "出入库记录", tags = "出入库记录接口") public class StockrecordController extends BladeController { private final IStockrecordService stockrecordService; private final IStockService stockService; private final IDictBizService dictService; private final ISoldrecordService soldrecordService; private final ISoldrService soldrService; /** * 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入stockrecord") public R detail(Stockrecord stockrecord) { Stockrecord detail = stockrecordService.getOne(Condition.getQueryWrapper(stockrecord)); return R.data(detail); } /** * 分页 出入库记录 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入stockrecord") public R> list(Stockrecord stockrecord, Query query) { IPage pages = stockrecordService.page(Condition.getPage(query), Condition.getQueryWrapper(stockrecord)); return R.data(pages); } /** * 自定义分页 出入库记录 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "分页", notes = "传入stockrecord") public R> page(StockrecordVO stockrecord, Query query) { IPage pages = stockrecordService.seletStockRecordList(Condition.getPage(query), stockrecord); for (int i = 0; i < pages.getRecords().size(); i++) { String specs = pages.getRecords().get(i).getSpecs1(); String dic1 = pages.getRecords().get(i).getDic1(); String dic2 = pages.getRecords().get(i).getDic2(); String s = specs + dic1 + "/" + dic2; //出库 if (pages.getRecords().get(i).getStockType1() == 0) { String count = "-" + pages.getRecords().get(i).getAmount1() + dic2; pages.getRecords().get(i).setCount(count); } else { String count = "+" + pages.getRecords().get(i).getAmount1() + dic2; pages.getRecords().get(i).setCount(count); } pages.getRecords().get(i).setSpn(s); //获取农资出入库类型 0:出库 1:入库 Integer stockType1 = pages.getRecords().get(i).getStockType1(); String type1 = pages.getRecords().get(i).getType1(); if (stockType1 == 0) { List tree = dictService.getList("stockPurchase1"); for (int j = 0; j < tree.size(); j++) { if (tree.get(j).getDictKey().equals(type1)) { pages.getRecords().get(i).setType1(tree.get(j).getDictValue()); } } } else { List tree = dictService.getList("stockPurchase"); for (int j = 0; j < tree.size(); j++) { if (tree.get(j).getDictKey().equals(type1)) { pages.getRecords().get(i).setType1(tree.get(j).getDictValue()); } } } } return R.data(pages); } /** * 新增 出入库记录 */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入stockrecord") public R save(@Valid @RequestBody StockrecordVO stockrecord) { Integer stockType1 = stockrecord.getStockType1(); //出库 if (stockType1 == 0) { //库存量 Integer num = stockrecord.getNum(); //出库量 Integer amount1 = stockrecord.getAmount1(); //规格 String specs1 = stockrecord.getSpecs1(); int spe = Integer.parseInt(specs1); //当前总量 int i = num - amount1; Stock stock = new Stock(); stock.setId(stockrecord.getSid()); stock.setAmount(i); //统计公斤 Integer specsValue1 = stockrecord.getSpecsVal1(); double v = 0; //克 if (specsValue1 == 0) { v = amount1* spe * 0.001; } //斤 if (specsValue1 == 1) { v = amount1* spe * 0.5; } //公斤 if (specsValue1 == 2) { v = amount1* spe; } //吨 if (specsValue1 == 3) { v = amount1 * spe * 1000; } //毫升 if (specsValue1 == 4) { //毫升换成升 double s = amount1* spe * 0.001; //升换成公斤 v = s; } //升 if (specsValue1 == 5) { v = amount1* spe; } stockrecord.setCensus(v); if (i == 0) { stock.setState("1"); stockService.UpdaeAmountc(stock); //同时删除所有农资记录 soldrecordService.delc(stockrecord.getStockId1()); soldrService.del(stockrecord.getSid()); } else { stock.setState("0"); stockService.UpdaeAmountc(stock); } //已出库农资记录 Soldrecord soldrecord = new Soldrecord(); soldrecord.setStockId1(stockrecord.getStockId1()); soldrecord.setAmount1(amount1); soldrecord.setSpecs1(stockrecord.getSpecs1()); soldrecord.setSpecsVal1(stockrecord.getSpecsVal1()); soldrecord.setSpecsVal2(stockrecord.getSpecsVal2()); soldrecord.setType(stockrecord.getType1()); soldrecord.setSid(stockrecord.getSid()); String type1 = stockrecord.getType1(); if (type1.equals("0")) { //已出库农资数量记录 Soldr soldr = new Soldr(); soldr.setSid(stockrecord.getSid()); soldr.setStockId1(stockrecord.getStockId1()); soldr.setAmount1(amount1); soldr.setSpecs1(stockrecord.getSpecs1()); soldr.setSpecsVal1(stockrecord.getSpecsVal1()); soldr.setSpecsVal2(stockrecord.getSpecsVal2()); soldr.setType(stockrecord.getType1()); soldr.setCensus(v); //已出库农资数量 List> maps = soldrService.selectCz(stockrecord.getSid()); if (maps.size()!=0) { String a = maps.get(0).get("amount1").toString(); Integer amount11=Integer.parseInt(a); String amount12 = maps.get(0).get("amount1").toString(); Double census = Double.parseDouble(amount12); String sid = maps.get(0).get("sid").toString(); Long si=Long.valueOf(sid); soldrecordService.updateSold(amount11 + amount1, si,census+v); } else { soldrService.save(soldr); } //已出库农资 soldrecordService.save(soldrecord); //填充stock_record表中的srId stockrecord.setSrId(soldrecord.getId()); stockrecordService.updateById(stockrecord); soldrService.cancelDel(soldr.getId()); } } //入库 else { //库存量 Integer num = stockrecord.getNum(); //入库量 Integer amount1 = stockrecord.getAmount1(); String specs1 = stockrecord.getSpecs1(); int spe=Integer.parseInt(specs1); //当前总量 int i = num + amount1; Stock stock = new Stock(); stock.setId(stockrecord.getSid()); stock.setAmount(i); stock.setState("0"); stockService.UpdaeAmountc(stock); //统计公斤 Integer specsValue1 = stockrecord.getSpecsVal1(); double v = 0; //克 if (specsValue1 == 0) { v = amount1*spe * 0.001; } //斤 if (specsValue1 == 1) { v = amount1*spe * 0.5; } //公斤 if (specsValue1 == 2) { v = amount1*spe; } //吨 if (specsValue1 == 3) { v = amount1*spe * 1000; } //毫升 if (specsValue1 == 4) { //毫升换成升 double s = amount1*spe * 0.001; //升换成公斤 v = s; } //升 if (specsValue1 == 5) { v = amount1*spe; } stockrecord.setCensus(v); } return R.status(stockrecordService.save(stockrecord)); } /** * 修改 出入库记录 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入stockrecord") public R update(@Valid @RequestBody Stockrecord stockrecord) { return R.status(stockrecordService.updateById(stockrecord)); } /** * 新增或修改 出入库记录 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入stockrecord") public R submit(@Valid @RequestBody Stockrecord stockrecord) { return R.status(stockrecordService.saveOrUpdate(stockrecord)); } /** * 删除 出入库记录 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "逻辑删除", notes = "传入ids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { //根据出入库记录表找到对应的stockRecord Stockrecord stockRecord = stockrecordService.getById(ids); //根据stockRecord中的库存记录id找到对应的库存数据 Stock stock = stockService.getById(stockRecord.getSid()); //根据stockRecord中的srId找到对应的已出库记录表的对应数据 Soldrecord soldrecord = soldrecordService.getById(stockRecord.getSrId()); //根据stockId、specs1、specs_val1、specs_val2、sid、type找到soldr表中对应的数据 Soldr soldr = soldrService.getByServalParam(soldrecord.getStockId1(),soldrecord.getSpecs1(),soldrecord.getSpecsVal1(),soldrecord.getSpecsVal2(),soldrecord.getSid(),soldrecord.getType()); //对库存表操作 //判断stockType1 0出库 1入库 if (soldr.getAmount1()!=soldrecord.getAmount1()){ throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前库存不足!")); }else { if (stockRecord.getStockType1() == 0) { //0出库 删除记录后原库存添加 stock.setAmount(stock.getAmount() + stockRecord.getAmount1()); //对已出库表操作 soldr出库数量记录表已出库农资减少 soldrecord出库记录表的数据也要删除 //对soldrecord表逻辑删除 soldrecordService.deleteLogic(Func.toLongList(soldrecord.getId().toString())); Integer sub = soldr.getAmount1() - soldrecord.getAmount1(); if (sub <= 0) { soldrService.dels(soldr.getId()); } else { soldr.setAmount1(sub); soldrService.updateById(soldr); } } else { //1 入库 删除记录后原库存减少 stock.setAmount(stock.getAmount() - stockRecord.getAmount1()); } } stockService.UpdaeAmountc(stock); return R.status(stockrecordService.deleteLogic(Func.toLongList(ids))); } }