Browse Source

面料损耗更新

fenghaifu 2 years ago
parent
commit
85b83a0127

+ 63 - 177
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/controller/FabricLossController.java

@@ -1,9 +1,10 @@
 package org.jeecg.modules.report.controller;
 
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
@@ -15,6 +16,7 @@ import org.jeecg.modules.report.entity.*;
 import org.jeecg.modules.report.service.IFabricLossService;
 import org.jeecg.modules.report.service.IFabricOmOrderService;
 import org.jeecg.modules.report.service.IFabricPoOrderService;
+import org.jeecg.modules.report.service.ISyFabricLossReportService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -56,16 +58,35 @@ public class FabricLossController {
 
 	@Autowired
 	private IFabricOmOrderService fabricOmOrderService;
+	@Autowired
+	private ISyFabricLossReportService syFabricLossReportService;
 	/**
 	 *面料损耗
 	 * @param csocode 计划号
+	 * @param update 更新标识,1-重新生成,0-读保存数据
 	 * @return
 	 */
 	@AutoLog(value = "面料损耗整体数据")
 	@ApiOperation(value = "面料损耗整体数据")
 	@GetMapping(value = "/getFabricLossDatas")
-	public Result<FabricLoss> getFabricLossDatas(@RequestParam(name="csocode",required=true) String csocode) {
-		FabricLoss fabricLoss = fabricLossService.getFabricLossData(csocode);
+	public Result<FabricLoss> getFabricLossDatas(@RequestParam(name="csocode",required=true) String csocode,
+	                                             @RequestParam(name="update",required=true) int update) {
+		SyFabricLossReport syFabricLossReport = null;
+		if (update == 0){
+			QueryWrapper<SyFabricLossReport> queryWrapper = new QueryWrapper<>();
+			queryWrapper.eq("plan_code", csocode);
+			List<SyFabricLossReport> syFabricLossReportList = syFabricLossReportService.list(queryWrapper);
+			if (syFabricLossReportList.size()>0){
+				syFabricLossReport = syFabricLossReportList.get(0);
+			}
+		}
+		FabricLoss fabricLoss = null;
+		if (syFabricLossReport != null){
+			fabricLoss = JSON.parseObject(JSON.toJSONString(syFabricLossReport.getContent()), FabricLoss.class);
+		}
+		if (syFabricLossReport == null) {
+			fabricLoss = fabricLossService.getFabricLossData(csocode);
+		}
 		Result<FabricLoss> result = new Result<>();
 		if (fabricLoss == null){
 			result.setSuccess(false);
@@ -79,179 +100,6 @@ public class FabricLossController {
 		return result;
 	}
 
-	/**
-	 * 面料损耗-采购订单-采购数量
-	 * @param code
-	 * @param cinvcode
-	 * @param cBatch
-	 * @param ioritaxcost
-	 * @param cfree1
-	 * @param cfree2
-	 * @param cfree3
-	 * @return
-	 */
-	@AutoLog(value = "面料损耗-采购订单-采购数量")
-	@ApiOperation(value = "面料损耗-采购订单-采购数量")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="code",value="计划号",required = true),@ApiImplicitParam(name="cinvcode",value="存货编码",required = true),
-			@ApiImplicitParam(name="cBatch",value="批号",required = true),@ApiImplicitParam(name="ioritaxcost",value="单价"),
-			@ApiImplicitParam(name="cfree1",value="存货自定义项1"),@ApiImplicitParam(name="cfree2",value="存货自定义项2"),@ApiImplicitParam(name="cfree3",value="存货自定义项3")
-	})
-	@RequestMapping(value = "/getFabricPoOrderSum", method = RequestMethod.GET)
-	public Result<Collection<PoOrderSum>> getFabricPoOrderSum( String code, String cinvcode, String cBatch, String ioritaxcost, String cfree1, String cfree2, String cfree3) {
-		Result<Collection<PoOrderSum>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(code)&&oConvertUtils.isNotEmpty(cinvcode)&&oConvertUtils.isNotEmpty(cBatch)){
-			List<PoOrderSum> fabricPoOrderSum = fabricPoOrderService.getFabricPoOrderSum(code,null, cinvcode, cBatch, ioritaxcost, cfree1, cfree2, cfree3);
-			result.setSuccess(true);
-			result.setResult(fabricPoOrderSum);
-		}
-		return result;
-	}
-
-	/**
-	 *面料损耗-采购订单-余纱数据(有批号)
-	 * @param csocode 计划号
-	 * @param csoordercode 源计划号
-	 * @param cinvcode 物料编码
-	 * @param cBatch 批号
-	 * @param comcode 委外订单号
-	 * @param cfree1 存货自定义项
-	 * @param cfree2 存货自定义项
-	 * @param cfree3 存货自定义项
-	 * @return
-	 */
-	@AutoLog(value = "面料损耗-采购订单-余纱数据(有批号)")
-	@ApiOperation(value = "面料损耗-采购订单-余纱数据(有批号)")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="csoordercode",value="源计划号",required = true),@ApiImplicitParam(name="cinvcode",value="存货编码",required = true),
-			@ApiImplicitParam(name="cBatch",value="批号",required = true),@ApiImplicitParam(name="csocode",value="计划号"),@ApiImplicitParam(name="comcode",value="委外订单号"),
-			@ApiImplicitParam(name="cfree1",value="存货自定义项1"),@ApiImplicitParam(name="cfree2",value="存货自定义项2"),@ApiImplicitParam(name="cfree3",value="存货自定义项3")
-	})
-	@RequestMapping(value = "/getFabricPoOrderYS", method = RequestMethod.GET)
-	public Result<Collection<FabricYarn>> getFabricPoOrderYS(String csocode, String csoordercode, String cinvcode,String cBatch,String comcode,String cfree1,String cfree2,String cfree3) {
-		Result<Collection<FabricYarn>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(csoordercode)&&oConvertUtils.isNotEmpty(cinvcode)&&oConvertUtils.isNotEmpty(cBatch)){
-			List<FabricYarn> fabricPoOrderYS = fabricPoOrderService.getFabricPoOrderYS(csocode, csoordercode, cinvcode, cBatch, comcode, cfree1, cfree2, cfree3);
-			result.setSuccess(true);
-			result.setResult(fabricPoOrderYS);
-		}
-		return result;
-	}
-
-
-	/**
-	 *面料损耗-采购订单-其他入库纱-集合数据
-	 * @param csocode 计划号
-	 * @param cBatch 批号
-	 * @param comcode 委外订单号
-	 * @return
-	 */
-	@AutoLog(value = "面料损耗-采购订单-其他入库纱-超链接")
-	@ApiOperation(value = "面料损耗-采购订单-其他入库纱-超链接")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="cBatch",value="批号",required = true),@ApiImplicitParam(name="csocode",value="计划号",required = true),@ApiImplicitParam(name="comcode",value="委外订单号")
-	})
-	@RequestMapping(value = "/getFabricGetPoOrderQTData", method = RequestMethod.GET)
-	public Result<Collection<FabricYarn>> getFabricGetPoOrderQTData(String csocode,String cBatch,String comcode) {
-		Result<Collection<FabricYarn>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(csocode)&&oConvertUtils.isNotEmpty(cBatch)){
-			List<FabricYarn> fabricGetPoOrderQTData = fabricPoOrderService.getFabricGetPoOrderQTData(csocode, cBatch, comcode);
-			result.setSuccess(true);
-			result.setResult(fabricGetPoOrderQTData);
-		}
-		return result;
-	}
-
-
-	/**
-	 *面料损耗-采购订单-来源余纱-集合数据
-	 * @param csocode 计划号
-	 * @param cBatch 过滤批号
-	 * @param cBatchs 条件批号
-	 * @param price 价格
-	 * @return
-	 */
-	@AutoLog(value = "面料损耗-采购订单-来源余纱-超链接")
-	@ApiOperation(value = "面料损耗-采购订单-来源余纱-超链接")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="cBatch",value="源批号",required = true),@ApiImplicitParam(name="csocode",value="计划号",required = true),@ApiImplicitParam(name="cBatchs",value="批号")
-			,@ApiImplicitParam(name="price",value="价格")
-	})
-	@RequestMapping(value = "/getFabricGetPoOrderYsData", method = RequestMethod.GET)
-	public Result<Collection<FabricYarn>> getFabricGetPoOrderYsData(String csocode,String cBatch,String cBatchs,String price) {
-		Result<Collection<FabricYarn>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(csocode)&&oConvertUtils.isNotEmpty(cBatch)){
-			List<FabricYarn> fabricGetPoOrderYsData = fabricPoOrderService.getFabricGetPoOrderYsData(csocode, cBatch, cBatchs, price);
-			result.setSuccess(true);
-			result.setResult(fabricGetPoOrderYsData);
-		}
-		return result;
-	}
-
-
-
-
-	/**
-	 *面料损耗-委外订单-出库数量-超链接
-	 * @param iOMoDID 子表id
-	 * @param cInvCode 物料编码
-	 * @param cInvName 物料名称
-	 * @param cbatch  批号
-	 * @param cVenAbbName  供应商
-	 * @return
-	 */
-	@AutoLog(value = "面料损耗-委外订单-出库数量-超链接")
-	@ApiOperation(value = "面料损耗-委外订单-出库数量-超链接")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="iOMoDID",value="委外子表id",required = true),@ApiImplicitParam(name="cInvCode",value="物料编码"),@ApiImplicitParam(name="cbatch",value="批号")
-			,@ApiImplicitParam(name="cVenAbbName",value="供应商")
-	})
-	@RequestMapping(value = "/getFabricOMOrderDataCK", method = RequestMethod.GET)
-	public Result<Collection<FabricMoOrderCK>> getFabricOMOrderDataCK(String iOMoDID,String cInvCode,String cInvName,String cbatch,String cVenAbbName) {
-		Result<Collection<FabricMoOrderCK>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(iOMoDID)){
-			List<FabricMoOrderCK> fabricOMOrderDataCK = fabricOmOrderService.getFabricOMOrderDataCK(iOMoDID, cInvCode, cInvName, cbatch, cVenAbbName);
-			result.setSuccess(true);
-			result.setResult(fabricOMOrderDataCK);
-		}
-		return result;
-	}
-
-
-	@AutoLog(value = "面料损耗-委外订单-入库数量-入库明细")
-	@ApiOperation(value = "面料损耗-委外订单-入库数量-入库明细")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="iOMoDID",value="委外子表id",required = true)
-			,@ApiImplicitParam(name="cordercode",value="委外订单号")
-	})
-	@RequestMapping(value = "/getFabricOMOrderDataRK", method = RequestMethod.GET)
-	public Result<Collection<FabricMoOrderRK>> getFabricOMOrderDataRK(String iOMoDID, String cordercode) {
-		Result<Collection<FabricMoOrderRK>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(iOMoDID)){
-			List<FabricMoOrderRK> fabricOMOrderDataRK = fabricOmOrderService.getFabricOMOrderDataRK(iOMoDID, cordercode);
-			result.setSuccess(true);
-			result.setResult(fabricOMOrderDataRK);
-		}
-		return result;
-	}
-
-
-	@AutoLog(value = "面料损耗-委外订单-入库数量-使用明细")
-	@ApiOperation(value = "面料损耗-委外订单-入库数量-使用明细")
-	@ApiImplicitParams(value={
-			@ApiImplicitParam(name="iOMoDID",value="委外子表id",required = true)
-			,@ApiImplicitParam(name="comcode",value="下游委外订单号")
-	})
-	@RequestMapping(value = "/getFabricOMOrderDataRK2", method = RequestMethod.GET)
-	public Result<Collection<FabricMoOrderRK>> getFabricOMOrderDataRK2(String iOMoDID, String comcode) {
-		Result<Collection<FabricMoOrderRK>> result = new Result<>();
-		if (oConvertUtils.isNotEmpty(iOMoDID)){
-			List<FabricMoOrderRK> fabricOMOrderDataRK2 = fabricOmOrderService.getFabricOMOrderDataRK2(iOMoDID, comcode);
-			result.setSuccess(true);
-			result.setResult(fabricOMOrderDataRK2);
-		}
-		return result;
-	}
 
 	/**
 	 * 获取附件内容
@@ -282,4 +130,42 @@ public class FabricLossController {
 		return builder.body(content);
 
 	}
+
+	/**
+	 * 保存
+	 *
+	 * @param fabricLoss : 请求数据
+	 * @return
+	 */
+
+	@AutoLog(value = "面料损耗-保存")
+	@ApiOperation(value="面料损耗-保存", notes="面料损耗-保存")
+	@PostMapping(value = "/save")
+	public Result<FabricLoss> save(@RequestBody FabricLoss fabricLoss) {
+		Result<FabricLoss> ret = new Result<FabricLoss>();
+		if (oConvertUtils.isEmpty(fabricLoss.getCCode())){
+			return ret.error500("无效的计划号,不能保存");
+		}
+		fabricLoss.setEdit(1);
+
+
+		QueryWrapper<SyFabricLossReport> queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("plan_code", fabricLoss.getCCode());
+		JSONObject fabricLossJson = JSONObject.parseObject(JSON.toJSONString(fabricLoss));
+		List<SyFabricLossReport> syFabricLossReportList = syFabricLossReportService.list(queryWrapper);
+		if (syFabricLossReportList.size()>0){
+			SyFabricLossReport syFabricLossReport = syFabricLossReportList.get(0);
+			syFabricLossReport.setContent(fabricLossJson);
+			syFabricLossReportService.updateById(syFabricLossReport);
+		}else{
+			SyFabricLossReport syFabricLossReport = new SyFabricLossReport();
+			syFabricLossReport.setPlanCode(fabricLoss.getCCode());
+			syFabricLossReport.setContent(fabricLossJson);
+			syFabricLossReportService.save(syFabricLossReport);
+		}
+
+		ret.setResult(fabricLoss);
+		ret.setMessage("保存成功");
+		return ret;
+	}
 }

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/FabricLoss.java

@@ -66,5 +66,7 @@ public class FabricLoss {
     boolean success;
     // 提示信息
     String message;
+    // 保存标识,1-已保存,0-未保存
+    int edit;
 
 }

+ 63 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/entity/SyFabricLossReport.java

@@ -0,0 +1,63 @@
+package org.jeecg.modules.report.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * @Description: 森语报表
+ * @Author: jeecg-boot
+ * @Date:   2022-11-07
+ * @Version: V1.0
+ */
+@Data
+@TableName("sy_fabric_loss_report")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="sy_fabric_loss_report对象", description="森语报表")
+public class SyFabricLossReport {
+    
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+	private String id;
+	/**计划号*/
+	@Excel(name = "计划号", width = 15)
+    @ApiModelProperty(value = "计划号")
+	private String planCode;
+	/**计划内容*/
+	@Excel(name = "计划内容", width = 15)
+    @ApiModelProperty(value = "计划内容")
+	private Object content;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+	private String createBy;
+	/**创建时间*/
+	@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+	private String updateBy;
+	/**更新时间*/
+	@Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新时间")
+	private Date updateTime;
+}

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/FabricLossMapper.java

@@ -104,8 +104,8 @@ public interface FabricLossMapper extends BaseMapper<FabricLoss> {
 	@DS("multi-three")
 	String getOmInToOtherMoney(@Param("code")String code);
 	//获取使用其他委外入库物料的金额
-	@DS("multi-three")
-	String getOmOtherToCurMoney(@Param("code")String code);
+	//@DS("multi-three")
+	//String getOmOtherToCurMoney(@Param("code")String code);
 	// 获取采购入库物料被其他委外订单使用明细
 	@DS("multi-three")
 	List<FabricPoOrderOut> getPoOrderInToOther(@Param("code")String code);

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/SyFabricLossReportMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.report.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.report.entity.SyFabricLossReport;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 森语报表
+ * @Author: jeecg-boot
+ * @Date:   2022-11-07
+ * @Version: V1.0
+ */
+public interface SyFabricLossReportMapper extends BaseMapper<SyFabricLossReport> {
+
+}

+ 18 - 15
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/xml/FabricLossMapper.xml

@@ -408,21 +408,19 @@
 	</select>
 	<!--获取委外订单运费发票金额-->
 	<select id="getOmInvoiceMoneyYfList" resultType="org.jeecg.modules.report.entity.FabricCostInvoice">
-
-		select '运费发票' as cBusType,g.cVCName,f.cVenName ,f.cVenAbbName,isnull(sum(c.iSum),0) as iMoney
-			from RdRecord01 a
-			inner join RdRecords01 b on a.id=b.id
-			inner join PurBillVouchs c on c.RdsId=b.autoid
-			inner join OM_MODetails d on d.MODetailsID=b.iOMoDID
-			inner join om_momain e on d.moid = e.moid
+		select '运费发票' as cBusType,g.cVCName,f.cVenName ,f.cVenAbbName,isnull(sum(d.iSum),0) as iMoney
+			from
+			PurBillVouchs d
+			inner join PurBillVouch e on d.PBVID =e.PBVID
 			inner join Vendor  f on f.cVenCode=e.cVenCode
 		inner join VendorClass g on g.cVCCode =f.cVCCode
-			where a.cbustype='委外加工'
-			and e.cCode  like CONCAT(#{code},'%')
+		where  e.cdefine2  like CONCAT(#{code},'%')
+			and d.cInvCode='N3000002426'
 			and g.cVCName not like '成衣厂'
-			and b.cInvCode='N3000002426'
-			group by a.cBusType,g.cVCName,f.cVenName ,f.cVenAbbName
-			order by a.cBusType,g.cVCName,f.cVenName ,f.cVenAbbName
+			group by g.cVCName,f.cVenName ,f.cVenAbbName
+			order by g.cVCName,f.cVenName ,f.cVenAbbName
+
+
 	</select>
 	<!--开票成本-成衣-->
 	<select id="getCostClothesList" resultType="org.jeecg.modules.report.entity.FabricCostClothes">
@@ -477,6 +475,7 @@
 		and d.ccode not like CONCAT(#{code},'%')
 	</select>
 	<!--获取使用其他委外入库物料的金额 -->
+	<!--
 	<select id="getOmOtherToCurMoney" resultType="java.lang.String">
 
 		SELECT
@@ -519,7 +518,7 @@
 				where d.cPOID like  CONCAT(#{code},'%')
 				)
 			)
-	</select>
+	</select>-->
 	<!--获取采购入库物料被其他委外订单使用明细 -->
 	<select id="getPoOrderInToOther" resultType="org.jeecg.modules.report.entity.FabricPoOrderOut">
 		select cCode,cInvCode,cColor,
@@ -655,7 +654,9 @@
 			select f.cBusType,f.cCode,g.cVenName,g.cVenAbbName,
 			e.cInvCode,isnull(e.cFree1,'') as cColor,isnull(e.cBatch,'') as cBatch,
 			e.iQuantity,
-			isnull(isnull((select sum(iSum) from PurBillVouchs  x where x.RdsId =e.autoid and f.cbustype='普通采购'),iSum ),0) as iPurchuseMoney,
+			case when f.cbustype='委外加工' then 0 else
+				isnull(isnull((select sum(iSum) from PurBillVouchs  x where x.RdsId =e.autoid),iSum ),0)
+			end as iPurchuseMoney,
 			e.iOMoDID as MODetailsID
 			from rdrecords01 e
 				inner join rdrecord01 f on e.id=f.id
@@ -707,7 +708,9 @@
 	select e.autoid,f.cBusType,f.cCode,g.cVenName,g.cVenAbbName,
 		e.cInvCode,isnull(e.cFree1,'') as cColor,isnull(e.cBatch,'') as cBatch,
 		e.iQuantity,
-		isnull(isnull((select sum(iSum) from PurBillVouchs  x where x.RdsId =e.autoid and f.cbustype='普通采购'),iSum ),0) as iPurchuseMoney,
+		case when f.cbustype='委外加工' then 0 else
+			isnull(isnull((select sum(iSum) from PurBillVouchs  x where x.RdsId =e.autoid),iSum ),0)
+		end as iPurchuseMoney,
 		e.iOMoDID as MODetailsID,
 		(select top 1  x.cInvCode2+isnull(x.cColor2,'')+isnull(x.cAVBatch2,'') from
 				VIEW_FabricLoss_AssemVouchs x where

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/mapper/xml/SyFabricLossReportMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.report.mapper.SyFabricLossReportMapper">
+
+</mapper>

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/service/ISyFabricLossReportService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.report.service;
+
+import org.jeecg.modules.report.entity.SyFabricLossReport;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 森语报表
+ * @Author: jeecg-boot
+ * @Date:   2022-11-07
+ * @Version: V1.0
+ */
+public interface ISyFabricLossReportService extends IService<SyFabricLossReport> {
+
+}

+ 263 - 32
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/service/impl/FabricLossServiceImpl.java

@@ -72,6 +72,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 	public FabricLoss getFabricLossData(String code) {
 		if (oConvertUtils.isNotEmpty(code)){
 			FabricLoss ret = new FabricLoss();
+			ret.setEdit(0);
 			ret.setSuccess(true);
 			ret.setCCode(code);
 
@@ -238,7 +239,7 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				List<FabricPoOrderOut> findFabricPoOrderOutList = fabricPoOrderOutList.stream().filter(e->
 						oConvertUtils.getString(e.getCInvCode()).equals(oConvertUtils.getString(fabricPoOrder.getCInvCode())) &&
 						oConvertUtils.getString(e.getCColor()).equals(oConvertUtils.getString(fabricPoOrder.getCColor()))).collect(Collectors.toList());
-				// 设置计划号
+				// 设置计划号,单价
 				for (FabricPoOrderOut item : findFabricPoOrderOutList){
 					String cCode = item.getCCode();
 					int index1 = cCode.indexOf("SY");
@@ -250,6 +251,11 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 						index2 = cCode.length();
 					}
 					item.setCPlanCode(cCode.substring(index1,index2-1));
+					if (tmpFabricPoOrderInList.size()>0){
+						item.setIPrice(tmpFabricPoOrderInList.get(0).getIPrice());
+						item.setIMoney(item.getIPrice()*item.getIQuantity());
+					}
+
 				}
 				// 设置仓库库存
 				List<FabricPoOrderOut> findPoOrderStockList = poOrderStockList.stream().filter(e->
@@ -439,13 +445,12 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			}
 			fabricCostInvoiceList = fabricCostInvoiceListOrder;
 			// 转入成本
-			Double d = oConvertUtils.getDouble(fabricLossMapper.getOmOtherToCurMoney(code), 0);
+			Double d = getInCost(ret.getFabricPoOrderList(), fabricOMOrderListGn, fabricOMOrderListGw);
 			FabricCostInvoice fabricCostInvoice = new FabricCostInvoice();
 			fabricCostInvoice.setCVCName("转入成本");
 			fabricCostInvoice.setIMoney(d);
 			fabricCostInvoiceList.add(fabricCostInvoice);
-			// 计算入金额
-			Double costInTotal = fabricCostInvoiceList.stream().mapToDouble(FabricCostInvoice::getIMoney).sum();
+
 			// 转出成本
 			d = getOutCost(ret.getFabricPoOrderList(), fabricOMOrderListGn, fabricOMOrderListGw);
 			fabricCostInvoice = new FabricCostInvoice();
@@ -453,9 +458,13 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			fabricCostInvoice.setIMoney(d);
 			fabricCostInvoiceList.add(fabricCostInvoice);
 			ret.setFabricCostInvoiceList(fabricCostInvoiceList);
-			// 计算实际单件成本
-			costInTotal -= d;
-			BigDecimal bdPriceReal = new BigDecimal(costInTotal/ret.getNumber());
+			// 计算单件成本
+			Double costInTotal = fabricCostInvoiceList.stream().mapToDouble(FabricCostInvoice::getIMoney).sum();
+
+			BigDecimal bdPriceReal = new BigDecimal(0);
+			if (ret.getNumber()>0) {
+				bdPriceReal = new BigDecimal(costInTotal / ret.getNumber());
+			}
 			ret.setActualPrice(bdPriceReal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
 			//开票成本 - 成衣
 			List<FabricCostClothes> fabricCostClothesList = fabricLossMapper.getCostClothesList(code);
@@ -538,6 +547,9 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 			});
 			ret.setFabricCostClothList(fabricCostClothGroupList);
 
+			// 根据委外出库设置采购入库单价
+			setMoneyByOm(ret);
+
 			return  ret;
 		}
 		return null;
@@ -1058,42 +1070,86 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		List<FabricPoOrderOut> invOutGnList = new ArrayList<>();
 		if (invIdGnList.size()>0){
-			fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量
+			invOutGnList = fabricLossMapper.getOmInGnOutList(invIdGnList);   //国内出库数量
 		}
 		List<FabricPoOrderOut> invOutGwList = new ArrayList<>();
 		if (invIdGwList.size()>0){
-			fabricLossMapper.getOmInGwOutList(invIdGwList);   //国外出库数量
+			invOutGwList = fabricLossMapper.getOmInGwOutList(invIdGwList);   //国外出库数量
 		}
+
 		// 扣减出库数量
 		List<FabricOMOrder> omOrderListAll = new ArrayList<>();
 		omOrderListAll.addAll(omOrderListGn);
 		omOrderListAll.addAll(omOrderListGw);
+		// 转换国内外出库数量
+		List<FabricMoOrderCK> omOutListAll = new ArrayList<>();
+		for (FabricOMOrder omOrder : omOrderListAll){
+			List<FabricMoOrderCK> outList = omOrder.getFabricMoOrderCKList();
+			for (FabricMoOrderCK omOut:outList){
+				FabricMoOrderCK outCopy = new FabricMoOrderCK();
+				outCopy.setCBatchOut(omOut.getCBatchOut());
+				outCopy.setCInvCodeOut(omOut.getCInvCodeOut());
+				outCopy.setCColorOut(omOut.getCColorOut());
+				outCopy.setIQuantity(omOut.getIQuantity());
+				omOutListAll.add(outCopy);
+			}
+
+		}
 		for (FabricPoOrderIn itemIn : allInList){
-			for (FabricOMOrder item : omOrderListAll){
-				List<FabricMoOrderCK> outList = item.getFabricMoOrderCKList();
-				if (oConvertUtils.listIsNotEmpty(outList)){
-					Double dOut = outList.stream().filter(e->
-							e.getCInvCodeOut().equals(itemIn.getCInvCode()) &&
-							e.getCColorOut().equals(itemIn.getCColor()) &&
-							e.getCBatchOut().equals(itemIn.getCBatch())).mapToDouble(FabricMoOrderCK::getIQuantity).sum();
-					itemIn.setIQuantity(itemIn.getIQuantity()-dOut);
-				}else{
-					List<FabricPoOrderOut> useOutList = null;
-					// 国内
-					if ("1".equals(itemIn.getCBusType())){
-						useOutList = invOutGnList;
+			boolean bOmFind = false;
+
+			double inLeft = itemIn.getIQuantity();
+			for (FabricMoOrderCK outItem : omOutListAll){
+				if (outItem.getCBatchOut().equals(itemIn.getCBatch()) &&
+					outItem.getCInvCodeOut().equals(itemIn.getCInvCode()) &&
+					outItem.getCColorOut().equals(itemIn.getCColor())){
+					double outLeft = outItem.getIQuantity();
+					bOmFind = true;
+					inLeft -= outLeft;
+					if (inLeft<0){
+						outLeft = inLeft*-1;
+					}else{
+						outLeft = 0;
 					}
-					// 国外
-					else if ("2".equals(itemIn.getCBusType())){
-						useOutList = invOutGwList;
+					outItem.setIQuantity(outLeft);
+					if (inLeft<=0){
+						break;
 					}
-					if (useOutList != null){
-						Double dOut = useOutList.stream().filter(e->
-								e.getCInvCode().equals(itemIn.getCInvCode()) &&
-										e.getCColor().equals(itemIn.getCColor()) &&
-										e.getCBatch().equals(itemIn.getCBatch())).mapToDouble(FabricPoOrderOut::getIQuantity).sum();
-						itemIn.setIQuantity(itemIn.getIQuantity()-dOut);
+				}
+
+			}
+			itemIn.setIQuantity(inLeft);
+			if (!bOmFind){
+				List<FabricPoOrderOut> useOutList = null;
+				// 国内
+				if ("1".equals(itemIn.getCBusType())){
+					useOutList = invOutGnList;
+				}
+				// 国外
+				else if ("2".equals(itemIn.getCBusType())){
+					useOutList = invOutGwList;
+				}
+				if (useOutList != null){
+					for (FabricPoOrderOut outItem : useOutList){
+						if (outItem.getCBatch().equals(itemIn.getCBatch()) &&
+								outItem.getCInvCode().equals(itemIn.getCInvCode()) &&
+								outItem.getCColor().equals(itemIn.getCColor())){
+							double outLeft = outItem.getIQuantity();
+							inLeft -= outLeft;
+							if (inLeft<0){
+								outLeft = inLeft*-1;
+							}else{
+								outLeft = 0;
+							}
+							outItem.setIQuantity(outLeft);
+							if (inLeft<=0){
+								break;
+							}
+						}
+
 					}
+					itemIn.setIQuantity(inLeft);
+
 				}
 			}
 		}
@@ -1104,7 +1160,8 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 				dTotal += itemIn.getIQuantity()*itemIn.getIPrice();
 			}
 		}
-		BigDecimal bdVal = new BigDecimal(dTotal);
+
+		BigDecimal bdVal = new BigDecimal(dTotal*-1);
 		return bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 
 	}
@@ -1117,4 +1174,178 @@ public class FabricLossServiceImpl extends ServiceImpl<FabricLossMapper, FabricL
 		}
 		return null;
 	}
+
+	/**
+	 * 根据委外订单出库价格,设置采购订单-来源余纱,采购订单-其他入库的纱
+	 * @param fabricLoss
+	 */
+	private void setMoneyByOm(FabricLoss fabricLoss){
+		// 获取所有委外的出库
+		List<FabricMoOrderCK> moOrderCKList = new ArrayList<>();
+		List<FabricOMOrder> omOrderList1 = fabricLoss.getFabricOMOrderList1();
+		if (oConvertUtils.listIsNotEmpty(omOrderList1)){
+			for (FabricOMOrder omOrder : omOrderList1){
+				moOrderCKList.addAll(omOrder.getFabricMoOrderCKList());
+			}
+		}
+		List<FabricOMOrder> omOrderList2 = fabricLoss.getFabricOMOrderList2();
+		if (oConvertUtils.listIsNotEmpty(omOrderList2)){
+			for (FabricOMOrder omOrder : omOrderList2){
+				moOrderCKList.addAll(omOrder.getFabricMoOrderCKList());
+			}
+		}
+		// 设置采购订单中来源余纱和其他入库的纱的单价和金额
+		List<FabricPoOrder> poOrderList = fabricLoss.getFabricPoOrderList();
+		if (oConvertUtils.listIsNotEmpty(poOrderList)) {
+			for (FabricPoOrder poOrder : poOrderList) {
+				if (poOrder.getCInvName().equals("来源余纱") || poOrder.getCInvName().equals("其他入库的纱")){
+					List<FabricPoOrderOut> orderOutList = poOrder.getFabricPoOrderOutList();
+					if (oConvertUtils.listIsNotEmpty(orderOutList)) {
+						for (FabricPoOrderOut orderOut : orderOutList) {
+							List<FabricMoOrderCK> findOrderCKList = moOrderCKList.stream().filter(e ->
+									e.getCInvCodeOut().equals(orderOut.getCInvCode()) &&
+											e.getCColorOut().equals(orderOut.getCColor()) &&
+											e.getCBatchOut().equals(orderOut.getCBatch())).collect(Collectors.toList());
+							if (findOrderCKList.size() > 0) {
+								orderOut.setIPrice(findOrderCKList.get(0).getIPrice());
+								BigDecimal bdVal = new BigDecimal(orderOut.getIQuantity()*orderOut.getIPrice());
+								orderOut.setIMoney(bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+							}
+						}
+					}
+				}
+
+			}
+		}
+	}
+
+	/**
+	 * 委外出库材料,找出不在采购入库和委外入库中,计算转入成本
+	 * @param poOrderList - 采购入库详情
+	 * @param omOrderListGn - 委外订单国内
+	 * @param omOrderListGw - 委外订单国外
+	 * @return
+	 */
+	private Double getInCost(List<FabricPoOrder> poOrderList, List<FabricOMOrder> omOrderListGn, List<FabricOMOrder> omOrderListGw){
+		// 采购出入库去掉末尾两行:来源余纱、其他入库纱
+		List<FabricPoOrder> poOrderListReal = new ArrayList<>();
+		if (poOrderList.size()>2){
+			poOrderListReal.addAll(poOrderList);
+			poOrderListReal.remove(poOrderListReal.size()-1);
+			poOrderListReal.remove(poOrderListReal.size()-1);
+		}
+		// 合并所有采购入库+委外入库的物料批次。借用FabricPoOrderIn类
+		List<FabricPoOrderIn> allInList = new ArrayList<>();
+		for (FabricPoOrder item : poOrderListReal){
+			List<FabricPoOrderIn> inList = item.getFabricPoOrderInList();
+			if (oConvertUtils.listIsNotEmpty(inList)){
+				for (FabricPoOrderIn itemIn : inList){
+					Optional<FabricPoOrderIn> findItemOpt = allInList.stream().filter(e->
+							e.getCInvCode().equals(itemIn.getCInvCode()) &&
+									e.getCColor().equals(itemIn.getCColor()) &&
+									e.getCBatch().equals(itemIn.getCBatch())).findFirst();
+					if (findItemOpt.isPresent()){
+						FabricPoOrderIn formatItem = findItemOpt.get();
+						Double dMoney = formatItem.getIPrice()*formatItem.getIQuantity()+itemIn.getIPrice()*itemIn.getIQuantity();
+						Double dQuantity = formatItem.getIQuantity()+itemIn.getIQuantity();
+						formatItem.setIPrice(dMoney/dQuantity);
+						formatItem.setIQuantity(dQuantity);
+
+					}else {
+						FabricPoOrderIn formatItem = new FabricPoOrderIn();
+						formatItem.setCInvCode(itemIn.getCInvCode());
+						formatItem.setCColor(itemIn.getCColor());
+						formatItem.setCBatch(itemIn.getCBatch());
+						formatItem.setIQuantity(itemIn.getIQuantity());
+						formatItem.setIPrice(itemIn.getIPrice());
+						allInList.add(formatItem);
+					}
+				}
+			}
+		}
+
+		for (FabricOMOrder item : omOrderListGn){
+			List<FabricMoOrderRK> inList = item.getFabricMoOrderRKList();
+			if (oConvertUtils.listIsNotEmpty(inList)){
+				for (FabricMoOrderRK itemIn : inList){
+					FabricPoOrderIn formatItem = new FabricPoOrderIn();
+					formatItem.setCInvCode(item.getCInvCode());
+					formatItem.setCColor(item.getCColor());
+					formatItem.setCBatch(itemIn.getCBatch());
+					formatItem.setIQuantity(itemIn.getIQuantityIn());
+					formatItem.setIPrice(itemIn.getIPrice());
+					allInList.add(formatItem);
+				}
+			}
+		}
+
+		for (FabricOMOrder item : omOrderListGw){
+			List<FabricMoOrderRK> inList = item.getFabricMoOrderRKList();
+			if (oConvertUtils.listIsNotEmpty(inList)){
+				for (FabricMoOrderRK itemIn : inList){
+					FabricPoOrderIn formatItem = new FabricPoOrderIn();
+					formatItem.setCInvCode(item.getCInvCode());
+					formatItem.setCColor(item.getCColor());
+					formatItem.setCBatch(itemIn.getCBatch());
+					formatItem.setIQuantity(itemIn.getIQuantityIn());
+					formatItem.setIPrice(itemIn.getIPrice());
+					allInList.add(formatItem);
+				}
+			}
+		}
+
+		// 合并所有出的
+		List<FabricOMOrder> omOrderListAll = new ArrayList<>();
+		omOrderListAll.addAll(omOrderListGn);
+		omOrderListAll.addAll(omOrderListGw);
+		List<FabricMoOrderCK> omOutListAll = new ArrayList<>();
+		for (FabricOMOrder omOrder : omOrderListAll){
+			List<FabricMoOrderCK> outList = omOrder.getFabricMoOrderCKList();
+			for (FabricMoOrderCK omOut:outList){
+				FabricMoOrderCK outCopy = new FabricMoOrderCK();
+				outCopy.setCBatchOut(omOut.getCBatchOut());
+				outCopy.setCInvCodeOut(omOut.getCInvCodeOut());
+				outCopy.setCColorOut(omOut.getCColorOut());
+				outCopy.setIQuantity(omOut.getIQuantity());
+				outCopy.setIPrice(omOut.getIPrice());
+				omOutListAll.add(outCopy);
+			}
+
+		}
+		for (FabricMoOrderCK itemOut : omOutListAll){
+
+			double outLeft = itemOut.getIQuantity();
+			for (FabricPoOrderIn itemIn : allInList){
+				if (itemOut.getCBatchOut().equals(itemIn.getCBatch()) &&
+						itemOut.getCInvCodeOut().equals(itemIn.getCInvCode()) &&
+						itemOut.getCColorOut().equals(itemIn.getCColor())){
+					double inLeft = itemIn.getIQuantity();
+
+					outLeft -= inLeft;
+					if (outLeft<0){
+						inLeft = outLeft*-1;
+					}else{
+						inLeft = 0;
+					}
+					itemIn.setIQuantity(inLeft);
+					if (outLeft<=0){
+						break;
+					}
+				}
+
+			}
+			itemOut.setIQuantity(outLeft);
+		}
+		// 计算总转入成本
+		Double dTotal = 0.0;
+		for (FabricMoOrderCK itemOut : omOutListAll){
+			if (itemOut.getIQuantity()>0){
+				dTotal += itemOut.getIQuantity()*itemOut.getIPrice();
+			}
+		}
+
+		BigDecimal bdVal = new BigDecimal(dTotal);
+		return bdVal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+	}
 }

+ 19 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/report/service/impl/SyFabricLossReportServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.report.service.impl;
+
+import org.jeecg.modules.report.entity.SyFabricLossReport;
+import org.jeecg.modules.report.mapper.SyFabricLossReportMapper;
+import org.jeecg.modules.report.service.ISyFabricLossReportService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 森语报表
+ * @Author: jeecg-boot
+ * @Date:   2022-11-07
+ * @Version: V1.0
+ */
+@Service
+public class SyFabricLossReportServiceImpl extends ServiceImpl<SyFabricLossReportMapper, SyFabricLossReport> implements ISyFabricLossReportService {
+
+}